摘要:是一門預(yù)處理語言,它擴(kuò)展了語言,增加了變量函數(shù)等特性,使更易維護(hù)和擴(kuò)展。所以在生產(chǎn)環(huán)境中,我們需要事前把文件編譯為正常的后,在相應(yīng)文件中引入,以后用戶訪問的都是編譯好的,為不是拿現(xiàn)編譯的。代碼編譯為的結(jié)果
Less和CSS的區(qū)別
HTML和CSS不屬于編程語言而是屬于標(biāo)記語言,很難像JS一樣定義變量、編寫方法、實(shí)現(xiàn)模塊化開發(fā)等。
LESS是一門CSS預(yù)處理語言,它擴(kuò)展了CSS語言,增加了變量、Mixin、函數(shù)等特性,使CSS更易維護(hù)和擴(kuò)展。
使用LESS基本上按照這樣的步驟:編寫LESS代碼,使用NODE、JS或者是其他的工具把編寫的LESS代碼編譯成我們平時看到的CSS代碼(因?yàn)闉g覽器是無法解析LESS的語法的,所以編寫完成的LESS代碼需要進(jìn)行編譯)。
Less叫做預(yù)編譯css,寫好的less代碼瀏覽器是不能直接渲染的,需要我們把它編譯成為能渲染的css才可以。
編譯Less
開發(fā)環(huán)境中
在開發(fā)環(huán)境下,我們一般都通過導(dǎo)入less插件來隨時編譯less代碼。
//注意rel="stylesheet/less"中必須加上less
生產(chǎn)環(huán)境中
由于每一次加載頁面都需要導(dǎo)入LESS插件,并且把LESS文件重新編譯為CSS,很消耗性能,導(dǎo)致頁面打開速度變慢。所以在生產(chǎn)環(huán)境中,我們需要事前把LESS文件編譯為正常的CSS后,在相應(yīng)文件中引入,以后用戶訪問的都是編譯好的CSS,為不是拿LESS現(xiàn)編譯的。
生產(chǎn)環(huán)境下,我們需要事先把LESS編譯成CSS方法:
1)使用Node編譯
這種方式是目前項(xiàng)目中最常用的方式,它是把我們的LESS文件編譯成CSS文件,我們項(xiàng)目中直接的引入CSS文件即可. (1) 安裝node (2) 把LESS模塊安裝到全局NODE環(huán)境中
npm install less -g
(3) 使用命令進(jìn)行編譯
//->把styles.less文件編譯成styles.css文件(如果沒有這個CSS文件自己會創(chuàng)建) lessc styles.less styles.css //->編譯完成的CSS文件是經(jīng)過壓縮的 lessc styles.less styles.min.css -x或者--compress
如果你想要更牛X的壓縮,還可以自己多帶帶的設(shè)定,下面我們使用–clean-css。這個需要提前的安裝less-plugin-clean-css模塊才可以。
//->安裝less-plugin-clean-css npm install -g less-plugin-clean-css //->安裝成功后就可以使用它壓縮了 lessc --clean-css styles.less styles.min.css
2)使用編譯工具(less在線編譯)
目前常用的編譯工具有:Koala(據(jù)說目前最流行的)、在線編譯(http://tool.oschina.net/less)、SimpLESS等。Less的基本語法
less中的變量
和JS中的變量一樣,只是LESS的變量定義不是使用VAR而是使用@。
//用變量存儲公用的屬性值 @shadowColor: #000; .inner { box-shadow: 0 0 10px 0 @shadowColor; } //用變量存儲公用的URL、選擇器 @selector: box; @bgImg: "../img"; @property: color; @name: "fung"; //->LESS代碼 .@{selector} { width: 100px; height: 100px; @{property}: #000; background: url("@{bgImg}/test.png"); &:after { display: block; content: @@var; } }
混合(Mixins)
所謂的混合其實(shí)是把某個選擇器中的樣式拷貝一份拿過來使用
//->LESS代碼 .public { width: 100px; height: 100px; } nav ul { .public; list-style: none; } //->編譯為CSS的結(jié)果 .public { width: 100px; height: 100px; } nav ul { width: 100px; height: 100px; list-style: none; }
我們發(fā)現(xiàn)其實(shí)nav ul是把public中設(shè)定的樣式屬性值copy了一份到自己的樣式中。如果你想在編譯完成的結(jié)果中不輸出public這個樣式的結(jié)果,只需要按照下述的代碼編寫即可:
//->LESS代碼 .public() {//->在選擇器后面加上()就可以不編譯這個樣式了 width: 100px; height: 100px; } nav ul { .public; list-style: none; } //->編譯為CSS的結(jié)果 nav ul { width: 100px; height: 100px; list-style: none; }
3.extend
雖然在上述的案例中,nav ul把public中的樣式繼承了過來,但是原理卻是把代碼copy一份過來,這樣編譯后的CSS中依然會存留大量的冗余CSS代碼,為了避免這一點(diǎn),我們可以使用extend偽類來實(shí)現(xiàn)樣式的繼承使用。 ``` //->LESS代碼 .public { width: 100px; height: 100px; } nav ul { &:extend(.public); list-style: none; } //->編譯為CSS的結(jié)果 .public, nav ul { width: 100px; height: 100px; } nav ul { list-style: none; } ``` 或者 ``` //->LESS代碼 .public { width: 100px; height: 100px; } nav ul:extend(.public) { list-style: none; } //->編譯為CSS的結(jié)果和第一種寫法一樣 ```
4.命名空間和作用域
在LESS中定義了命名空間就創(chuàng)建了一個私有的作用域,在這個私有作用域中使用的變量都是先看一下自己作用域中有沒有,沒有的話,在向上一級查找(類似于JS的作用域鏈) ``` //->LESS代碼 @color: #ccc; .box { @color: #eee; .gray { color: @color; } } .box2 { .gray { color: @color; } } //->編譯為CSS的結(jié)果 .box .gray { color: #eee; } .box2 .gray { color: #ccc; } ```
5.!important
在調(diào)用的混合集后面追加 !important 關(guān)鍵字,可以使混合集里面的所有屬性都繼承 !important.
//->LESS代碼 @color: #ccc; .box { @color: #eee; .gray { color: @color; } } nav ul { .box !important; } //->編譯為CSS的結(jié)果 .box .gray { color: #eee; } nav ul .gray { color: #eee !important; }
6.函數(shù)
如同JS一樣,LESS也可以向函數(shù)一樣設(shè)定形參數(shù),這個技巧在我們的項(xiàng)目中會被經(jīng)常的使用到,例如:處理CSS3的兼容問題
//->LESS代碼 .transition(@property:all;@duration:1s;@function:linear;@delay:0s;) { -webkit-transition: @property @duration @function @delay; -moz-transition: @property @duration @function @delay; -ms-transition: @property @duration @function @delay; -o-transition: @property @duration @function @delay; transition: @property @duration @function @delay; } .box1 { .transition; } .box2 { .transition(@duration: 2s); } .box3 { .transition(@duration: 2s; @property: width;); } //->編譯為CSS的結(jié)果 .box1 { -webkit-transition: all 1s linear 0s; -moz-transition: all 1s linear 0s; -ms-transition: all 1s linear 0s; -o-transition: all 1s linear 0s; transition: all 1s linear 0s; } .box2 { -webkit-transition: all 2s linear 0s; -moz-transition: all 2s linear 0s; -ms-transition: all 2s linear 0s; -o-transition: all 2s linear 0s; transition: all 2s linear 0s; } .box3 { -webkit-transition: width 2s linear 0s; -moz-transition: width 2s linear 0s; -ms-transition: width 2s linear 0s; -o-transition: width 2s linear 0s; transition: width 2s linear 0s; }
此外我們需要值得注意的是,LESS中也有arguments。
//->LESS代碼 .transition(@property:all;@duration:1s;@function:linear;@delay:0s;) { -webkit-transition: @arguments; transition: @arguments; } .box1 { .transition; } //->編譯為CSS的結(jié)果 .box1 { -webkit-transition: all 1s linear 0s; transition: all 1s linear 0s; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/116069.html
摘要:學(xué)習(xí)之按鈕篇如我上一篇學(xué)習(xí)之里面,介紹了的目錄結(jié)構(gòu),說明了在這個文件里面,定義了主題色,也包括了按鈕的主題色。偽連接,按鈕的樣式顯示為連接的樣式。接下來的安排,自己寫的文章自己也會去實(shí)現(xiàn)它,另外關(guān)于的學(xué)習(xí)也不會停止。 less學(xué)習(xí)之Bootstrap按鈕篇) 如我上一篇less學(xué)習(xí)之Bootstrap里面,介紹了Bootstrap的目錄結(jié)構(gòu),說明了在variables.less這個文件...
摘要:而使用預(yù)處理器,提供缺失的樣式層復(fù)用機(jī)制減少冗余代碼,提高樣式代碼的可維護(hù)性。所以我們在實(shí)際項(xiàng)目中衡量預(yù)編譯方案時,還是得想想,比起帶來的額外維護(hù)開銷,預(yù)處理器有沒有解決更大的麻煩。也是成熟的預(yù)處理器之一,而且有一個穩(wěn)定,強(qiáng)大的團(tuán)隊(duì)在維護(hù)。 這篇文章主要解答以下幾個問題,供前端開發(fā)者的新手參考。 1、什么是Sass和Less? 2、為什么要使用CSS預(yù)處理器? 3、Sass和Less的...
摘要:而使用預(yù)處理器,提供缺失的樣式層復(fù)用機(jī)制減少冗余代碼,提高樣式代碼的可維護(hù)性。所以我們在實(shí)際項(xiàng)目中衡量預(yù)編譯方案時,還是得想想,比起帶來的額外維護(hù)開銷,預(yù)處理器有沒有解決更大的麻煩。也是成熟的預(yù)處理器之一,而且有一個穩(wěn)定,強(qiáng)大的團(tuán)隊(duì)在維護(hù)。 這篇文章主要解答以下幾個問題,供前端開發(fā)者的新手參考。 1、什么是Sass和Less? 2、為什么要使用CSS預(yù)處理器? 3、Sass和Less的...
閱讀 2716·2023-04-25 15:15
閱讀 1349·2021-11-25 09:43
閱讀 1633·2021-11-23 09:51
閱讀 1115·2021-11-12 10:36
閱讀 2912·2021-11-11 16:55
閱讀 993·2021-11-08 13:18
閱讀 769·2021-10-28 09:31
閱讀 2083·2019-08-30 15:47