基准行高是设计系统中约定的垂直节奏单位,Less中推荐用无单位倍数变量(如@base-line-height: 1.5;)统一管理,配合line-height直接使用,确保缩放兼容性与全局响应。
基准行高不是CSS原生概念,而是设计系统中人为约定的垂直节奏单位,通常取一个易被整除的数值(如 1.5 或 24px)。Less里用变量统一管理它,后续所有文字行高、间距、组件高度都基于它做倍数运算——这样改一个值就能全局响应。
关键点在于:必须明确区分「无单位倍数」和「带单位像素值」两种基准定义方式,否则后续计算会出错。
@base-line-height: 1.5;),配合 line-height 属性直接使用,兼容字体缩放与响应式@base-line-height: 24px;),所有依赖它的计算(如 margin-bottom: @base-line-height * 2;)必须确保参与运算的其他值也带单位,否则Less编译报错:Mixing units (px and unitless)
@base-line-height 和字体大小 @font-size-base 混为一谈;前者控制垂直节奏,后者控制字号,二者应独立定义但保持比例协调(例如 @font-size-base: 16px;,@base-line-height: 1.5; → 实际行高为 24px)Less不支持运行时动态计算CSS属性值,但可以在编译期用变量乘法生成确定值。真正起作用的是「变量+运算符」组合,而非某个特定函数。
常见错误是试图在 line-height 中写 calc() 混合Less变量,这会导致编译失败或无效CSS——因为 calc() 是浏览器运行时行为,Less变量在编译时已展开。
立即学习“前端免费学习笔记(深入)”;
line-height: @base-line-height * 1.2; → 编译后为 line-height: 1.8;(若 @base-line-height 是 1.5)margin-bottom: @base-line-height * 1.5em;(注意单位用 em,使其随字号缩放)margin-bottom: 36px; 看似合理,但一旦调整基准,所有地方都要手动改,失去节奏一致性当标题、正文、注释使用不同字号时,单纯用固定倍数 line-height: 1.5 可能导致小字号文字行距过松、大字号过紧。这时候需分层控制。
Less本身不感知DOM结构或字体大小变化,所以必须靠「约定好的字号层级变量」配合行高倍数来模拟响应式节奏。
@font-size-h1: 2.5rem;、@font-size-p: 1rem;、@font-size-small: 0.875rem;
@line-height-h1: 1.2;、@line-height-p: 1.6;、@line-height-small: 1.4;(小字号适当降低倍数,视觉更紧凑)line-height: @font-size-h1 * @line-height-h1; —— 因为 @font-size-h1 是 rem,而 line-height 接受无单位值或 px/em,乘积类型冲突,Less编译失败纯Less变量只在编译期生效,无法被JavaScript读取或用户通过浏览器调试器临时修改。如果需要设计师后期微调节奏,得把关键基准值同步到CSS自定义属性中。
这不是Less“功能”,而是工程习惯:用Less生成CSS变量,再让CSS本身消费它们。
:root { --base-line-height: @{base-line-height}; }(注意用 @{} 语法展开变量)line-height: var(--base-line-height);,但要注意:CSS变量无法参与Less运算,所以它只适合做最终展示值,不能用于Less内部计算@layer + clamp() + 自定义属性,Less仅负责初始值注入最常被忽略的一点:基准行高不是越精确越好,而是要选一个能被多数字号整除的数字(比如 1.5 能被 12px、16px、20px 整除),否则小数行高在低DPI屏幕上可能引发模糊渲染。别只盯着Less怎么写,先想清楚设计系统的可落地性。