什么是less
less是CSS的預處理器,學過C語言的同學應該對預處理器挺熟悉的把,C語言的編譯過程就分為:預處理 -> 編譯 -> 匯編 -> 連接
這幾個過程;其中C語言的預編譯包括導入頭文件、對宏定義進行宏替換等動作;
例如,在C語言中有如下代碼:
//我們在代碼中需要使用一個常數8
....
int x = 8; //第一處用到
...
int y = 8; //第二處用到
...
int z = 8; //第三處用到
此時,如果想修改這個常數為7,我們需要把每一處都找出并進行替換,如果更多位置用到該常數,修改它所花費的代價將會更高。我們可以通過宏定義解決該問題:
#define CONST_VALUE 8
...
int x = CONST_VALUE;
...
int y = CONST_VALUE;
...
int z = CONST_VALUE;
此時,如果想修改常數值的話,只需要修改第一行就ok了,大大減輕了工作量;
另外,需要說明的是,上面的這種寫法還不是最優的,寫成 const int const_value = 8 ;
更好,因為這樣可以進行類型檢查。好吧,就此打住,畢竟這不是介紹C語言的blog,只是拋磚引玉而已,可不能把磚拋太遠。
而css預處理語言,無論是sass還是less,和c語言預處理目的一致,都是為了減輕工作量而已,但是,大家一定要清楚下面一句話:
工具能夠幫助我們提高生產效率,但并不能幫助我們減少需要學習的知識。相反,為了掌握某個工具的使用,我們甚至要學更多的知識。 所以,學習終歸是沒有捷徑可走的。
那么,為什么有時候,原生css編寫代碼效率較低,下面再舉一個例子吧。
比如,我們需要寫兩層div的嵌套,子div寬度是父div寬度的一半,已知父div為400px :
/*父div的樣式*/
#p_div{
width:400px;
}
/*子div的樣式*/
#s_div{
width:200px;
}
用瀏覽器測試了一下,發現不太美觀,想把父div改為500px進行測試,我們需要找到這兩處,然后進行修改,和上面的C語言的例子非常類似,操作較為麻煩;
你也許會想,如果定義一個變量,相關屬性都基于該變量進行操作,如果想改變這些屬性的值,只需要改一個變量,那該有多好。好吧,我想,less應該可以滿足你。
less的使用
less是一種css的預處理語言,最終,瀏覽器只認識css樣式,而不認識less語言,所以我們需要工具將用less編寫的樣式轉換成css樣式;
less編寫的樣式文件通常以.less
為后綴;
1、基于node.js庫的less編譯工具
其實,你不需要懂什么是基于node.js庫,只需要知道,通過它安裝的 lessc 就是一個可執行文件而已;
安裝方式:
npm install -g less
稍微解釋一下這條命令是什么意思,npm是node package manager的縮寫,可以通過它安裝在npmjs.com上托管的軟件,-g表示全局安裝;
完成安裝后,就可以在命令行使用 lessc
命令了;
還是以上面嵌套div作為例子,編寫demo.less文件,其代碼為:
@p_width:400px;
#p_div{
width: @p_width;
}
#s_div{
width:(@p_width/2);
}
使用命令
lessc demo.less demo.css
將less代碼編譯為css樣式,編譯后生成的demo.css包含樣式代碼為:
#p_div {
width: 400px;
}
#s_div {
width: 200px;
}
和我們上面手寫的代碼一模一樣;如果想把#p_div
的寬度變為500px,只需要修改demo.less的第一行,重新用 lessc 進行編譯即可;
2、瀏覽器引入lesscss.js文件
前面我們說過,瀏覽器是不懂less語法的,所以,不能直接使用 *.less
文件作為頁面樣式;但是,瀏覽器不懂,我們可以 “教他” 懂;
例如,通過以下代碼:
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.7.2/less.min.js">
</script>
我們將解析less的js代碼庫引入,這樣,就能直接在html中使用less語法了;例如:
<link rel="stylesheet/less" href="demo.less" />
直接引入一個less文件,或者是:
<style type="text/less">
/*編寫less代碼 */
</style>
直接在html文件中編寫less代碼。
3、在線完成less轉換css
還可以通過某些在線工具實現less到css的轉換,例如 通過開源中國社區的 在線工具 完成轉換,并將轉換后的代碼復制到自己的css文件中即可;
4、其他一些圖形化(GUI)編譯工具
如koala、Codekit、WinLess、SimpleLess;
后記
本文并沒有詳細寫less語法,只是說明了less為什么而存在,只有我們知道了事物存在的意義,才能從它來的方向,去真正地理解它;
參考 less中文網 ;