资讯动态

amis 文本装饰工具类详解:underline、line-through 与 no-underline 的用法与源码实现

发布时间:2026/9/14 16:17:00 来源:尧图企业网站定制
amis 文本装饰工具类详解underline、line-through 与 no-underline 的用法与源码实现【免费下载链接】amis前端低代码框架通过 JSON 配置就能生成各种页面。项目地址: https://gitcode.com/GitHub_Trending/am/amis导读在 amis 低代码框架中除了通过 JSON 配置渲染组件外还内置了一套完整的 CSS 工具类Helper Class体系用于快速调整文本的装饰样式。本文聚焦于 amis-ui 包中 文本装饰工具类文档系统讲解underline下划线、line-through删除线、no-underline去除下划线三个核心类的用法、响应式变体、与链接样式的联动关系并结合 底层 SCSS 实现 分析其编译原理。读完本文你可以在 amis 页面与自定义样式中熟练使用这些工具类也能理解它们与其他文本工具类的配合方式。一、核心类一览文本装饰工具类文档 给出了最直接的类名到 CSS 属性的映射关系原文表格如下ClassPropertiesunderlinetext-decoration: underlineline-throughtext-decoration: line-throughno-underlinetext-decoration: noneunderline为文本添加下划线常用于强调链接、标题或需要视觉引导的提示文字line-through为文本添加删除线常用于展示价格划线、已完成任务的标记等场景no-underline显式移除文本的下划线常用于清除超链接默认样式、或覆盖组件内嵌的下划线样式。这三个类都只作用于text-decoration这一个 CSS 属性互斥且语义明确使用时直接以类名形式挂在任意 HTML 元素或 amis 支持className配置的组件上即可。二、源码实现解析2.1 工具类的主体生成逻辑与纯手写的 CSS 不同amis-ui 的文本装饰工具类由 SCSS 混入Mixin动态生成。查看 _text-decoration.scss 的源码mixin make-text-decoration($prefix: .) { #{$prefix}underline { text-decoration: underline; } #{$prefix}line-through { text-decoration: line-through; } #{$prefix}no-underline { text-decoration: none; } } include make-text-decoration(); each $deivce in map-keys($devices) { include media-device($deivce) { include make-text-decoration(. selector-escape($deivce :)); } } // hover ?可以看到make-text-decoration混入接收一个可选的类名前缀参数默认前缀为.即生成.underline、.line-through、.no-underline三个基础类混入先以默认前缀调用一次生成全局可用的基础类随后遍历$devices设备断点映射在对应媒体查询内部以.设备名:作为前缀再次调用混入生成响应式变体文件末尾的// hover ?注释表明目前该工具类体系暂未内置 hover 态变体如需 hover 效果请自行扩展或借助 CSS 变量实现。2.2 文档与样式同源markdown 注释块值得注意的一个工程细节是_text-decoration.scss 的文件头部有一段/*!markdown ... */注释块其内容与独立的 _text-decoration.md 文档完全一致。这意味着该类工具文档可以通过构建脚本从 SCSS 源文件中提取保证文档即代码、代码即文档避免样式实现与说明文档发生漂移。2.3 响应式变体的实现原理响应式变体依赖 _variables.scss 中定义的$devices映射$devices: ( m: (max-width: 768px), pc: (min-width: 769px) ) !default;再配合 _mixins.scss 中的media-device混入mixin media-device($name, $devices: $devices) { $n: map-get($devices, $name); media #{$n} { content; } }因此 SCSS 编译后会生成两类额外变体.m:underline、.m:line-through、.m:no-underline仅在屏幕宽度 ≤ 768px移动端时生效.pc:underline、.pc:line-through、.pc:no-underline仅在屏幕宽度 ≥ 769px桌面端时生效。通过selector-escape对类名中的冒号做了转义处理确保选择器在 CSS 中合法可用。这种设备前缀 冒号的命名风格与 amis-ui helper 体系下其余工具类如 flex、spacing、sizing 等参见 helper 目录完全一致例如 文本对齐工具类 也采用相同的each ... map-keys($devices)生成策略便于整体记忆与迁移使用。三、在 amis 页面中的使用方式3.1 直接用于组件 className由于工具类最终编译为普通 CSS 类它们可以出现在任意 amis 组件支持className、labelClassName、valueClassName等样式的属性中。例如在 JSON 配置里给一个文本容器添加删除线{ type: tpl, tpl: 原价 ${price} 元, className: line-through }给链接类内容去除下划线{ type: tpl, tpl: a href\https://example.com\访问文档/a, className: no-underline }在移动端与桌面端差异化展示时使用带设备前缀的变体{ type: static, name: notice, label: 公告, valueClassName: pc:underline m:no-underline }上述配置表示桌面端显示下划线强调移动端则移除下划线由 _variables.scss 中定义的断点768px自动切换。3.2 在自定义样式中复用如果你在项目中通过 自定义样式 或自定义 CSS 引入 amis-ui 的 SCSS 变量与混入也可以直接调用make-text-decoration混入按自己的类名前缀生成一组文本装饰类import packages/amis-ui/scss/helper/typography/text-decoration; // 生成 .my-underline / .my-line-through / .my-no-underline include make-text-decoration(.my-);需要注意的是_text-decoration.scss内部在定义混入的同时已经执行了两次include基础类与响应式变体因此它属于声明即生效的样式模块通常不建议重复引入直接引用编译产物或通过 helper.scss 整体引入即可。四、与链接样式及旧版工具类的关联4.1 链接装饰由 CSS 变量驱动在 amis-ui 中链接Link等组件的下划线并非写死而是通过 CSS 自定义属性控制的。查看 _components.scss 中的定义--link-onClick-text-decoration: none; --link-onHover-text-decoration: none; --link-text-decoration: none; --link-disabled-text-decoration: none; --link-decoration: var(--link-text-decoration); // 原变量 --link-onHover-decoration: var(--link-onClick-text-decoration);这些变量被 链接组件样式、表格样式 等模块消费。因此no-underline类常被用来在业务侧覆盖组件默认或主题设定的链接装饰效果而underline类则用于在没有链接语义的文本上手动模拟下划线强调。这种工具类 CSS 变量双轨设计使文本装饰既可以细粒度控制又能在主题层面统一配置。4.2 旧版文本工具类在 _utilities.scss 中还保留了旧版缩写类.text-l-t { text-decoration: line-through; } .text-u-l { text-decoration: underline; }即.text-u-lunderline与.text-l-tline-through是underline、line-through的等价历史别名。如果你在存量页面中见过这类类名可以放心它们与新版工具类效果一致新代码建议优先使用 _text-decoration.md 文档中的三类标准命名以获得响应式变体支持。五、与相邻排版工具类组合使用text-decoration常常需要与文本排版相关的其他工具类组合使用以达到完整的效果。在 typography 目录 下amis-ui 提供了成体系的排版工具类例如文本颜色控制文字颜色文本对齐控制水平对齐文本截断配合white-space、overflow实现省略号字体样式控制斜体等字体粗细控制字重。例如实现一个红色删除线的失效价格 绿色当前价格的典型促销场景{ type: flex, justify: start, items: [ { type: tpl, tpl: 199, className: line-through text-danger }, { type: tpl, tpl: 99, className: text-success } ] }六、常见问题与注意事项类名与 HTML 内联样式的关系工具类仅设置text-decoration单个属性若元素上同时存在内联样式或其他选择器设置同名属性最终优先级由 CSS 层叠规则决定建议避免在同一元素上混用多种设置方式。链接元素默认样式浏览器会给a元素默认下划线no-underline是移除该默认样式最直接的手段而 amis 组件内的链接样式则受上文 CSS 变量控制如需全局调整可在主题变量层面修改。响应式变体仅在匹配断点生效.m:*与.pc:*变体各自包裹在媒体查询中使用时需确认目标视口宽度。断点阈值在 _variables.scss 中定义为 768px可随主题定制覆盖。编译产物引入方式文本装饰工具类随 helper.scss 整体打包无需单独引入如果你在自定义 SCSS 中复用make-text-decoration混入注意避免与全局已生成的类名冲突。七、总结underline、line-through、no-underline是 amis-ui 排版工具类体系中最基础、最常用的三个文本装饰类它们由 _text-decoration.scss 中的make-text-decoration混入统一生成并自动附带m:移动端与pc:桌面端两套响应式变体。配合 文本颜色、文本对齐 等相邻工具类可以在不编写任何自定义 CSS 的情况下仅通过 JSON 配置中的className字段完成丰富的文本装饰效果是 amis 低代码页面样式控制的重要拼图之一。【免费下载链接】amis前端低代码框架通过 JSON 配置就能生成各种页面。项目地址: https://gitcode.com/GitHub_Trending/am/amis创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价