變量
@color: #4D926F;
#header {
color: @color;
}
嵌套
&
表示串聯(lián)選擇器
#header {
h1 {
font-size: 26px;
font-weight: bold;
}
p { font-size: 12px;
a { text-decoration: none;
&:hover { border-width: 1px }
}
}
&.float {
float: left;
}
}
函數(shù)運(yùn)算加減乘除
可以分辨出顏色和單位, 可以在復(fù)合屬性中進(jìn)行運(yùn)算
@the-border: 1px;
@base-color: #111;
@red: #842210;
#header {
color: @base-color * 3;
border-left: @the-border;
border-right: @the-border * 2;
}
#footer {
color: @base-color + #003300;
border-color: desaturate(@red, 10%);
}
@var: 1px + 5;
border: (@width * 2) solid black;
混合(可帶參數(shù)混合(參數(shù)可設(shè)置默認(rèn)值),可進(jìn)行模式匹配,可進(jìn)行表達(dá)式匹配) Mixin
普通混合
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
#menu a {
color: #111;
.bordered; // <= 混合
}
帶參數(shù)混合(可設(shè)置默認(rèn)值),特殊參數(shù)@arguments
包含了所有傳遞進(jìn)來的參數(shù)
.border-radius (@radius) {
border-radius: @radius;
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
}
#header {
.border-radius(4px); // <= 混合
}
// 設(shè)置默認(rèn)值
.border-radius (@radius: 5px) {
border-radius: @radius;
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
}
#header {
.border-radius; // <= 用默認(rèn)值混合
}
// @arguments
.box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #000) {
box-shadow: @arguments;
-moz-box-shadow: @arguments;
-webkit-box-shadow: @arguments;
}
.box-shadow(2px, 5px);
// => 混合后
// => box-shadow: 2px 5px 1px #000;
// => -moz-box-shadow: 2px 5px 1px #000;
// => -webkit-box-shadow: 2px 5px 1px #000;
模式匹配
只有被匹配的混合才會被使用。變量可以匹配任意的傳入值芜繁,而變量以外的固定值就僅僅匹配與其相等的傳入值矗烛,可以匹配多個(gè)參數(shù)啊片。
.mixin (@s, @color) { ... }
.class {
.mixin(@switch, #888);
}
.mixin (dark, @color) {
color: darken(@color, 10%);
}
.mixin (light, @color) {
color: lighten(@color, 10%);
}
.mixin (@_, @color) {
display: block;
}
// 進(jìn)行模式匹配
@switch: light;
.class {
.mixin(@switch, #888);
}
// 匹配多個(gè)參數(shù)
.mixin (@a) {
color: @a;
}
.mixin (@a, @b) {
color: fade(@a, @b);
}
匹配表達(dá)式
- 可用的全部比較運(yùn)算有:
>
>=
=
=<
`<`` - 關(guān)鍵字
true
只表示布爾真值页屠,true
以外的值都被視示布爾假 - 逗號
,
分割,當(dāng)且僅當(dāng)所有條件都符合時(shí)征绎,才會被視為匹配成功穷当。 - 可以無參數(shù),也可以對參數(shù)進(jìn)行比較運(yùn)算
- 想基于值的類型進(jìn)行匹配阱表,我們就可以使用
is*
函數(shù) - 可以使用
and
not
關(guān)鍵字
iscolor
isnumber
isstring
iskeyword
isurl
// 判斷數(shù)值單位
ispixel
ispercentage
isem
.mixin (@a) when (lightness(@a) >= 50%) {
background-color: black;
}
.mixin (@a) when (lightness(@a) < 50%) {
background-color: white;
}
.mixin (@a) {
color: @a;
}
.truth (@a) when (@a = true) { ... }
.mixin (@a) when (@a > 10), (@a < -10) { ... }
.mixin (@a) when (@media = desktop) { ... }
.max (@a, @b) when (@a > @b) { width: @a }
.mixin (@a, @b: 0) when (isnumber(@b)) { ... }
.mixin (@b) when not (@b > 0) { ... }
函數(shù) 及 字符串
Color 函數(shù)
顏色會先被轉(zhuǎn)化成HSL
色彩空間, 然后在通道級別操作
lighten(@color, 10%); // 顏色變淺
darken(@color, 10%); // 顏色變深
saturate(@color, 10%); // 增加飽和度
desaturate(@color, 10%); // 減少飽和度
fadein(@color, 10%); // 返回透明度比@color小10%的顏色
fadeout(@color, 10%); // 返回透明度比@color大10%的顏色
fade(@color, 50%); // 把顏色調(diào)到指定透明度
spin(@color, 10); // 色相高10度的顏色
spin(@color, -10); // 色相低10度的顏色
mix(@color1, @color2); // 兩中顏色進(jìn)行混合后的顏色
hue(@color); // 返回該顏色的色相
saturation(@color); // 返回該顏色的飽和度
lightness(@color); // 返回該顏色的明度
// 在一種顏色的通道上創(chuàng)建另一種顏色
@new: hsl(hue(@old), 45%, 90%); // @new 將會保持 @old的 色調(diào), 但是具有不同的飽和度和亮度
Math 函數(shù)
round(1.67); // returns `2`
ceil(2.4); // returns `3`
floor(2.6); // returns `2`
percentage(0.5); // returns `50%` 轉(zhuǎn)化百分比
javascript 表達(dá)式
@var: `"hello".toUpperCase() + '!'`;
// 同時(shí)使用字符串插值和避免編譯:
@str: "hello";
@var: ~`"@{str}".toUpperCase() + '!'`;
// 訪問JavaScript環(huán)境:
@height: `document.body.clientHeight`;
// 將一個(gè)JavaScript字符串解析成16進(jìn)制的顏色值,
@color: color(`window.colors.baseColor`);
@darkcolor: darken(@color, 10%);
字符串差值
@base-url: "http://assets.fnord.com";
background-image: url("@{base-url}/images/bg.png");
避免編譯 ~
.class {
filter: ~"ms:alwaysHasItsOwnSyntax.For.Stuff()";
}
注釋
-
/**/
該注釋編譯后保留 -
//
該注釋編譯后被過濾掉
模塊化
作用域
LESS
首先會從本地查找變量或者混合模塊殿如,如果沒找到的話會去父級作用域中查找,直到找到為止.
命名空間
// 將一些變量或者混合模塊打包起來
#bundle {
.button () {
display: block;
border: 1px solid black;
background-color: grey;
&:hover { background-color: white }
}
.tab { ... }
.citation { ... }
}
// 在 #header a中像這樣引入 .button:
#header a {
color: orange;
#bundle > .button; // <= 引入模塊中的元素
}
import
.less
后綴可不帶, .css
文件不會被處理
@import "lib.less";
@import "lib";
@import "lib.css";