内容简介:注:本文适合前端新手或 scss 转 less 的开发者阅读,当然如果你是老司机也欢迎给我一些指点:blush:声明变量用Outputs
注:本文适合前端新手或 scss 转 less 的开发者阅读,当然如果你是老司机也欢迎给我一些指点:blush:
变量
声明变量用 @
符号
@nice-blue: #5B83AD; #header { color: @light-blue; }
Outputs
#header { color: #5B83AD; }
嵌套语法
less 与 scss 基本一致
.clearfix { display: block; zoom: 1; &:after { content: " "; display: block; font-size: 0; height: 0; clear: both; visibility: hidden; } }
指令属性冒泡
嵌套在选择器中的指令会冒泡到最外层去,@media, @supports 以及 @document 指令会将选择器规则与指令的规则进行合并,而 @keyframe, @font-face 则会单独分开。看例子:
.screen-color { @media screen { color: green; @media (min-width: 768px) { color: red; } } @media tv { color: black; } } #a { color: blue; @font-face { src: made-up-url; } padding: 2px; }
Outputs
@media screen { .screen-color { color: green; } } @media screen and (min-width: 768px) { .screen-color { color: red; } } @media tv { .screen-color { color: black; } } #a { color: blue; padding: 2px; } @font-face { src: made-up-url; }
操作符
支持 + - * /
计算结果的单位由最左边的单位决定,定为“结果单位”。后面的出现的单位如果可以转化为结果单位,则转化后进行计算。否则忽略当前单位(当做结果单位)直接进行计算。看例子:
// 最左边单位是cm, “结果单位” 是 cm, 10mm 又可以 转化为 1cm // 因此最终的计算结果为 2cm + 5cm + 1cm = 8cm @a1: 2 + 5cm + 10mm; // px 不能转化为 cm , 后面的10px 被当成 10cm 处理,结果为17cm @a2: 2 + 5cm + 10px;
注意: * /
运算, 不会进行单位转化,而是直接忽略后面的单位
// 等价于 2cm * 3,结果为 6cm @base: 2cm * 3mm;
color 颜色值也支持运算规则
@color: #224488 / 2; //results in #112244 background-color: #112244 + #111; // result is #223355
Mixins
常规用法
.my-hover-mixin() { &:hover { border: 1px solid red; } } button { .my-hover-mixin; }
Outputs
button { &:hover { border: 1px solid red; } }
混合用法
不推荐的做法, mixin 样式会被保留,实际上我们想要的是 button 选择器的样式,有保留需求推荐用 extends
.my-hover-mixin { &:hover { border: 1px solid red; } } button { .my-hover-mixin; }
Outputs
.my-hover-mixin { &:hover { border: 1px solid red; } } button { &:hover { border: 1px solid red; } }
带参数的mixins
Height mixin 支持传入一个参数来确定高度和行高,默认为 10px
.Height(@h:10px){ height: @h; line-height: @h; } div{ .Height(20px) }
注意单位不能省略,如果想偷懒不写单位,可以改写成下面的形式。不过不推荐,带上单位会便于对这个函数的理解。
.Height(@h:10){ height: @h * 1px; line-height: @h * 1px; } div{ .Height(20) }
不定参数传递
.padding(...){ padding: @arguments; } .div1{ .padding(1px, 2px) } .div2{ .padding(1px, 2px, 3px) }
内置函数
todo 待补充,整理业务常用的内置函数,并列举具体场景
Extends 继承
常见的使用场景,Button 样式定义
.base-btn { height: 36px; line-height: 36px; min-width: 100px; border-radius: 4px; } .default-btn { &:extend(.base-btn); color: black; background-color: white; } .primary-btn { &:extend(.base-btn); color: white; background-color: red; }
Outputs
.base-btn, .default-btn, .primary-btn { height: 36px; line-height: 36px; min-width: 100px; border-radius: 4px; } .default-btn { color: black; background-color: white; } .primary-btn { color: white; background-color: red; }
Extends VS Mixins
虽然说这两个功能都是为提高复用性而存在的,但是本质上还是有区别的,理解它们本质上的功能,可以利于我们编写更高效的 less 代码。
还是以 Button 为例子,下面 mixin 的方式实现
.base-btn { height: 36px; line-height: 36px; min-width: 100px; border-radius: 4px; } .default-btn { .base-btn; color: black; background-color: white; } .primary-btn { .base-btn; color: white; background-color: red; }
Outputs
.base-btn { height: 36px; line-height: 36px; min-width: 100px; border-radius: 4px; } .default-btn { height: 36px; line-height: 36px; min-width: 100px; border-radius: 4px; color: black; background-color: white; } .primary-btn { height: 36px; line-height: 36px; min-width: 100px; border-radius: 4px; color: white; background-color: red; }
可见 使用 Mixins 并不会对公共样式进行合并,而是类似于将一个代码块复制到相应的选择器中。
因此个人认为(只是个人观点:joy:) extends 适合于对现有选择器样式的继承,类似于 btn-default 与 btn-primary 继承默认的 button 样式。
button { height: 36px; line-height: 36px; min-width: 100px; border-radius: 4px; } .default-btn { &:extend(button); color: black; background-color: white; } .primary-btn { &:extend(button); color: white; background-color: red; }
而 mixins 适用于对常见样式的封装,例如:元素居中、渐变、文字溢出(...代替)等常见样式。
text-overflow() { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; display: block; } .center-position() { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .container { .text-overflow(); .center-position(); }
笔者之前的技术栈是scss,最近也在学习 less,把目前学到且比较常见的知识点做了个总结,当然 less 的知识点远远不止这些,不足的地方,随时欢迎大佬们的指点:smile:。
参考文档:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Swift语法快速入门(一)之 Swift基础语法
- 在ES6中使用扩展语法有什么好处?它与rest语法有什么不同?
- Python 基础语法
- go语法
- JPQL 语言语法
- reStructuredText简明语法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTTP
David Gourley、Brian Totty、Marjorie Sayer、Anshu Aggarwal、Sailu Reddy / O'Reilly Media / 2002-10-7 / USD 54.99
Product Description Web technology has become the foundation for all sorts of critical networked applications and far-reaching methods of data exchange, and beneath it all is a fundamental protocol......一起来看看 《HTTP》 这本书的介绍吧!