less学习笔记
注释
- 多行注释保留
- 单行注释不被保留在编译生成的 CSS 中
/*
* 一个块注释
* style comment!
*/
// 这一行被注释掉了!
div {
color: red;
}
变量
基本使用
-
@ 声明变量,作为普通属性值使用
@width: 50px; @height: 100px; div { width: @width; height: @height; }
变量插值
-
变量用于选择器名、属性名、URL、
@import
语句@my-selector: banner; // 需要添加 {} .@{my-selector} { font-weight: bold; line-height: 40px; margin: 0 auto; }
@property: color; .widget { @{property}: #0ee; background-@{property}: #999; }
// Variables @images: '../img'; // Usage body { color: #444; background: url('@{images}/white-sand.png'); }
// Variables @themes: '../../src/themes'; // Usage @import '@{themes}/tidal-wave.less';
延迟加载
当一个变量被声明多次,会取最后一次的值,并从当前作用域往外寻找变量。
@var: 0;
.class {
@var: 1;
.brass {
@var: 2;
three: @var;
@var: 3;
}
one: @var;
}
.class {
one: 1;
}
.class .brass {
three: 3;
}
属性变量名
.widget {
color: #efefef;
background-color: $color;
}
.widget {
color: #efefef;
background-color: #efefef;
}
嵌套
Less 提供了使用嵌套(nesting)代替层叠或与层叠结合使用的能力
#header {
color: black;
.navigation {
font-size: 12px;
}
.logo {
width: 300px;
}
}
#header {
color: black;
}
#header .navigation {
font-size: 12px;
}
#header .logo {
width: 300px;
}
父选择器
在嵌套规则中, &
表示父选择器,常用于给现有选择器添加伪类。
.header {
a {
color: blue;
&:hover {
color: green;
}
}
}
.header a {
color: blue;
}
.header a:hover {
color: green;
}
如果没有 &
,会被编译成后代选择器 a :hover
除此之外,&
还能用于生成重复类名:
.button {
&-ok {
background-image: url('ok.png');
}
&-cancel {
background-image: url('cancel.png');
}
&-custom {
background-image: url('custom.png');
}
}
.button-ok {
background-image: url('ok.png');
}
.button-cancel {
background-image: url('cancel.png');
}
.button-custom {
background-image: url('custom.png');
}
混合
混合(Mixin)是一种将一组属性从一个规则集包含(或混入)到另一个规则集的方式,可理解为复制粘贴。
普通混合
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
#menu a {
color: #111;
.bordered();
}
.post a {
color: red;
.bordered();
}
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
#menu a {
color: #111;
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
.post a {
color: red;
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
带参数的混合
-
混合带参数,参数需要按顺序传递
.border(@width, @style, @color) { border: @width @style @color; } div { .border(1px, solid, #ccc); }
div { border: 1px solid #ccc; }
-
混合带参数并有默认值
需注意的是,就算有默认值,也要按顺序传递
.border(@width, @style, @color: #ccc) { border: @width @style @color; } div { .border(1px, solid); } // 会出错 .border(@width: 1px, @style, @color) { border: @width @style @color; } div { .border(solid, #ccc); }
命名参数
指定参数名称,从而不需要按顺序传入
.border(@width, @style, @color: #ccc) {
border: @width @style @color;
}
div {
.border(@style: solid, @color: red, @width: 100px);
}
@arguments 变量
@arguments
变量包含了传入的所有参数
.box-shadow(@x: 0, @y: 0, @blur: 1px, @color: #000) {
-webkit-box-shadow: @arguments;
-moz-box-shadow: @arguments;
box-shadow: @arguments;
}
.big-block {
.box-shadow(2px, 5px);
}
.big-block {
-webkit-box-shadow: 2px 5px 1px #000;
-moz-box-shadow: 2px 5px 1px #000;
box-shadow: 2px 5px 1px #000;
}
匹配模式
在多个相同的混合中(参数个数必须相同),匹配特定的混合。
.mixin(dark, @color) {
color: darken(@color, 10%);
}
.mixin(light, @color) {
color: lighten(@color, 10%);
}
// @_ 表示匹配所有
.mixin(@_, @color) {
display: block;
}
@switch: light;
.class {
.mixin(@switch, #888);
}
.class {
color: #a2a2a2;
display: block;
}
运算
-
计算结果以操作数最左侧的单位类型为准
@conversion-1: 5cm + 10mm; // 6cm @conversion-2: 2 - 3cm - 5mm; // -1.5cm @conversion-3: 3.1 * 2cm; // 6.2cm @conversion-4: 4px / 2; // 4px / 2 // conversion is impossible @incompatible-units: 1cm - 1px; // 0.97354167cm // example with variables @base: 5%; @filler: @base * 2; // 10% @other: @base + @filler; // 15% @color: #224488 / 2; // #112244 background-color: #112244 + #111; // #223355
继承
Extend Syntax
-
继承可让多个选择器应用同一组属性,最终编译为并集选择器
-
其性能比混合高,但灵活性比混合低
nav ul { &:extend(.inline); background: blue; } .inline { color: red; }
nav ul { background: blue; } .inline, nav ul { color: red; }
Extend “all”
-
可理解为把
all
前的选择器出现的地方全都替换为extend
前的选择器 -
即把
.test
替换为.replacement
生成一个新的选择器应用样式,且不破坏原有的选择器.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; }
避免编译
通过加引号可以避免 Less 编译,直接把内容输出到 CSS 中
.banner .inline .header {
width: '100px + 100px';
height: 100px + 100px;
}
.banner .inline .header {
width: '100px + 100px';
height: 200px;
}
less学习笔记
https://www.zhaojun.inkhttps://www.zhaojun.ink/archives/less-learn-note