Less 嵌套

本节我们学习 Less 中的嵌套,嵌套应该很容易理解,HTML 语言中就支持标签的嵌套。我们在使用 CSS 时,如果想要为多层嵌套的元素设置样式,要么给元素加上一个类选择器或ID选择器,要么使用后代选择器。例如:

1.xkd{ 2 font-size: 14px; 3} 4.xkd p{ 5 line-height: 25px; 6} 7.xkd p span{ 8 color: #ccc; 9}

这样写虽然也好理解,但是没有那么直观,维护起来也不方便。

而 Less 中的嵌套规则正好可以解决这样问题,嵌套规则允许在一个选择器中嵌套另一个选择器,这样可以使得代码看起来一目了然,后期维护也方便。

嵌套的使用

例如上面的 CSS 代码使用 Less 语言来写:

1.xkd{ 2 font-size: 14px; 3 p{ 4 line-height: 25px; 5 span{ 6 color: #ccc; 7 } 8 } 9}

这样整体看起来是不是更直观一些,一层套一层。但是注意哟,一般我们不会嵌套太多层,嵌套的层数越多,性能就越差,建议一般嵌套三层左右。

&符号的使用

在我们使用嵌套规则时,要特别注意 & 符号的使用,& 符号可以表示对父选择器的引用。

在一个内层选择器的前面,如果没有 & 符号,则这个内层选择器会被解析为父选择器的后代。如果内层选择器前面有一个 & 符号,则内层选择器会被解析为父选择器自身或父选择器的伪类。

示例:

例如我们看下面这段代码:

1.xkd{ 2 a{ 3 color: #eee; 4 } 5}

编译成 CSS 代码:

1.xkd a { 2 color: #eee; 3}

可以看到,标签选择器 a 前面没有加 & 符号,所以这个标签选择器 a 被解析为 .xkd 选择器的后代。

示例:

再来看一下内层选择器前面加 & 符号:

1.xkd{ 2 &one{ 3 font-size: 12px; 4 } 5 &:hover{ 6 color: #fff; 7 } 8}

编译成 CSS 代码:

1.xkdone { 2 font-size: 12px; 3} 4.xkd:hover { 5 color: #fff; 6}

上面代码中,one 前面添加了一个 & 符号,这个符号就表示父选择器本身,所以解析后为.xkdone。当然 :hover 伪类前面的 & 符号也是同理。

重复引用父选择器

通过使用 & 符号,可以重复引用父类选择器。

示例:

例如下面这段 Less 代码,如果我们希望每个选择器名的前缀都为 top,可以像下面这样简写:

1.xkd{ 2 &-one{ 3 font-size: 14px; 4 } 5 &-two{ 6 font-size: 16px; 7 } 8 &-three{ 9 font-size: 18px; 10 } 11}

编译为 CSS 代码:

1.xkd-one { 2 font-size: 14px; 3} 4.xkd-two { 5 font-size: 16px; 6} 7.xkd-three { 8 font-size: 18px; 9}

除此之外,还可以同时使用多个 & 符号,并使用其他运算符连接起来:

1.xkd{ 2 &&-one{ 3 font-size: 14px; 4 } 5 &,&-two{ 6 font-size: 16px; 7 } 8 &, &er{ 9 font-size: 18px; 10 } 11}

编译为 CSS 代码:

1.xkd.xkd-one { 2 font-size: 14px; 3} 4.xkd, 5.xkd-two { 6 font-size: 16px; 7} 8.xkd, 9.xkder { 10 font-size: 18px; 11}

更改选择器顺序

什么是更改选择器顺序呢,就是有些时候可能需要将内层选择器放在父选择器之前,此时我们可以将 & 放在当前选择器后面来完成。

示例:

例如下面这段代码,我们希望 .xkd 选择器位于 .nav 选择器之前,可以在 .xkd 选择器的后面加一个 & 符号:

1.nav{ 2 font-size: 14px; 3 .xkd &{ 4 color: #fff; 5 } 6}

编译为 CSS 代码:

1.nav { 2 font-size: 14px; 3} 4.xkd .nav { 5 color: #fff; 6}

可以看到,编译之后的 CSS 代码中 .xkd 选择器位于 .nav 选择器前面。

总结

本节我们主要掌握 Less 中的嵌套规则和 & 符号的使用, & 符号可以表示父选择器。最后,记住使用嵌套的时候不要嵌套太多层,会影响性能。

链接:https://www.9xkd.com/

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )