Less 变量 #
变量是 Less 最基础也是最重要的特性之一。通过变量,你可以定义可复用的值,统一管理颜色、尺寸、字体等样式属性。
变量定义 #
Less 使用 @ 符号定义变量:
less
// 定义变量
@primary-color: #4d926f;
@base-font-size: 16px;
@header-height: 60px;
变量使用 #
基本使用 #
less
@primary-color: #4d926f;
@base-padding: 20px;
.container {
color: @primary-color;
padding: @base-padding;
}
.button {
background: @primary-color;
padding: @base-padding;
}
编译结果:
css
.container {
color: #4d926f;
padding: 20px;
}
.button {
background: #4d926f;
padding: 20px;
}
作为属性值 #
less
@border-direction: border-top;
.box {
@{border-direction}: 1px solid #ccc;
}
编译结果:
css
.box {
border-top: 1px solid #ccc;
}
作为选择器 #
less
@my-selector: banner;
.@{my-selector} {
font-weight: bold;
line-height: 40px;
}
编译结果:
css
.banner {
font-weight: bold;
line-height: 40px;
}
作为 URL 路径 #
less
@images: "../img";
body {
color: #444;
background: url("@{images}/white-sand.png");
}
编译结果:
css
body {
color: #444;
background: url("../img/white-sand.png");
}
作为 @import 路径 #
less
@themes: "../../src/themes";
@import "@{themes}/tidal-wave.less";
变量插值 #
使用 @{变量名} 语法进行插值:
less
@prefix: ui;
@separator: -;
.@{prefix}@{separator}button {
display: inline-block;
}
.@{prefix}@{separator}input {
border: 1px solid #ccc;
}
编译结果:
css
.ui-button {
display: inline-block;
}
.ui-input {
border: 1px solid #ccc;
}
变量作用域 #
Less 变量具有作用域概念,遵循"就近原则"。
全局作用域 #
less
@color: red;
.page {
color: @color; // red
}
局部作用域 #
less
@color: red;
.page {
@color: blue;
color: @color; // blue
.content {
color: @color; // blue(继承父作用域)
}
}
作用域提升 #
Less 变量会被"提升"到作用域顶部:
less
.page {
color: @color; // blue(不是 red!)
@color: blue;
}
块级作用域示例 #
less
@var: global;
.outer {
@var: outer;
.inner {
@var: inner;
value: @var; // inner
}
value: @var; // outer
}
.value {
value: @var; // global
}
变量覆盖 #
后定义的变量会覆盖先定义的变量:
less
@color: red;
@color: blue;
.box {
color: @color; // blue
}
条件覆盖 #
less
@color: red;
.box {
@color: blue;
color: @color; // blue
}
.another {
color: @color; // red(全局变量未被修改)
}
默认变量 #
使用变量覆盖特性实现默认值:
less
// 默认值
@base-color: #ccc;
// 用户自定义(可覆盖默认值)
@base-color: #4d926f;
.box {
color: @base-color; // #4d926f
}
这种方式常用于主题定制:
less
// theme-default.less
@primary-color: #007bff;
@font-size-base: 14px;
// theme-custom.less
@primary-color: #4d926f; // 覆盖默认主题色
// styles.less
@import "theme-default.less";
@import "theme-custom.less";
.button {
background: @primary-color; // #4d926f
}
变量延迟加载 #
Less 变量在使用时才会被解析:
less
.lazy-eval {
width: @var;
}
@var: 100px;
编译结果:
css
.lazy-eval {
width: 100px;
}
变量作为变量名 #
使用 @@ 语法实现变量名动态引用:
less
@fnord: "I am fnord.";
@var: "fnord";
.content {
content: @@var; // 等同于 @fnord
}
编译结果:
css
.content {
content: "I am fnord.";
}
变量类型 #
Less 变量可以存储不同类型的值:
颜色 #
less
@primary: #4d926f;
@secondary: rgb(77, 146, 111);
@tertiary: hsl(145, 31%, 44%);
@transparent: rgba(77, 146, 111, 0.5);
数值 #
less
@base-size: 16px;
@line-height: 1.5;
@columns: 12;
@spacing: 20;
字符串 #
less
@font-family: "Helvetica Neue", Arial, sans-serif;
@image-path: "../images";
列表 #
less
@colors: red, green, blue;
@border-style: 1px solid #ccc;
映射(Maps) #
less
@colors: {
primary: #4d926f;
secondary: #ccc;
danger: #ff4757;
};
.button {
background: @colors[primary];
}
CSS 变量 vs Less 变量 #
| 特性 | Less 变量 | CSS 变量 |
|---|---|---|
| 编译时机 | 预编译 | 运行时 |
| 浏览器兼容 | 完美 | 现代浏览器 |
| 动态修改 | 不支持 | 支持 |
| 作用域 | 编译时确定 | DOM 树 |
| 性能 | 无运行时开销 | 轻微开销 |
结合使用 #
less
// Less 变量定义
@primary-color: #4d926f;
// 输出 CSS 变量
:root {
--primary-color: @primary-color;
}
// 使用 CSS 变量实现动态主题
.button {
background: var(--primary-color);
}
// 使用 Less 变量作为默认值
.card {
background: @primary-color;
background: var(--primary-color, @primary-color);
}
最佳实践 #
命名规范 #
less
// 推荐:语义化命名
@primary-color: #4d926f;
@font-size-base: 16px;
@spacing-sm: 8px;
@spacing-md: 16px;
@spacing-lg: 24px;
// 不推荐:具体值命名
@blue: #4d926f;
@size-16: 16px;
变量组织 #
less
// 颜色系统
@color-primary: #4d926f;
@color-secondary: #6c757d;
@color-success: #28a745;
@color-danger: #dc3545;
@color-warning: #ffc107;
@color-info: #17a2b8;
// 字体系统
@font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto;
@font-size-base: 16px;
@font-size-sm: 14px;
@font-size-lg: 18px;
@line-height-base: 1.5;
// 间距系统
@spacing-unit: 8px;
@spacing-xs: @spacing-unit * 0.5; // 4px
@spacing-sm: @spacing-unit; // 8px
@spacing-md: @spacing-unit * 2; // 16px
@spacing-lg: @spacing-unit * 3; // 24px
// 断点
@breakpoint-sm: 576px;
@breakpoint-md: 768px;
@breakpoint-lg: 992px;
@breakpoint-xl: 1200px;
下一步 #
现在你已经掌握了变量的使用,接下来学习 嵌套 来组织你的样式结构!
最后更新:2026-03-28