Less:Less(CSS預處理語言)

ylbtech-Less:Less(CSS預處理語言)

Less 是一門 CSS 預處理語言,它擴充了 CSS 語言增長了諸如變量、混合(mixin)、函數等功能,讓 CSS 更易維護、方便製做主題、擴充。Less 能夠運行在 Node 或瀏覽器端css

1.返回頂部
一、
中文名:LESS語言
外文名:LESS
類    型:樣式表語言
應用領域:編程
二、
2.返回頂部
一、

語言簡介

CSS(層疊樣式表) 是一門歷史悠久的標記性語言,同 HTML 一道,被普遍應用於萬維網(World Wide Web)中。 HTML 主要負責文檔結構的定義CSS 負責文檔表現形式或樣式的定義
做爲一門標記性語言,CSS 的語法相對簡單,對使用者的要求較低,但同時也帶來一些問題: CSS 須要書寫大量看似沒有邏輯的代碼不方便維護及擴展,不利於複用,尤爲對於非前端開發工程師來說,每每會由於缺乏 CSS 編寫經驗而很難寫出組織良好且易於維護的 CSS 代碼,形成這些困難的很大緣由源於 CSS 是一門非程序式語言沒有變量、函數、SCOPE(做用域)等概念。LESS 爲 Web 開發者帶來了福音,它在 CSS 的語法基礎之上,引入了變量,Mixin(混入),運算以及函數等功能, 大大簡化了 CSS 的編寫,而且下降了 CSS 的維護成本,就像它的名稱所說的那樣,LESS 可讓咱們用更少的代碼作更多的事情。  
 

原理

本質上,LESS 包含一套自定義的語法及一個解析器用戶根據這些語法定義本身的樣式規則,這些規則最終會經過解析器編譯生成對應的 CSS 文件。LESS 並無裁剪 CSS 原有的特性,更不是用來取代 CSS 的而是在現有 CSS 語法的基礎上,爲 CSS 加入程序式語言的特性
 

使用方式

客戶端
咱們能夠直接在客戶端使用 .less(LESS 源文件),只須要從http://lesscss.org下載 less.js 文件,而後在咱們須要引入 LESS 源文件的 HTML 中加入以下代碼:
<link rel="stylesheet/less" type="text/css" href="styles.less">
LESS 源文件的引入方式與標準 CSS 文件引入方式同樣:
<link rel="stylesheet/less" type="text/css" href="styles.less">
須要注意的是:在引入 .less 文件時,rel 屬性要設置爲「stylesheet/less」。還有更重要的一點須要注意的是:LESS 源文件必定要在 less.js 引入以前引入,這樣才能保證 LESS 源文件正確編譯解析。
 
服務器端
LESS 在服務器端的使用主要是藉助於 LESS 的編譯器,將 LESS 源文件編譯生成最終的 CSS 文件,目前經常使用的方式是 利用 node 的包管理器 (npm) 安裝 LESS,安裝成功後就能夠在 node 環境中對 LESS 源文件進行編譯。
在項目開發初期,咱們不管採用客戶端仍是服務器端的用法,咱們都須要想辦法將咱們要用到的 CSS 或 LESS 文件 引入到咱們的 HTML 頁面或是橋接文件中,LESS 提供了一個咱們很熟悉的功能— Importing。咱們能夠經過這個關鍵字引入咱們須要的 .less 或 .css 文件。 如:
@import 「variables.less」;
.less 文件也能夠省略後綴名,像這樣:
@import 「variables」;
引入 CSS 同 LESS 文件同樣, 只是 .css 後綴名不能省略
使用編譯生成的靜態 CSS 文件
咱們能夠經過 LESS 的編譯器,將 LESS 文件編譯成爲 CSS 文件,在 HTML 文章中引入使用。這裏要強調的一點,LESS 是徹底兼容 CSS 語法的,也就是說,咱們 能夠將標準的 CSS 文件直接改爲 .less 格式LESS 編譯器能夠徹底識別

 

語法

變量
LESS 容許開發者自定義變量,變量能夠在全局樣式中使用,變量使得樣式修改起來更加簡單。
咱們能夠從下面的代碼瞭解變量的使用及做用:
清單 3 LESS 文件 @border-color : #b5bcc7; .mythemes tableBorder{ border : 1px solid @border-color; }
通過編譯生成的 CSS 文件以下:
清單 4. CSS 文件 .mythemes tableBorder { border: 1px solid #b5bcc7; }
從上面的代碼中咱們能夠看出, 變量是 VALUE(值)級別的複用能夠將相同的值定義成變量統一管理起來
該特性適用於定義主題,咱們能夠將 背景顏色、字體顏色、邊框屬性常規樣式進行統必定義,這樣不一樣的主題只須要定義不一樣的變量文件就能夠了。固然該特性也一樣適用於 CSS RESET(重置樣式表),在 Web 開發中,咱們每每須要屏蔽瀏覽器默認的樣式行爲而須要從新定義樣式表來 覆蓋瀏覽器的默認行爲,這裏可使用 LESS 的變量特性,這樣就能夠在不一樣的項目間重用樣式表,咱們僅須要在不一樣的項目樣式表中,根據需求從新給變量賦值便可。
LESS 中的變量和其餘編程語言同樣, 能夠實現值的複用,一樣它也有生命週期,也就是 Scope(變量範圍,開發人員慣稱之爲做用域),簡單的講就是局部變量仍是全局變量的概念,查找變量的順序是先在局部定義中找,若是找不到,則查找上級定義,直至全局。下面咱們經過一個簡單的例子來解釋 Scope。
清單 5. LESS 文件 @width : 20px; #homeDiv { @width : 30px; #centerDiv{ width : @width;// 此處應該取最近定義的變量 width 的值 30px } } #leftDiv { width : @width; // 此處應該取最上面定義的變量 width 的值 20px }
通過編譯生成的 CSS 文件以下:
清單 6. CSS 文件 #homeDiv #centerDiv { width: 30px; } #leftDiv { width: 20px; }
 
Mixins(混入)
Mixins(混入)功能對用開發者來講並不陌生,不少動態語言都支持 Mixins(混入)特性,它是多重繼承的一種實現,在 LESS 中,混入是指在一個 CLASS 中引入另一個已經定義的 CLASS,就像在當前 CLASS 中增長一個屬性同樣。
咱們先簡單看一下 Mixins 在 LESS 中的使用:
清單 7. LESS 文件// 定義一個樣式選擇器 .roundedCorners(@radius:5px) { -moz-border-radius: @radius; -webkit-border-radius: @radius; border-radius: @radius; } // 在另外的樣式選擇器中使用 #header { .roundedCorners; } #footer { .roundedCorners(10px); }
通過編譯生成的 CSS 文件以下:
清單 8. CSS 文件 #header { -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; } #footer { -moz-border-radius:10px; -webkit-border-radius:10px; border-radius:10px; }
從上面的代碼咱們能夠看出:Mixins 實際上是一種嵌套,它容許將一個類嵌入到另一個類中使用,被嵌入的類也能夠稱做變量,簡單的講,Mixins 實際上是規則級別的複用。
Mixins 還有一種形式叫作 Parametric Mixins(混入參數),LESS 也支持這一特性:
清單 9. LESS 文件// 定義一個樣式選擇器 .borderRadius(@radius){ -moz-border-radius: @radius; -webkit-border-radius: @radius; border-radius: @radius; } // 使用已定義的樣式選擇器 #header { .borderRadius(10px); // 把 10px 做爲參數傳遞給樣式選擇器 } .btn { .borderRadius(3px);// // 把 3px 做爲參數傳遞給樣式選擇器 }
通過編譯生成的 CSS 文件以下:
清單 10. CSS 文件 #header { -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; } .btn { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }
咱們還能夠給 Mixins 的參數定義一人默認值,如
清單 11. LESS 文件.borderRadius(@radius:5px){ -moz-border-radius: @radius; -webkit-border-radius: @radius; border-radius: @radius; } .btn { .borderRadius; }
通過編譯生成的 CSS 文件以下:
清單 12. CSS 文件 .btn { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }
像 JavaScript 中arguments同樣,Mixins 也有這樣一個變量:@arguments。@arguments 在 Mixins 中具是一個很特別的參數,當 Mixins 引用這個參數時,該參數表示全部的變量,不少狀況下,這個參數能夠省去你不少代碼。
清單 13. LESS 文件 .boxShadow(@x:0,@y:0,@blur:1px,@color:#000){ -moz-box-shadow: @arguments; -webkit-box-shadow: @arguments; box-shadow: @arguments; } #header { .boxShadow(2px,2px,3px,#f36); }
通過編譯生成的 CSS 文件以下:
清單 14. CSS 文件 #header { -moz-box-shadow: 2px 2px 3px #FF36; -webkit-box-shadow: 2px 2px 3px #FF36; box-shadow: 2px 2px 3px #FF36; }
Mixins 是 LESS 中很重要的特性之一,咱們這裏也寫了不少例子,看到這些例子你是否會有這樣的疑問:當咱們擁有了大量選擇器的時候,特別是團隊協同開發時,如何保證選擇器之間重名問題?若是你是 java 程序員或 C++ 程序員,我猜你確定會想到命名空間 Namespaces,LESS 也採用了命名空間的方法來避免重名問題,因而乎 LESS 在 mixins 的基礎上擴展了一下,看下面這樣一段代碼:
清單 15. LESS 文件 #mynamespace { .home {...} .user {...} }
這樣咱們就定義了一個名爲 mynamespace 的命名空間,若是咱們要複用 user 這個選擇器的時候,咱們只須要在須要混入這個選擇器的地方這樣使用就能夠了。#mynamespace > .user。
 
嵌套的規則
在咱們書寫標準 CSS 的時候,遇到多層的元素嵌套這種狀況時,咱們要麼採用從外到內的選擇器嵌套定義,要麼採用給特定元素加 CLASS 或 ID 的方式。在 LESS 中咱們能夠這樣寫:
清單 16. HTML 片斷 <div id="home"> <div id="top">top</div> <div id="center"> <div id="left">left</div> <div id="right">right</div> </div> </div>
清單 17. LESS 文件 #home{ color : blue; width : 600px; height : 500px; border:outset; #top{ border:outset; width : 90%; } #center{ border:outset; height : 300px; width : 90%; #left{ border:outset; float : left; width : 40%; } #right{ border:outset; float : left; width : 40%; } } }
通過編譯生成的 CSS 文件以下:
清單 18. CSS 文件 #home { color: blue; width: 600px; height: 500px; border: outset; } #home #top { border: outset; width: 90%; } #home #center { border: outset; height: 300px; width: 90%; } #home #center #left { border: outset; float: left; width: 40%; } #home #center #right { border: outset; float: left; width: 40%; }
從上面的代碼中咱們能夠看出,LESS 的嵌套規則的寫法是 HTML 中的 DOM 結構相對應的,這樣使咱們的樣式表書寫更加簡潔和更好的可讀性。同時,嵌套規則使得對僞元素的操做更爲方便。
清單 19. LESS 文件a { color: red; text-decoration: none; &:hover {// 有 & 時解析的是同一個元素或此元素的僞類,沒有 & 解析是後代元素 color: black; text-decoration: underline; } }
通過編譯生成的 CSS 文件以下:
清單 20. CSS 文件 a { color: red; text-decoration: none; } a:hover { color: black; text-decoration: underline; }
 
運算及函數
在咱們的 CSS 中 充斥着大量的數值型的 value,好比 color、padding、margin 等,這些數值之間在某些狀況下是有着必定關係的,那麼咱們怎樣利用 LESS 來組織咱們這些數值之間的關係呢?咱們來看這段代碼:
清單 21 . LESS 文件 @init: #111111; @transition: @init*2; .switchColor { color: @transition; }
通過編譯生成的 CSS 文件以下:
清單 22. CSS 文件 .switchColor { color: #222222; }
上面的例子中使用 LESS 的 operation 是 特性,其實簡單的講,就是對數值型的 value(數字、顏色、變量等)進行加減乘除四則運算。同時 LESS 還有一個專門針對 color 的操做提供一組函數。
使用這些函數和 JavaScript 中使用函數同樣。
清單 23 LESS 文件init: #f04615; #body { }
通過編譯生成的 CSS 文件以下:
清單 24. CSS 文件 #body { }
從上面的例子咱們能夠發現,這組函數像極了 JavaScript 中的函數,它能夠被調用和傳遞參數。這些函數的主要做用是提供顏色變換的功能,先把顏色轉換成 HSL 色,而後在此基礎上進行操做,LESS 還提供了獲取顏色值的方法,在這裏就不舉例說明了。
LESS 提供的運算及函數特性適用於實現頁面組件特性,好比組件切換時的漸入漸出。
 
Comments(註釋)
適當的註釋 是保證代碼可讀性的必要手段,LESS 對註釋也提供了支持,主要有 兩種方式:單行註釋和多行註釋,這與 JavaScript 中的註釋方法同樣,咱們這裏不作詳細的說明,只強調一點:LESS 中單行註釋 (// 單行註釋 ) 是不能顯示在編譯後的 CSS 中,因此若是你的註釋是針對樣式說明的請使用多行註釋。
LESS VS SASS
同類框架還有 SASS :與 LESS 相比,二者都屬於 CSS 預處理器,功能上大同小異,都是使用相似程序式語言的方式書寫 CSS,都具備變量、混入、嵌套、繼承等特性,最終目的都是方便 CSS 的書寫及維護。
LESS 和 SASS 互相促進互相影響,相比之下 LESS 更接近 CSS 語法。
二、
3.返回頂部
 
4.返回頂部
 
5.返回頂部
0、
一、
二、
三、
 
6.返回頂部
 
warn 做者:ylbtech
出處:http://ylbtech.cnblogs.com/
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。
相關文章
相關標籤/搜索