Moodle 主题图标尺寸控制指南:从 `{{pix}}` 模板助手到 `icon-size` 工具类

发布时间:2026/10/6 2:18:28

Moodle 主题图标尺寸控制指南:从 `{{pix}}` 模板助手到 `icon-size` 工具类 教育后端前端【免费下载链接】moodleMoodle - the worlds open source learning platform项目地址https://gitcode.com/gh_mirrors/mo/moodle点击查看免费下载导读本文以 public/admin/tool/componentlibrary/content/moodle/themes/iconsizes.mdMoodle 官方组件库文档为骨架系统讲解 Moodle 主题中图标渲染与尺寸控制的完整方案如何用{{pix}}模板助手输出图标、icon-size-0至icon-size-7各档位的实际像素值、底层 SCSS 实现原理以及在按钮、抽屉等真实 UI 场景中的组合用法。读完本文你可以直接在 Boost 系主题或自己的插件模板中精确控制任意图标的显示尺寸。一、Moodle 图标渲染的基础{{pix}}模板助手Moodle 的图标通常不直接手写 HTML而是通过 Mustache 模板中的{{pix}}助手来渲染。这样做的好处是图标资源Font Awesome 字形、SVG、PNG由 Moodle 核心统一解析与输出替换文本title/aria-label可以本地化保证无障碍可访问性输出的 HTML 统一带icon基类方便主题通过 CSS 统一控制样式。文档中给出的标准写法如下{{#pix}}t/up, moodle, {{#str}} up, moodle {{/str}}{{/pix}}其中各参数含义为参数取值示例作用图标名t/up图标标识t/前缀表示来自 Moodle 核心pix目录的通用图标组件moodle图标所属组件moodle即核心组件插件可换成自己的组件名替代文本{{#str}} up, moodle {{/str}}从语言包读取本地化字符串作为图标的title与aria-label{{#pix}}...{{/pix}}是块形式支持嵌套{{#str}}{{pix}}是简单形式用于不需要替代文本的场景。上述写法在页面上最终渲染为如下 HTML来自 iconsizes.md 中的示例预览i classicon fa fa-arrow-up fa-fw titleUp aria-labelUp/i可以看到Moodle 为图标统一注入了三个关键 classicon所有 Moodle 图标的统一基类fa fa-arrow-upFont Awesome 图标字体类fa-fw固定宽度fixed-width保证不同字形对齐。icon基类在 public/theme/boost/scss/moodle/icons.scss 中被标准化——设置max-width、max-height、右边距margin: 0 0.5rem 0 0并强制box-sizing: content-box对于 SVG 形式的图标img.icon还会强制width: 20px; height: 16px;这就是下面尺寸体系的基准。二、icon-size尺寸体系8 档像素规格文档指出控制图标大小统一使用icon-size-x工具类。结合 public/theme/boost/scss/moodle/variables.scss 中定义的基准变量与映射表各档位的实际像素值如下基准变量Boost 主题$icon-width: 20px; $icon-height: 16px;尺寸映射表$iconsizes决定高度$iconwidthsizes决定宽度$iconsizes: map-merge(( 0: 0, 1: ($icon-height * .5), 2: ($icon-height * .75), 3: $icon-height, 4: ($icon-height * 1.5), 5: ($icon-height * 2), 6: ($icon-height * 2.5), 7: ($icon-height * 3) ), $iconsizes);换算后的规格表class高度px宽度px说明icon-size-000隐藏/占位icon-size-1810最小可读档位icon-size-21215紧凑场景icon-size-31620默认尺寸icon-size-42430强调图标icon-size-53240大图标icon-size-64050超大图标icon-size-74860极限尺寸当前主题新增档位注意本文所依据的组件库文档页面写作于 2020 年在示例卡片中标注了icon-size-1为 4px、icon-size-2为 8px而当前仓库 variables.scss 中基准变量$icon-height为 16px因此实际计算值为 8px / 12px。以当前 SCSS 变量计算值为准若你在旧版分支上开发请以该分支的变量值为准。这提醒我们查阅组件库文档时若与主题变量不一致应始终以variables.scss中的实际定义为最终依据。三、使用方式把工具类加在容器上icon-size-x类的用法很特别不是直接加在i图标上而是加在包裹图标的容器父元素上CSS 会作用于容器内的.icon。文档中的完整示例Bootstrap 卡片演示如下div classd-flex div classicon-size-1 card bg-light me-2 div classcard-body d-flex justify-content-center align-items-center i classfa fa-arrow-up icon/i /div div classcard-footer icon-size-1 /div /div !-- icon-size-2、icon-size-3 ... icon-size-6 结构相同仅替换 class -- div classicon-size-3 card bg-light me-2 div classcard-body d-flex justify-content-center align-items-center i classfa fa-arrow-up icon/i /div div classcard-footer icon-size-3默认尺寸 /div /div /div这种“容器 后代选择器”设计便于批量控制一个列表项、一个卡片块内若有多个图标只需在容器上设一次尺寸即可全部生效。四、底层实现!important强制覆盖icon-size系列类之所以能“压住”图标默认样式是因为 public/theme/boost/scss/moodle/icons.scss 中的each循环对尺寸属性全部使用了!importanteach $size, $length in $iconsizes { .icon-size-#{$size} { .icon { height: $length !important; width: map-get($iconwidthsizes, $size) !important; max-height: $length !important; max-width: map-get($iconwidthsizes, $size) !important; font-size: $length !important; } } }从源码结构看这里同时强制了四条尺寸属性height/width/max-height/max-width和font-size对 Font Awesome 这类图标字体font-size直接决定字形大小对 SVG / 图片图标width/height决定实际渲染盒max-*属性用于压制基类 .icon 中的max-width: map-get($iconwidthsizes, 4)默认上限。五、与图标按钮组合.btn-icon.icon-size-x尺寸体系不仅作用于普通图标还与图标按钮.btn-icon深度集成。在 public/theme/boost/scss/moodle/buttons.scss 中按钮本身按默认图标尺寸16px计算为正方形calc(16px 1rem)并且对每一档icon-size生成配套规则.btn-icon { height: calc(#{$icon-height} 1rem); width: calc(#{$icon-height} 1rem); display: inline-flex; align-items: center; justify-content: center; .icon { margin: 0; } each $size, $length in $iconsizes { .icon-size-#{$size} { height: calc(#{$length} * 2); width: calc(#{$length} * 2); --#{$prefix}btn-font-size: #{$length}; --#{$prefix}btn-line-height: #{$length}; } } }也就是说按钮会跟随图标档位等比放大图标为 16px 时按钮约 32px 见方16px 1rem若改用icon-size-532px按钮则放大为64px见方32px * 2。同时按钮内部图标通过.btn-icon .icon { margin: 0; }去掉了默认右间距保证居中。这一组合在 Boost 主题的抽屉drawer开关中有真实应用见 public/theme/boost/templates/drawer.mustache 与 public/theme/boost/templates/drawers.mustachebutton classbtn btn-icon icon-size-3 drawertoggle ...六、编译产物与主题差异SCSS 编译后icon-size规则会输出到主题的最终样式表中。以默认主题为例Boostpublic/theme/boost/style/moodle.css 包含.icon-size-0 .icon至.icon-size-7 .icon的全部规则L40409 起为.btn-icon.icon-size-0至.btn-icon.icon-size-7的按钮变体Classicpublic/theme/classic/style/moodle.css 中同样生成了完整体系。因此即使不通过 Sass 构建直接在 HTML 中使用这些类也能生效——组件库文档正是依赖这套编译产物做实时预览的。七、主题级定制覆盖尺寸映射如果你要开发自己的主题或对现有主题做尺寸调整官方推荐的方式是在主题的 SCSS 中覆盖$iconsizes/$iconwidthsizes映射表而非逐个改类名。例如$icon-height: 20px; // 修改默认图标高度 $icon-width: 24px; // 修改默认图标宽度 $iconsizes: map-merge(( 3: $icon-height, // 保持 3 为默认档 5: ($icon-height * 2.5), // 调大 5 档 ), $iconsizes);覆盖后icons.scss 的each循环与 buttons.scss 的按钮循环会基于新映射自动重新生成整套规则图标按钮、列表图标、抽屉开关等所有使用处同步生效无需改动模板。八、延伸阅读组件库主题手册本文对应文档 iconsizes.md 是 Moodle 组件库Component Library主题章节的一部分同目录下还收录了与之配套的视觉规范文档可作为主题开发的完整参考colours.md —— 主题配色体系spacing.md —— 间距与留白text.md —— 文字排版positioning.md —— 定位与对齐grids.md —— 栅格布局layout.md —— 页面布局小结Moodle 的图标尺寸控制可以归纳为一条清晰链路{{pix}}模板助手输出统一结构.icon基类→icon-size-x容器工具类指定档位 → SCSS 变量映射表决定像素值 →!important规则强制生效 →.btn-icon联动放大按钮。开发者在实际项目中只需记住两个关键点尺寸类加在容器而非图标本身以 variables.scss 的当前变量值为准默认档icon-size-3 16×20px。无论是核心主题调整还是插件内嵌组件这套体系都能保证图标视觉风格的一致与可控。赞分享教育后端前端【免费下载链接】moodleMoodle - the worlds open source learning platform项目地址https://gitcode.com/gh_mirrors/mo/moodle点击查看免费下载相关推荐BootstrapVue 尺寸体系完全指南size prop 与尺寸工具类深度解析BootstrapVue 尺寸体系完全指南size prop 与尺寸工具类深度解析 本文以 BootstrapVue 官方参考文档 Sizing props前端UI组件Lucide Vue 图标尺寸调整完全指南size 属性与 CSS 控制详解Lucide Vue 图标尺寸调整完全指南size 属性与 CSS 控制详解 导读 本指南聚焦于 Lucide 图标库在 Vue 应用中的 尺寸控制 问题。L前端UI组件设计系统Lucide Solid 图标尺寸控制完全指南size 属性与 CSS 缩放实战Lucide Solid 图标尺寸控制完全指南size 属性与 CSS 缩放实战 本文面向使用 Solid 框架的开发者系统讲解 Lucide 图标库So前端UI组件设计系统上一篇FreeCAD CAM 工作台刀具管理Tool Management功能规划深度解析下一篇技术解构QuickLook Video如何重新定义macOS视频预览生态创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/6 2:18:28

Rufus 3.22 还能做 Windows 7 启动盘吗?版本边界一查便知

Rufus 3.22 还能做 Windows 7 启动盘吗?版本边界一查便知 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus Rufus 是 USB 启动盘格式化工具,核心能力是格式化 U 盘并写入 IS…

2026/10/6 3:23:32

从请求报文到线上排障:HTTP协议系统性理解与实战指南

前两天帮同事排查一个线上接口问题,他把浏览器里复制出来的 curl 命令直接甩给我,附带一句“帮我看看为啥接口超时”。我问他“超时是连接超时还是读超时,TTFB 多少,看没看响应头的 Cache-Control”,他愣了一下&#x…

2026/10/6 3:23:32

std::list 底层探秘:双向链表、哨兵节点与实现细节

很多人都在用std::list,可一旦被问到它底层到底怎么实现的,十有八九会卡壳。std::list底层是一个双向链表,节点在堆上独立分配,通过prev和next指针串起来,跟vector那种连续内存完全是两个世界。它解决的是序列容器里“…

2026/10/6 3:23:32

H.264分析工具实战:从NALU到宏块定位视频花屏与卡顿

简介:H.264分析工具是一套面向视频编码开发与调试的H.264/AVC码流解析资源,适合视频工程师、编解码学习者和内容创作者使用。包内共186个文件,以C/C源码(h与cpp文件)为主,同时包含可执行程序、示例H.264/H.…

2026/10/6 3:23:32

微信小程序商城毕设全解析:环境配置、避坑指南与二次开发

简介:这套毕业设计资源基于微信小程序打造完整商城项目,适合计算机相关专业学生完成毕业设计或课程设计,也适合刚入门小程序开发的新手对照学习。项目包含前端小程序页面与后端服务代码,覆盖商城、商品详情、发现、我的、支付、消…

2026/10/6 3:23:32

25个你一定要掌握的JavaScript技巧,是新手到高手的进阶秘籍!

JavaScript 一直在更新,变得越来越好用。从 ES6 开始,加入了很多新写法,能让你的代码更短、更清楚,也常常运行得更快。掌握这些技巧,不仅能让你写代码更快,还能让代码更容易让别人看懂和维护,代…

2026/10/6 3:18:31

旧电脑改造NAS全攻略:硬件选型到数据备份的实战指南

家里那台旧电脑吃灰半年后,我总算给它找了个正经归宿——自建一台家用NAS。折腾下来最大的感受是:网上教程多,但能一口气把事情讲透的太少。要么只给你甩几条命令,要么上来就推高价成品机,很少有人把“为什么要这样选”…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/5 17:38:27

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

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

2026/10/6 0:03:23

MR25H40CDF+STM32F031C6工业级高可靠数据存储方案

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的 PLC 控制柜里、在风电变流器的散热片背面、在矿井监测终端的金属外壳下,你经常能看到一块指甲盖大小的黑色芯片——它既不是 Flash,也不是…

2026/10/6 0:03:23

MRAM+STM32工业断电数据保全实战指南

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的PLC柜里、在野外无人值守的环境监测终端里、在高速运转的包装机控制板上,你经常能看到一块指甲盖大小的黑色芯片,旁边贴着“MR25H40CDF”丝…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑