less essential less 必知必会 2
这节主要讲 嵌套规则(nested rules) 、内置的 function 、数字操作。
嵌套规则
第一次使用 less 的时候,是完全只用这个嵌套规则的,css 最烦的就是重复的东西要写好多遍。
例如
1 | <ul class="nav"> |
要设置 a 标签的 text-decoration & other props
1 | .nav li a { |
这个 .nav li a
重复 n 遍. 使用 less , 可以使用 &
解决.
嵌套规则是指 在子元素的 样式可以写在 父元素的 样式 { }中,其实也不一定是父子元素的关系.后面有一个用 &
逆转的例子.前面那个例子可以这样写
1 | .nav { |
PS: 在实际开发中,我习惯全部使用 .class 选择器,很好的解决 css 冲突. 而且这样嵌套后 折叠代码,这块全部都折叠起来了.眼不见心不烦.
.mixin namespace
因为前面介绍的嵌套规则,可以有下面这样的
1 | #namespace { |
这个 .some-class 就被放在 #namespace 下面 , 可以用 #namespace .some-class;
,引用,还可以使用 >
限制父子关系, #namespace > .some-class;
&
符号
定义:
The & symbol refers to the parent of the current selector and you can use it to reverse the order of nesting and to extend or merge classes.
& 符号引用当前选择器的父选择器.你可以用来 更改 nest 的顺序(reverse order) 、 扩展 或者 合并类。
例如
1 | a { |
&:hover
是新构建的选择器,包含 &
,是 current 选择器,它的父选择器则是 a 了.
更改 nest 顺序
神奇的效果
1 | .class1 { |
=>
1 | .class2 .class1 { |
&
引用当前选择器的父选择器,对应着这个好好理解.尤其是认为结果是
1 | .class1 .class2 .class1 { |
的更要好好理解!!!呢吗,我就是…
&:extend
The extend pseudo-class adds the selector to the extended selector list.
extend 伪类添加当前选择器到 被 extend 的选择器列表中.
例如 给 bootstrap 添加一个 custom button,要使用 .btn
类.
1 | .btn-custom { |
会出现什么效果呢,以前定义.btn 的地方,后面会跟着一个.btn-custom
before:
1 | .btn { |
after:
1 | .btn, |
这个功能还没用过,貌似写 library/framework 会用到,这里先不多说了.
属性合并
syntax: property+: value;
例如
1 | .code-font() { |
把值加到属性值上面,适用于 CSV(用逗号分隔的值 comma separated value).
内置的 function
使用 JS
1 | @max: ~"`Math.max(10,100)+'px'`"; |
=>
1 | body { |
使用以上语法 eval 一个 js 表达式.但是以他语言(非 js)写的 less compiler 就没法执行这个了.
color functions
1 | color: #aabbcc; // hex |
顺便学习下 hsl 知识吧,css3 新增 hsl or hsla 的定义,但 less 中会将其编译成 #ffffff
的 hex 形式.
- h: hue , 色彩
- s: saturation , 饱和度
- l: lightness , 明度,明亮程度
可选的 alpha 不透明度,默认为 1,不透明.
操作 color 的函数, 函数签名都是 (color,改变程度)
- darken/lighten 改变 l 明度
- saturate/desaturate , 改变 s 饱和度
- fadeIn/fadeOut 改变 不透明度
其他的 mix,grayScale
contrast
操作颜色有个比较有意思的函数 contrast
, E 文为对比鲜明神马的.就是根据背景色自动产生一个前景色,使阅读更加容易.
函数签名
1 | contrast( |
As you see. 输入一个 background-color,然后会计算这个颜色的 luma 值,
- 若高于第四个参数@luma-value,就认为这个颜色是亮色,返回 @dark-color 默认 black
- 若地狱第四个参数@luma-value,就认为这个颜色是暗色,返回 @light-color 默认 white
type functions
判断某个变量是否是某种类型的数据
isnumber() // isnumber(11px); true
- isstring()
- iscolor()
- isurl()
- iskeyword()
- isunit()
- ispixel()
- isem()
- ispercentage()
可以用在 when 判断的时候