不晓得各位同学有没有感觉当初css在前端圈子里越来越不受“待见”了。
起因可能有下:
- 难以模块化,不可保护,没啥能够深入研究的
- 面试根本也不会问啊
- 局部公司还有 css 工程师,前端不须要关怀
- 。。。
然而作为从看张鑫旭大佬的文章才一步步开启我的前端之路的开发er,我可不能“忘了本”。犹记得才刚刚转行那会面试的时候会问我“你感觉本人css和js哪个更善于?”,我都会不犹豫的说“css”。
平时用 BEM 规定写款式的同学可能常常会遇到上面这样的(相似)场景,标签列表中会有失常状态和选中状态。故事的开始就是起于这样一段html代码:
<!-- 第1种组织模式,集体比拟偏向这种 --><!-- tag外面的子节点变多的时候不须要给每一个子节点都增加 --active 的修饰符 --><div class="tag tag--active"> <img src="" class="tag__img" /> <span class="tag__text">222</span></div><!-- 第2种组织模式 --><!-- 可能更合乎 bem的 思维(缩小款式嵌套)--><div class="tag"> <img src="" class="tag__img--active" /> <span class="tag__text--active">222</span></div>
针对第一种html的构造,如何通过父级选择器 & 更优雅的写出款式。当初咱们就从 & 的根底用法一步步说起。
为了不便咱们应用命令行测试,请全局装置less
npm install less -g // 以后版本:3.11.3
上面的例子都是基于常见的通过 BEM 写款式的业务场景。
置信看完这篇文章的同学再用 BEM 规定写款式的时候代码肯定会土气的一批。
根本用法
&
运算符示意一个嵌套规定的父选择器
下面是 less 官网对于 & 的定义(请肯定要粗浅领会),上面咱们通过例子来逐渐感触。
.header { &__text { color: #000; &--active { color: #fff; } } &:before { content: ''; display: block; } &.test3 { font-size: 12px; }}
通过 lessc 编译后:
.header__text { color: #000;}.header__text--active { color: #fff;}.header:before { content: ''; display: block;}.header.test3 { font-size: 12px;}
能够看到,& 援用了间隔他最近的残缺的父级。
为什么强调是残缺的父级呢,.header__text--active
而不是 .text--active
就是最好的证实。可能很多同学对于 & 的用法也就到这里就完结了(包含我本人以及身边很多工作好多年的共事,没错,我用上面的例子给他们做了测试,哈哈哈哈),如果你对“工程卓越”有谋求的话请持续往下看。
高阶用法
对于开篇提到的那个html构造,如何优雅的写active状态的款式笼罩,也有相当一段长的工夫困扰着我,甚至写了一段时间这样的代码:
.tag { &__img { width: 100px; height: 100px; } &__text { font-size: 14px; color: #fff; } &--active { .tag__img { background: #000; } .tag__text { color: #000; } }}
几乎是丑到家了。实际上各位同学如果真的能了解父级选择器,认真思考一下同时摈弃你的惯性思维,就能写出上面的代码:
.tag { &__img { width: 100px; height: 100px; } &__text { font-size: 14px; color: #fff; } &--active &__img { background: #000; } &--active &__text { color: #000; }}
通过lessc命令看看最终转成啥样:
.tag__img { width: 100px; height: 100px;}.tag__text { font-size: 14px; color: #fff;}.tag.tag--active .tag__img { background: #000;}.tag.tag--active .tag__text { color: #000;}
请大家好好消化,其实 &
就是代替父级的存在。
在下面场景的根底上,咱们再思考下另一个相似的状况:
<div class="tag active"> <img src="" class="tag__img" /> <span class="tag__text">222</span></div>
和下面不同的是,咱们应用active来代替tag--active。这在理论开发的场景中是很常见的。active作为一个全局定义好的通用选中状态,利用到业务场景中。那么当初如何再去笼罩tag__text的款式呢?
.tag { &__img { width: 100px; height: 100px; } &__text { font-size: 14px; color: #fff; } .active & { &__text { #000; } }}
通过lessc命令看看最终转成啥样:
.tag__img { width: 100px; height: 100px;}.tag__text { font-size: 14px; color: #fff;}.active .tag__text { color: #000;}
胜利的将active状态下的tag__text的文字色彩改成了彩色。
这里咱们留神到 &
放到了类名前面,请大家再次领会一下。
其实 &
的地位放在哪里都是能够当作父级来应用的,应用的次数也没有限度,能够应用两个甚至更多。
完结
文章到这里就完结了,心愿看完的同学能减少对于 &
的意识,更重要的是能重拾起来对于款式的“工程卓越”的谋求。
最初,以此文留念本人刚开始学习前端的日子。