news 2026/9/11 12:25:52

AdminLTE 如何启用 RTL(从右到左)布局:用 rtlcss 生成 .rtl.css 并在页面应用 dir=“rtl“

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AdminLTE 如何启用 RTL(从右到左)布局:用 rtlcss 生成 .rtl.css 并在页面应用 dir=“rtl“

AdminLTE 如何启用 RTL(从右到左)布局:用 rtlcss 生成 .rtl.css 并在页面应用 dir="rtl"

【免费下载链接】AdminLTEAdminLTE - Free admin dashboard template based on Bootstrap 5项目地址: https://gitcode.com/GitHub_Trending/ad/AdminLTE

如果你的项目使用 AdminLTE 4(基于 Bootstrap 5 的后台模板),需要为阿拉伯语、希伯来语等从右到左的语言提供镜像版布局,那么要做两件事:用构建管线中的rtlcss插件把编译出的 CSS 转换一份.rtl.css,再在 HTML 页面的<html>标签上应用dir="rtl"并让该页面加载这份 RTL 样式表。本仓库已经内置了完整的这条链路,本文按照 package.json、postcss 配置 和 layout-rtl 示例页 中的真实配置,说明生成与应用的全部步骤,以及如何核对产物。

准备条件

按照 README.md 的 Quick start 一节,编译 dist 文件需要 Node.js/npm:

  1. 克隆或下载仓库后执行npm install安装依赖;
  2. 依赖中已包含 RTL 所需的全部工具,无需额外安装。在 package.json 的devDependencies中可以核对到:
"postcss": "^8.4.43", "postcss-cli": "^11.0.0", "rtlcss": "^4.3.0", "cross-env": "^7.0.3"

其中rtlcss负责 CSS 方向转换,cross-env用于在命令中设置环境变量,postcss-cli提供命令行入口。

注意副作用:npm run production的定义是npm-run-all clean lint compile,而cleanrimraf dist,即先删除整个dist目录再重新编译。如果只想增量生成 RTL 样式,使用后文的单步脚本即可。

生成 .rtl.css

生成由css-rtl脚本完成,它要求dist/css/下已经存在编译好的.css文件(即先跑过css-compile)。

完整链路用一条命令即可,定义于 package.json:

npm run css

它的展开是npm-run-all css-compile css-prefix css-rtl css-minify,按顺序执行四步:

  • css-compile:用 sass 把src/scss/编译到dist/css/
  • css-prefix:对dist/css/*.css(排除*.rtl*.css*.min.css)做 postcss 前缀处理;
  • css-rtl:即下一条命令,生成.rtl.css
  • css-minify:并行压缩主样式(css-minify-main)和 RTL 样式(css-minify-rtl,单独对dist/css/*rtl.css压缩出.rtl.min.css)。

只跑 RTL 转换这一步的原始命令是:

npm run css-rtl

展开为:

cross-env NODE_ENV=RTL postcss --config src/config/postcss.config.mjs --dir "dist/css" --ext ".rtl.css" "dist/css/*.css" "!dist/css/*.min.css" "!dist/css/*.rtl.css"

逐段说明:

  • --dir "dist/css" --ext ".rtl.css":输入文件就地输出到dist/css/,扩展名追加为.rtl.css,即adminlte.css生成adminlte.rtl.css
  • 输入参数"dist/css/*.css" "!dist/css/*.min.css" "!dist/css/*.rtl.css":只处理普通 CSS,明确排除已压缩文件和已生成的 RTL 文件,避免二次转换;
  • cross-env NODE_ENV=RTL:设置环境变量。这是 rtlcss 生效的开关——src/config/postcss.config.mjs 中 rtlcss 插件的启用条件正是:
plugins: { autoprefixer: { cascade: false }, rtlcss: ctx.env === 'RTL' ? {} : false }

也就是说,同样的 postcss 配置在非 RTL 步骤(如css-prefix)中不会执行方向转换,rtlcss只在NODE_ENV=RTL时挂载。

开发模式下还有对应的 watch 脚本(package.json):watch-css-dist用 nodemon 监听dist/css/,且--ignore "dist/css/*.rtl.*"(忽略自己生成的 RTL 文件以防循环触发),每次源 CSS 变化后自动重跑npm run css-rtlnpm run dev会并行启动所有watch-*脚本和文档站点。

RTL 输出中源码注释的作用

rtlcss 通过 CSS 注释指令控制转换行为。本仓库源码中就使用了这种指令,例如 src/scss/_app-sidebar.scss 中:

transform: translateY(-50%) /*rtl:append:rotate(180deg)*/;

以及/*rtl:ignore*/。编译产物dist/css/adminlte.css中还保留了大量来自 Bootstrap 的/* rtl:... */注释(如rtl:begin:ignore/rtl:end:ignorertl:url(...)),这些注释在生成adminlte.rtl.css时被 rtlcss 读取,决定对应声明是翻转、忽略还是替换。

在页面应用 dir="rtl"

参考仓库自带的示例页 src/html/pages/layout/layout-rtl.astro,启用 RTL 的页面写法分两点:

  1. <html>标签上加dir="rtl",并在 frontmatter 中声明isRtl
--- const title = "AdminLTE 4 | Layout RTL"; const path = "../../../dist"; const isRtl = true; --- <html lang="en" dir="rtl"> <head> <Head title={title} path={path} isRtl={isRtl} /> </head>
  1. 头部组件根据isRtl选择样式表文件名。src/html/components/_head.astro 中的逻辑是:
--- const { title, path, isRtl } = Astro.props; const cssPath = isRtl ? ".rtl" : ""; --- <link rel="stylesheet" href={path + "/css/adminlte" + cssPath + ".css"} />

即 RTL 页面加载adminlte.rtl.css,其余页面加载adminlte.css。在自己的 HTML 页面中对应写法就是:给<html>dir="rtl",并把 AdminLTE 样式表指向dist/css/adminlte.rtl.css(压缩版为adminlte.rtl.min.css)。

验证结果

编译完成后按以下产物核对(仓库当前dist中已包含这些文件,可直接对照):

  1. RTL 样式表已生成dist/css/下存在adminlte.rtl.cssadminlte.rtl.min.css及对应的.map文件,与主样式adminlte.cssadminlte.min.css并列。
  2. RTL 页面指向了 RTL 样式表:构建出的示例页 dist/pages/layout/layout-rtl.html 中可以看到:
<html lang="en" dir="rtl"> ... <link rel="stylesheet" href="../../../dist/css/adminlte.rtl.css" />

dir="rtl".rtl.css引用同时生效。 3.浏览器预览:执行npm run dev(README 中注明为开发模式,带浏览器自动刷新)后,打开 Layout 分组的 "Layout RTL" 演示页(构建产物路径为dist/pages/layout/layout-rtl.html),整版布局相对默认页呈镜像排布,即为 RTL 生效。

限制说明

  • rtlcss插件的启用完全依赖NODE_ENV=RTL,单独直接运行 postcss 而不设置该变量时插件为false,不会产生 RTL 文件;RTL 生成必须走css-rtl脚本或等价的带环境变量的调用。
  • css-rtl的输入显式排除了*.min.css*.rtl.css,压缩版 RTL 文件由css-minify-rtl.rtl.css另行生成,不要手动对.rtl.css再跑一次css-rtl
  • 修改src/scss/后,watch 流程会先触发css-compile(重编译主 CSS),再由watch-css-dist自动重跑css-rtl;手动重跑时用npm run css一条命令即可保证四步顺序正确。

【免费下载链接】AdminLTEAdminLTE - Free admin dashboard template based on Bootstrap 5项目地址: https://gitcode.com/GitHub_Trending/ad/AdminLTE

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 12:25:16

CMSIS-FreeRTOS源码静态审计:ARM Cortex-M实时系统确定性验证实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 12:23:29

Claude Code专家模式:66个AI技能如何提升编程效率

1. Claude Code 的专家模式革命&#xff1a;66个AI技能如何重塑开发体验 那天凌晨三点&#xff0c;我在调试一段死活跑不通的Python异步代码时&#xff0c;偶然触发了Claude Code的"并发编程专家"模式。原本普通的代码补全突然变成了详尽的执行流程图线程安全分析三种…

作者头像 李华
网站建设 2026/9/11 12:22:27

JP61陀螺仪实战:解决麦克纳姆轮底盘走不直与转向不准

做自主导航这个系列&#xff0c;前面几篇一直在聊电机控制、编码器测速、麦克纳姆轮运动学解算&#xff0c;底盘终于能跑了&#xff0c;但真正上路之后就会发现一个尴尬的问题&#xff1a;底盘直线走不直&#xff0c;转弯角度全靠猜。轮子打滑、地面摩擦不均、左右电机响应延迟…

作者头像 李华
网站建设 2026/9/11 12:21:46

提升转化率的表单设计核心原则与实战技巧

1. 表单设计的本质与核心价值 表单作为人机交互的基础界面元素&#xff0c;其重要性常常被低估。在数字化产品中&#xff0c;表单承担着数据采集、用户输入、系统反馈等关键功能。一个设计得当的表单能够将转化率提升30%以上&#xff0c;而糟糕的表单设计则可能导致高达80%的用…

作者头像 李华
网站建设 2026/9/11 12:21:37

PROFINET GSD文件详解:设备识别、IO映射与同步配置

简介&#xff1a;本资源是西门子Sinamics G120变频器&#xff08;配备CU240SPN控制单元&#xff09;实现PROFINET通信所需的V3.1版GSD文件包&#xff0c;专为自动化工程师、PLC系统集成人员及工业网络调试技术人员设计&#xff0c;解决PROFINET主站&#xff08;如S7-1500/S7-12…

作者头像 李华