less 是一種樣式語言,它將 css 賦予了動態語言的特性,如變量、 繼承、 運算、 函數。less 既能夠在客戶端上運行(支持 ie6+,webkit,firefox),也能夠藉助 Node.js 或者 Rhino 在服務端運行。javascript
less 作爲 css 的一種形式的擴展,它並無閹割 css 的功能,而是在現有的 css 語法上,添加了不少額外的功能,因此對於前端開發人員來所,學習 less 是一件垂手可得的事情。咱們先看下用 less 寫的一段 css:css
@base: #f938ab; .box-shadow(@style, @c) when (iscolor(@c)) { box-shadow: @style @c; -webkit-box-shadow: @style @c; -moz-box-shadow: @style @c; } .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) { .box-shadow(@style, rgba(0, 0, 0, @alpha)); } .box { color: saturate(@base, 5%); border-color: lighten(@base, 30%); div { .box-shadow(0 0 5px, 30%) } }
在沒有學過 less 的狀況下,咱們並不知道這些代碼是作啥用的,怎麼生成咱們所熟悉的 css 代碼,以上代碼通過 less 編譯後:html
.box { color: #fe33ac; border-color: #fdcdea; } .box div { box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); }
下面咱們就一塊兒來學習 less 吧。前端
咱們知道若是要使用 jquery 就必須在頁面上引進 jquery 庫,一樣的在使用 less 編寫 css 代碼時,也要引進 less 庫——less.js。點擊這裏下載 less 庫。java
下載好後只要在頁面中引入就能夠了。jquery
<link rel="stylesheet/less" type="text/css" href="style.less" media="all" /> <script type="text/javascript" src="less.js"></script>
要注意外部引進樣式的方法有所改變,rel 屬性值爲 stylesheet/less,樣式的後綴變爲 .less 同時 less 樣式文件必定要在 less.js 前先引入。web
引入了 less 以後,正式開始學習 less。編程
less 語法less
一、變量編程語言
less 的變量充許你在樣式中對經常使用的屬性值進行定義,而後應用到樣式中,這樣只要改變變量的值就能夠改變全局的效果。和 javascript 中的全局變量有點相似。
甚至能夠用變量名定義爲變量。
@color: red; @foot: 'color'; .head{ color: @color; } .foot{ color: @@foot; }
輸出:
.head { color: red; } .foot { color: red; }
注意 less 中的變量爲徹底的「常量」,因此只能定義一次。
二、混合
混合就是定義一個 class,而後在其餘 class 中調用這個 class。
.common{ color: red; } .nav{ background: #ccc; .common; }
輸出:
.common { color: red; } .nav { background: #ccc; color: red; }
Css 中的 class, id 或者元素屬性集均可以用一樣的方式引入。
三、帶參數混合
在 less 中,你能夠把 class 當作是函數,而函數是能夠帶參數的。
.border-radius (@radius) { border-radius: @radius; -moz-border-radius: @radius; -webkit-border-radius: @radius; } #header { .border-radius(4px); } .button { .border-radius(6px); }
最後輸出:
#header { border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; } .button { border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px; }
咱們還能夠給參數設置默認值:
.border-radius (@radius: 5px) { border-radius: @radius; -moz-border-radius: @radius; -webkit-border-radius: @radius; } #header { .border-radius; }
最後輸出:
#header { border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; }
也能夠定義不帶參數屬性集合,若是想要隱藏這個屬性集合,不讓它暴露到CSS中去,可是還想在其餘的屬性集合中引用,就會發現這個方法很是的好用:
.wrap () { text-wrap: wrap; white-space: pre-wrap; white-space: -moz-pre-wrap; word-wrap: break-word; } pre { .wrap }
輸出:
pre { text-wrap: wrap; white-space: pre-wrap; white-space: -moz-pre-wrap; word-wrap: break-word; }
混合還有個重要的變量@arguments。
@arguments 包含了全部傳遞進來的參數,當你不想處理個別的參數時,這個將頗有用。
.border(@width:0,@style:solid,@color:red){ border:@arguments; } .demo{ .border(2px); }
輸出:
.demo { border: 2px solid #ff0000; }
混合還有許多高級的應用,如模式匹配等。在這裏就不介紹了,只講些基礎的東西。
四、嵌套規則
less 可讓咱們用嵌套的方式來寫 css。下面是咱們平時寫的 css:
#header h1 { font-size: 26px; font-weight: bold; } #header p { font-size: 12px; } #header p a { text-decoration: none; } #header p a:hover { border-width: 1px; }
用 less 咱們就能夠這樣寫:
#header { h1 { font-size: 26px; font-weight: bold; } p { font-size: 12px; a { text-decoration: none; &:hover { border-width: 1px } } } }
注意 & 符號的使用—若是你想寫串聯選擇器,而不是寫後代選擇器,就能夠用到 & 了。這點對僞類尤爲有用如 :hover。
五、運算
任何數字、顏色或者變量均可以參與運算。
.demo{
color: #888 / 4;
}
輸出:
.demo {
color: #222222;
}
less 徹底能夠進行復雜四則運算,一樣的複合運算也沒有問題。
六、Color 函數
less 提供了一系列的顏色運算函數。顏色會先被轉化成 HSL 色彩空間,而後在通道級別操做。
複製代碼
lighten(@color, 10%); // return a color which is 10% *lighter* than @color
darken(@color, 10%); // return a color which is 10% *darker* than @color
saturate(@color, 10%); // return a color 10% *more* saturated than @color
desaturate(@color, 10%); // return a color 10% *less* saturated than @color
fadein(@color, 10%); // return a color 10% *less* transparent than @color
fadeout(@color, 10%); // return a color 10% *more* transparent than @color
fade(@color, 50%); // return @color with 50% transparency
spin(@color, 10); // return a color with a 10 degree larger in hue than @color
spin(@color, -10); // return a color with a 10 degree smaller hue than @color
mix(@color1, @color2); // return a mix of @color1 and @color2
複製代碼
使用起來至關簡單:
複製代碼
@base: #f04615;
.class {
color: saturate(@base, 5%);
background-color: lighten(spin(@base, 8), 25%);
}
複製代碼
還能夠提取顏色信息:
hue(@color); // returns the `hue` channel of @color
saturation(@color); // returns the `saturation` channel of @color
lightness(@color); // returns the 'lightness' channel of @color
例如:
@color: #f36;
#header {
background-color: hsl(hue(@color),45%,90%);
}
輸出:
#header {
background-color: #f1dae0;
}
七、Math 函數
less 提供了一組方便的數學函數,你可使用它們處理一些數字類型的值。
round(1.67); // returns 2
ceil(2.4); // returns 3
floor(2.6); // returns 2
若是你想將一個值轉化爲百分比,你可使用 percentage 函數:
percentage(0.5); // returns 50%
八、命名空間
有時候,你可能爲了更好組織 css 或者單純是爲了更好的封裝,將一些變量或者混合模塊打包起來,你能夠像下面這樣在 #form 中定義一些屬性集以後能夠重複使用:
複製代碼
#form {
.submit () {
display: block;
border: 1px solid black;
background: gray;
&:hover { background: green }
}
.register { ... }
.login { ... }
}
複製代碼
你只須要在 #myform 中像這樣引入 .submit:
#myform {
color: orange;
#form > .submit;
}
九、做用域
和其餘編程語言相似,less 變量也有做用域。首先會從本地查找變量或者混合模塊,若是沒找到的話會去父級做用域中查找,直到找到爲止。
複製代碼
@var: red;
#page {
@var: white;
#header {
color: @var; // white
}
}
#footer {
color: @var; // red
}
複製代碼
十、註釋
css 形式的註釋在 less 中是依然保留的,同時 less 也支持雙斜線的註釋,可是編譯成 css 的時候自動過濾掉。
最後 less 還有一些其餘的特性就不介紹了,你們能夠去官網上看下。