7.1 CSS預(yù)處理器

如果時間退到2年前,那么CSS預(yù)處理是非掣钜裕火的.

CSS預(yù)處理器: 基于CSS的另一種語言.
通過工具譯成CSS
添加了很多CSS不具備的特性
能提升CSS文件的組織

常見的預(yù)處理器: less(基于Node.js) sass(新版本是scss)
less優(yōu)勢是: 用js寫的,編譯比較快.并且有瀏覽器中可以直接使用的一個版本.不需要預(yù)先編譯.
sass是用ruby寫得,編譯起來比較慢.

CSS預(yù)處理器到底提供哪些功能?
嵌套 - 反應(yīng)層級和約束.
變量和計算 - 減少重復(fù)代碼
Extend和Mixin - 代碼片段 (如果一段代碼需要不斷用的時候就可以提取成一個代碼片段,就像js的函數(shù)一樣)
循環(huán) - 適用于復(fù)雜有規(guī)律的樣式(比如表格)
import -CSS文件模塊化

less實例

安裝less

安裝完成以后,文件下會多出: node_modules目錄 和 package-lock.json 文件.

image.png

解讀嵌套代碼

.wrapper .nav { font-size: 12px; }
.wrapper . content:hover { background : red; }

使用less
z.less

.wrapper {
    background : red;
    .content {
    font-size : 560px;
        height : 50px;
    }
    .main {
        font-size : 50px;
    &:hover {
        background : yellow;
    }
    }
}
彬@TB MINGW64 /z/全面系統(tǒng)講解CSS 工作應(yīng)用+面試一步搞定
$ ls
 i29u8p/                   '第11章 課程總結(jié)'/     '第6章 CSS動畫'/
 node_modules/             '第1章 課程介紹'/      '第7章 預(yù)處理器'/
 package-lock.json         '第2章 HTML基礎(chǔ)強化'/  '第8章 Bootstrap'/
 project.zip               '第3章 CSS基礎(chǔ)'/       '第9章 CSS工程化方案'/
 z.less                    '第4章 CSS布局'/
'第10章 三大框架中的CSS'/  '第5章 CSS效果'/

彬@TB MINGW64 /z/全面系統(tǒng)講解CSS 工作應(yīng)用+面試一步搞定
$ ./node_modules/.bin/lessc z.less           // **重要命令**
.wrapper {
  background: red;
}
.wrapper .content {
  font-size: 560px;
  height: 50px;
}
.wrapper .main {
  font-size: 50px;
}
.wrapper .main:hover {
  background: yellow;
}

彬@TB MINGW64 /z/全面系統(tǒng)講解CSS 工作應(yīng)用+面試一步搞定

在git命令里面執(zhí)行#: ./node_modules/.bin/lessc z.less
編譯成css文件并輸出為z.css于當(dāng)前目錄 ./node_modules/.bin/lessc z.less>z.css

less給我們提供了很多的運算函數(shù).變量

@fontSize :12px;
@bgColor : red;

background:lighten(@bgColor,40%); //變淺40%;
font-size : @fontSize + 20px;  //字體大小增加20px;

示例


less變量

變量不能亂用,要有規(guī)劃. 變量是less和sass提供我們非常好的一個特性.

less的Mixin的使用

.block(@fontSize) {
    font-size : @fontSize;
    border : 1px solid #ccc;
    border-radius : 4px;
}

.wrapper {
    background : red;
    .content {
    font-size : 560px;
        height : 50px;
        .block(@fontSize); //引用Mixin
    }
    .main {
        font-size : 50px;
        .block(@fontSize);  //引用Mixin
    }
}
image.png

less的Extend的使用, mixin與extend區(qū)別是,mixin直接復(fù)制過來,而extend是提取公共,特殊再寫.
它的主要優(yōu)點是用于簡單的,并且聲稱的css文件要小.
但是我感覺css文件再大也是非常小的.可以忽略,我更傾向于mixin,因為更直觀.

less的loop
less本身是沒有循環(huán)的,我們可以用遞歸方法模仿循環(huán).
when 后面是一個出口,當(dāng) (@n > 0) 的時候不再執(zhí)行

image.png

sass安裝(局部安裝)

#: npm install node-sass
#: npm install node-sass -g  //全局安裝

sass的文件后綴是scss
z.scss
編譯

./node_modules/.bin/node-sass   z.scss
./node_modules/.bin/node-sass   z.scss>z.css  //這個輸出的css是嵌套結(jié)構(gòu).
./node_modules/.bin/node-sass   --output-style expanded z.scss>z.css  //這個輸出的css文件被打平. 

sass變量 計算 與less區(qū)別,less的變量符號是@,sass的變量符號是$

$fontSize :12px;
$bgColor : red;

background:lighten($bgColor,40%); //變淺40%;
font-size : $fontSize + 20px;  //字體大小增加20px;

為什么它們2個的變量不好不一樣?
因為less的理念是盡量的接近css的語法.
sass理念是,既然我和css是不兼容的,盡量的避免產(chǎn)生混淆.

scss的Mixin
scss的Mixin和less的區(qū)別就是scss前面必須加 @mixin 并且不用加點

@mixin block($fontSize) {
    font-size : $fontSize;
    border : 1px solid #ccc;
    border-radius : 4px;
}
//調(diào)用
.wrapper {
    background : red;
    .content {
    font-size : 560px;
        height : 50px;
        @include block($fontSize); //引用Mixin
    }
    .main {
        font-size : 50px;
        @include block($fontSize);  //引用Mixin
    }
}

scss的extend可以參考less的extend

scss的loop方式模擬循環(huán)


image.png

CSS預(yù)處理器框架
在SASS中有--- Compass
在Less中有--- Lesshat(國外)/EST(國內(nèi))

它們提供現(xiàn)成的mixin
類似于JS類庫 封裝常用的功能

可以自行去學(xué)習(xí)一下CSS預(yù)處理框架.EST地址
http://ecomfe.github.io/est/#top

面試題:
因為CSS預(yù)處理器并不是CSS基本要求的,因此在面試的時候并不會以重點來考察.

  1. 常見的CSS預(yù)處理器: Less(node.js寫的) / Sass(ruby寫的,有Node版本)
  2. 預(yù)處理器的作用:幫助更好的組織代碼,提高代碼效率,提升可維護性.
  3. 預(yù)處理器的能力:
    嵌套 - 反應(yīng)層級
    變量 計算 - 減少重復(fù)代碼
    Extend/Mixin - 代碼塊
    循環(huán) - 適用于復(fù)雜有規(guī)律的代碼
    import - CSS文件模塊化
  4. 預(yù)處理器的優(yōu)缺點
    優(yōu)點:提高代碼復(fù)用率和可維護性
    缺點:需要引入編譯過程,有學(xué)習(xí)成本.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市送淆,隨后出現(xiàn)的幾起案子惫东,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痪枫,死亡現(xiàn)場離奇詭異,居然都是意外死亡叠艳,警方通過查閱死者的電腦和手機奶陈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來附较,“玉大人吃粒,你說我怎么就攤上這事【芸危” “怎么了徐勃?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長早像。 經(jīng)常有香客問我僻肖,道長,這世上最難降的妖魔是什么卢鹦? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任臀脏,我火速辦了婚禮,結(jié)果婚禮上冀自,老公的妹妹穿的比我還像新娘揉稚。我一直安慰自己,他們只是感情好熬粗,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布搀玖。 她就那樣靜靜地躺著,像睡著了一般荐糜。 火紅的嫁衣襯著肌膚如雪巷怜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天暴氏,我揣著相機與錄音延塑,去河邊找鬼。 笑死答渔,一個胖子當(dāng)著我的面吹牛关带,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼宋雏,長吁一口氣:“原來是場噩夢啊……” “哼芜飘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起磨总,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤嗦明,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蚪燕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娶牌,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年馆纳,在試婚紗的時候發(fā)現(xiàn)自己被綠了诗良。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡鲁驶,死狀恐怖鉴裹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钥弯,我是刑警寧澤径荔,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站脆霎,受9級特大地震影響猖凛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绪穆,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一辨泳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玖院,春花似錦菠红、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至郊酒,卻和暖如春遇绞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背燎窘。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工摹闽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人褐健。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓付鹿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子舵匾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容