scss @function 实现字号计算比 @media 更可控易维护,但不能替代 clamp()——前者编译时定值,后者运行时响应;函数必须返回 number 类型数值,单位换算需显式(如 $px / 16px),不支持动态视口逻辑。

直接用 SCSS @function 实现字号计算,比写一堆 @media 更可控、更易维护;但函数不能替代 clamp(),两者职责不同——前者编译时定值,后者运行时响应。
SCSS 字号函数必须返回数值,不能用 @mixin
很多人把字号逻辑塞进 @mixin font-size($n),结果发现没法参与 calc() 或与其他 rem 值相加。因为 @mixin 只展开样式块,不产出可运算的值。
-
@function必须有@return,且返回类型要是 number(如1.5),不是字符串或带单位的值 - 单位换算要显式保留:写
$px / 16px,别写$px / 16,否则 SCSS 报Incompatible units - 若需支持 vw 流体基准(比如按 375px 设计稿),
@return改成$px / 375 * 100vw即可,但注意这仍是编译期静态表达式,不是运行时响应
clamp() 要靠 CSS 原生能力,SCSS 函数生成不了它
SCSS 在构建时就把所有计算跑完了,生成的是固定值 CSS;而 clamp(1rem, 2.5vw, 1.5rem) 是浏览器在每次重绘时实时求值的。想让字号真正“流体”,必须把 clamp() 写进最终 CSS,不能靠 SCSS 编译出来。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
- Tailwind 用户得走
theme.extend.fontSize配置数组,且第二项传对象指定lineHeight,否则行高不会随字号缩放 - 手写 CSS 时,
clamp()的中间项建议用vw+ 偏移(如4vw + 0.8rem),避免纯vw在小屏下过小、大屏下过大 - 别在 SCSS 函数里套
@if $screen == 'md'去切不同clamp()—— 这种逻辑该由媒体查询承担,函数只管算数
混合使用时,注意编译时机和运行时行为的错位
一个常见陷阱是:用 SCSS 函数生成了 font-size: 1.333rem,又在同一选择器里写 font-size: clamp(...),后者会被前者覆盖,因为 CSS 层叠规则中后声明者胜出。
- 要么全用 SCSS 编译时字号(适合固定断点、设计系统原子化)
- 要么全用
clamp()+ CSS 变量(适合真流体、视口驱动) - 混用场景(如标题用
clamp(),正文用 SCSS 函数生成的 rem 值),务必拆到不同类名或元素层级,避免冲突 - 如果项目用了 CSS 变量做根字号(如
html { font-size: calc(100vw / var(--psd) * var(--rfs)); }),SCSS 函数输出的 rem 值会自动跟随,无需额外适配
最易被忽略的一点:SCSS 函数再灵活,也解决不了 iOS 键盘弹出时 100vw 突然缩水的问题——那属于运行时视口行为,只能靠 ResizeObserver 或媒体查询兜底,函数连 DOM 都碰不到。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










