千家信息网

如何理解动态的样式语言less语法中变量与extend

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"如何理解动态的样式语言less语法中变量与extend"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读
千家信息网最后更新 2026年11月03日如何理解动态的样式语言less语法中变量与extend

本篇内容介绍了"如何理解动态的样式语言less语法中变量与extend"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

作为 CSS 的一种扩展,Less 不仅完全兼容 CSS 语法,而且连新增的特性也是使用 CSS 语法。这样的设计使得学习 Less 很轻松,而且你可以在任何时候回退到 CSS。less文件是以less作为文件后缀名,HTML引用时可以像css那样引用,如下:

注意:本文描述的一切都是基于1.4.0版本,除非有特殊标明。

变量:
   变量的作用就是把值定义在一个地方,然后在各处使用,这样能让代码更易维护,如下:

代码如下:

// Variables
@link-color: #428bca; // sea blue
// 用法
a:link {
color: @link-color;
}
.widget {
color: #fff;
background: @link-color;
}

上面代码将颜色#428bca赋给一个变量@link-color,然后在color属性中使用变量,对应的css如下:

代码如下:

a:link {
color: #428bca;
}
.widget {
color: #fff;
background: #428bca;
}

变量不仅可以用在属性值上,也可以用在选择元素名,属性名(1.6.0支持),url和import方法。如下:

选择元素名:

代码如下:

// Variables
@mySelector: banner;
// Usage
.@{mySelector} {
font-weight: bold;
line-height: 40px;
margin: 0 auto;
}

编译后为

代码如下:

.banner {
font-weight: bold;
line-height: 40px;
margin: 0 auto;
}

url:

代码如下:

// Variables
@images: "../img";
// 用法
body {
color: #444;
background: url("@{images}/white-sand.png");
}

编译后

代码如下:

body {
color: #444;
background: url("../img/white-sand.png");
}
@import:
// Variables
@themes: "../../src/themes";
// Usage
@import "@{themes}/tidal-wave.less";

编译后

代码如下:

@import "../../src/themes/tidal-wave.less";

属性名:

代码如下:

@property: color;
.widget {
@{property}: #0ee;
background-@{property}: #999;
}

编译后

代码如下:

.widget {
color: #0ee;
background-color: #999;
}

变量的变量名也可以是变量,如下:

@fnord: "I am fnord.";
@var: "fnord";
content: @@var;

编译后

content: "I am fnord.";

延迟加载:
  变量支持延迟加载,所以你可以在变量定义之前使用。如下:

代码如下:

.lazy-eval {
width: @var;
}
@var: @a;
@a: 9%;

或者

代码如下:

.lazy-eval-scope {
width: @var;
@a: 9%;
}
@var: @a;
@a: 100%;

上面两个都会被编译成如下

代码如下:

.lazy-eval-scope {
width: 9%;
}

问什么第二个也会被编译成上面的css,这是因为当一个变量被定义两次时,最后一次定义的生效。就类似于css中,对同一个元素定义不同的css样式,最后定义的生效。再比如下面这个

代码如下:

@var: 0;
.class1 {
@var: 1;
.class {
@var: 2;
three: @var;
@var: 3;
}
one: @var;
}

编译后

代码如下:

.class1 .class {
three: 3;
}
.class {
one: 1;
}

Extend:
  扩展选择器是less的伪类选择器,他会复制当前选择器,定义新的样式,而原来的不便

代码如下:


nav ul {
&:extend(.inline);
background: blue;
}
.inline {
color: red;
}

编译后

代码如下:

nav ul {
background: blue;
}
.inline,
nav ul {
color: red;
}

语法:

代码如下:


.a:extend(.b) {}
也可以这样使用
.a {
&:extend(.b);
}
.e:extend(.f) {}
.e:extend(.g) {}
// 上面等价于下面
.e:extend(.f, .g) {}

嵌套选择器:

代码如下:

.bucket {
tr {
color: blue;
}
}
.some-class:extend(.bucket tr) {}

编译后

代码如下:


.bucket tr,
.some-class {
color: blue;
}

精确匹配:

代码如下:

.a.class,
.class.a,
.class > .a {
color: blue;
}
.test:extend(.class) {} // 不会匹配任何选择

nth:

代码如下:


:nth-child(1n+3) {
color: blue;
}
.child:extend(n+3) {}

编译后

代码如下:

:nth-child(1n+3) {
color: blue;
}

注意:1n+3与n+3在css中是等价的,但是在less中不等价。

属性选择器:

代码如下:

[title=identifier] {
color: blue;
}
[title='identifier'] {
color: blue;
}
[title="identifier"] {
color: blue;
}
.noQuote:extend([title=identifier]) {}
.singleQuote:extend([title='identifier']) {}
.doubleQuote:extend([title="identifier"]) {}

编译后

代码如下:

[title=identifier],
.noQuote,
.singleQuote,
.doubleQuote {
color: blue;
}
[title='identifier'],
.noQuote,
.singleQuote,
.doubleQuote {
color: blue;
}
[title="identifier"],
.noQuote,
.singleQuote,
.doubleQuote {
color: blue;
}

注意:less中不区分单引号双引号

关键字all:

代码如下:


.a.b.test,
.test.c {
color: orange;
}
.test {
&:hover {
color: green;
}
}

.replacement:extend(.test all) {}

编译后

代码如下:


.a.b.test,
.test.c,
.a.b.replacement,
.replacement.c {
color: orange;
}
.test:hover,
.replacement:hover {
color: green;
}

变量选择器:

代码如下:


@variable: .bucket;
@{variable} { // interpolated selector
color: blue;
}
.some-class:extend(.bucket) {}// 不会匹配任何选择元素
.bucket {
color: blue;
}
.some-class:extend(@{variable}) {} // 不会匹配任何元素
@variable: .bucket;

注意:extend不匹配变量。

@media:

代码如下:


@media print {
.screenClass:extend(.selector) {} // extend inside media
.selector {
color: black;
}
}
.selector {
color: red;
}
@media screen {
.selector {
color: blue;
}
}

编译后

代码如下:


@media print {
.selector,
.screenClass {
color: black;
}
}
.selector {
color: red;
}
@media screen {
.selector {
color: blue;
}
}

注意:extend只能匹配@media中前面定义的,在后面定义的将忽略。

使用extend重写样式:
在开发中我们会定义一些通用样式,然后单独样式在添加class,使用css的后面覆盖前面的原理来实现样式。extend也可以实现这种效果,如下:

代码如下:


.animal {
background-color: black;
color: white;
}
.bear {
&:extend(.animal);
background-color: brown;
}

减少css代码:

代码如下:

.my-inline-block() {
display: inline-block;
font-size: 0;
}
.thing1 {
.my-inline-block;
}
.thing2 {
.my-inline-block;
}

编译后:

代码如下:

.thing1 {
display: inline-block;
font-size: 0;
}
.thing2 {
display: inline-block;
font-size: 0;
}

使用extend

代码如下:

.my-inline-block {
display: inline-block;
font-size: 0;
}
.thing1 {
&:extend(.my-inline-block);
}
.thing2 {
&:extend(.my-inline-block);
}

编译后

代码如下:

.my-inline-block,
.thing1,
.thing2 {
display: inline-block;
font-size: 0;
}

"如何理解动态的样式语言less语法中变量与extend"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

代码 编译 变量 后代 选择 样式 语法 元素 属性 动态 语言 内容 引号 文件 更多 知识 等价 学习 延迟 支持 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京路客互联网科技有限公司 互联网核心科技是什么 互联网科技有限公司图片 互联网科技战争 上海电发互联网科技有限公司 互联网科技博主是什么意思 贵州叶脉互联网科技有限公司所属行业 移动互联网科技公司 知域互联网科技有限公司大骗子 成都互联网科技公司工作好不好 迪庆互联网科技招生 互联网公司黑科技创始人 高科技互联网套路 济南小医互联网科技有限公司招聘 福州德业互联网科技 吉林省码上互联网科技电话 青岛易易互联网科技 陕西彩京云互联网科技有限公司 互联网金融金融科技 互联网的黑科技实验室 互联网黑科技 华中科技大学互联网 人人互联网科技是培训 科技赋能互联网健康 工业互联网等科技实现智能化赋能 锡山区互联网智能科技产品供应 易企秀互联网科技是做什么的 北京互联网科技类企业分布 美国五大互联网科技公司市值多少 安徽零酒互联网科技有限公司
0