css 預處理器之 less sass scss stylus

我們先問自己一個問題為什么需要預處理器等太?
答案是不言而喻的爷耀,那就是 css 本身有些缺點:

  • 語法不夠強大资柔,不能夠嵌套書寫焙贷,導致項目中樣式邏輯一點也不清楚。
  • 沒有變量和邏輯上的復用機制贿堰,當有需要復用代碼的時候辙芍,只能重復書寫樣式,導致難以維護羹与。

為了處理上面的問題故硅,css 預處理器誕生了,比較流行的就是sass纵搁、less吃衅、stylus 他們共同的特點是:

  • 變量:提高代碼的復用性。
    Sass:使用「$」對變量進行聲明腾誉,變量名和變量值使用冒號進行分割
    Less:使用「@」對變量進行聲明
    Stylus:直接變量名和變量值之間『等號』連接徘层。
  • 作用域
    Sass:它的方式是三者中最差的,不存在全局變量的概念
    Stylus 和 Less:它的方式和 js 比較相似妄辩,逐級往上查找變量
  • 嵌套:對于 css 來說惑灵,有嵌套的寫法表達邏輯無疑是更完美的。
    三者在這處的處理都是一樣的眼耀,使用「&」表示父元素

開始英支。

項目是在一個簡單的 react 環(huán)境里面做的,目錄結(jié)構(gòu)如下:

┣? webpack.config.js : webapck的配置文件
┣? package.json:依賴包的身份證
┣? main.js :主入口文件
┣? index.html:首頁
┣? App.js:App 組件
┗? style:放置樣式表
    ┣? scss.scss
    ┣? stylus.styl
    ┗? less.less

App.js 文件引入樣式表:

import React, { Component } from "react";
import "./style/less.less";
// import "./style/scss.scss";
// import "./style/stylus.styl";
export default class App extends Component {
    render() {
        return (
            <div>

            </div>
        )
    }
}

一哮伟、less

在 webpack 中使用:

安裝插件:

npm install --save less less-loader

配置 webpack.config.js 文件:

module.exports = {
    module: {
        rules: [{
            test: /\.[le|c]ss$/i,
            use: [
                // Creates `style` nodes from JS strings
                'style-loader',
                // Translates CSS into CommonJS
                'css-loader',
                // Compiles Sass to CSS
                'less-loader',
            ]
        }],
    }
};

在 style 文件里面新建 less.less 干花,并輸入內(nèi)容:

@bgc: green;

div {
    width:100px;
    height:100px;
    background-color: @bgc;
}

npm run dev 運行程序妄帘,打開http://127.0.0.1:8080/

image

單獨使用:
只需要全局安裝 less ,然后:

lessc less.less -o css.css

就能把 less.less 文件轉(zhuǎn)成 css 格式的樣式表池凄。

二抡驼、sass

在 webpack 中使用:

SCSS 是 Sass 3 引入新的語法,其語法完全兼容 CSS3肿仑,并且繼承了 Sass 的強大功能致盟。也就是說,任何標準的 CSS3 樣式表都是具有相同語義的有效的 SCSS 文件尤慰。另外馏锡,SCSS 還能識別大部分 CSS hacks(一些 CSS 小技巧)和特定于瀏覽器的語法。所以 scss 就當相于 sass 的 css3伟端。sass 的運行環(huán)境是 ruby 杯道,但我們的開發(fā)環(huán)境一般都是基于 node 開發(fā),所以我們需要安裝 node-sass 提供環(huán)境责蝠,安裝 sass-loader 翻譯 sass 和 scss 到 css党巾。

安裝環(huán)境:

npm install sass-loader node-sass --save

配置 webpack.conifg.js

module.exports = {
    module: {
        rules: [{
            test: /\.s[ac]ss$/i,
            use: [
                // Creates `style` nodes from JS strings
                'style-loader',
                // Translates CSS into CommonJS
                'css-loader',
                // Compiles Sass to CSS
                'sass-loader',
            ]
        }],
    }
};

在 style 文件里面新建 scss.scss ,并輸入內(nèi)容:

$body-color: red;

div {
    width:100px;
    height:100px;
    background-color: $body-color;
}

npm run dev 運行程序霜医,打開http://127.0.0.1:8080/

image
三齿拂、stylus

在 webpack 中使用:

安裝:

npm install --save stylus stylus-loader

配置 webpack.config.js

module: {
    rules: [{
        test: /\.styl$/,
        use: [{
            loader: "style-loader" // creates style nodes from JS strings
        }, {
            loader: "css-loader" // translates CSS into CommonJS
        }, {
            loader: "stylus-loader" // Compiles Sass to CSS
        }]
    }]
}

在 style 文件里面新建 stylus.styl ,并輸入內(nèi)容:

bgc = blue

div
    width 100px
    height 100px
    background-color bgc

stylus 不需要寫分號k攘病创肥!不需要寫冒號!值朋!甚至連花括號都可以省略L局丁!昨登!完全裸奔代碼趾代。但是一定要注意縮進,因為 stylus 就是根據(jù)縮進來識別選擇器層級和對應 css 樣式規(guī)則的丰辣。定義變量的方法也巨簡單撒强,直接使用 變量名 = 變量值 的形式。

npm run dev 運行程序笙什,打開 http://127.0.0.1:8080/

image

單獨使用:
安裝

npm install --save stylus

然后輸入命令:

npx stylus stylus.styl -o stylus.css

就能把 stylus.styl 文件轉(zhuǎn)成 stylus.css 格式的樣式表飘哨。

作者:學賢社
鏈接:http://www.reibang.com/p/3c39619f1d1a
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)琐凭,非商業(yè)轉(zhuǎn)載請注明出處芽隆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胚吁,更是在濱河造成了極大的恐慌牙躺,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腕扶,死亡現(xiàn)場離奇詭異孽拷,居然都是意外死亡,警方通過查閱死者的電腦和手機半抱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門脓恕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窿侈,你說我怎么就攤上這事进肯。” “怎么了棉磨?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長学辱。 經(jīng)常有香客問我乘瓤,道長,這世上最難降的妖魔是什么策泣? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任衙傀,我火速辦了婚禮,結(jié)果婚禮上萨咕,老公的妹妹穿的比我還像新娘统抬。我一直安慰自己,他們只是感情好危队,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布聪建。 她就那樣靜靜地躺著,像睡著了一般茫陆。 火紅的嫁衣襯著肌膚如雪金麸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天簿盅,我揣著相機與錄音挥下,去河邊找鬼。 笑死桨醋,一個胖子當著我的面吹牛棚瘟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喜最,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼偎蘸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起禀苦,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蔓肯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后振乏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔗包,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年慧邮,在試婚紗的時候發(fā)現(xiàn)自己被綠了调限。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡误澳,死狀恐怖耻矮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忆谓,我是刑警寧澤裆装,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站倡缠,受9級特大地震影響哨免,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昙沦,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一琢唾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盾饮,春花似錦采桃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至徘钥,卻和暖如春泌豆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吏饿。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工踪危, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人猪落。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓贞远,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笨忌。 傳聞我的和親對象是個殘疾皇子蓝仲,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

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