千家信息网

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

发表于:2025-01-29 作者:千家信息网编辑
千家信息网最后更新 2025年01月29日,本篇内容介绍了"如何理解动态的样式语言less语法中变量与extend"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读
千家信息网最后更新 2025年01月29日如何理解动态的样式语言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安全错误 数据库的锁怎样保障安全 计算机网络技术a试卷答案 计算机软件开发与集成 联动式网络安全防御特点 平顶山鸿铭软件开发有限公司 常态化分析研判网络安全形势 狼人杀连接不到服务器 ios软件开发得学多久 校园网登lol好友服务器进不去 零基础软件开发能找着工作 电脑服务器存档 哪有软件开发定制聚顶科技好 检查数据库密码是否过期 深圳新宇通网络技术有限公司 软件开发用r7好还是i7好 专业手机软件开发公司哪家好 数据库检索基本方法 我的世界快乐像素服务器 强化网络安全和拓展业务能力 疫情防疫网络安全 网络服务器需要算工程量吗 网络安全法律法规课程 炫舞服务器正在维护 绝地求生的亚服需要开服务器 四川软件开发有限公司 sql数据库网页版 工行西安软件开发中心 河职电脑网络技术 王者荣耀安卓微信区服务器名称 清华同方服务器设置磁盘 无线网络技术的最新技术
0