css 預處理器 - sass/scss、less、stylus

css 預處理工具,能夠將其對應的DSL(領域特定語言)編譯爲 css

基本介紹

sass/scss

  • SASS 2007年誕生,最先也是最成熟的CSS預處理器,擁有ruby社區的支持和compass這一最強大的css框架
  • Sass的縮排語法,對於寫慣css前端的web開發者來講很不直觀,sass 不兼容 css 代碼
  • Sass3 就變成了Scss(sassy css) 與原來的語法兼容,只是用{}取代了原來的縮進
  • sass 的運行 依賴於 ruby 環境(compass 將 sass 編譯爲 css
  • 如今可用 node-sass 來編譯 sass/scss 文件css

    • node-sass 是一套在 node.js 用 LibSass 編 sass/scss 的工具
    • 原始的sass 是用 ruby 編寫的,因此須要 ruby 環境,libSass 是原始sass引擎的一個 c/c++ 接口,使用它編譯sass不依賴於ruby,可使用其餘語言使用libSass
    • node-sass
    • ruby-sass與libsass的區別
    • 安裝node-sass時,會去GitHub 下載一個 .node的文件而這個文件託管在牆外的服務器上,因此失敗了 node-sass安裝失敗解決方案
  • .sass.scss 爲文件後綴名稱(如今通常都是用 scss)

less

  • less 2009年出現,受sass的影響較大,但又使用CSS的語法,讓大部分開發者和設計師更容易上手,在ruby社區以外支持者遠超過SASS,其缺點是比起SASS來,可編程功能不夠,不過優勢是簡單和兼容CSS,反過來也影響了sass演變到了scss的時代,著名的Twitter Bootstrap就是採用LESS作底層語言的。
  • less 可使用 less.js 在瀏覽器運行時中解析 less 代碼
  • 也能夠在 node環境中 安裝 less,提早編譯 less 文件 npm install -g less &lessc styles.less styles.css (能夠加參數控制編譯後的css排版及壓縮)
  • .less 爲文件後綴名稱

stylus

  • Stylus,2010年產生,來自Node.js社區,主要用來給Node項目進行CSS預處理支持,由 TJ 大神開發
  • 安裝及編譯 npm install stylus -g & stylus src/ (能夠加參數控制編譯後的css排版及壓縮)
  • .styl 爲文件後綴

使用現狀

  • 如今通常都是配合webpack使用這幾種預處理語言,須要先安裝 編譯器、對應 loader,而後再 module.rules 配置其具體規則

基本語法

  • less 基本語法屬於 css 風格,而 sass,stylus 利用縮進,空格,換行來減小須要輸入的 字符
  • 目前 scss, stylus 也能夠支持 css 風格,用大括號 來書寫
  1. 變量符 @ $ 無變量符號直接變量名前端

    less 
    @size: 10px;
    .box {
        width: @size;
    }
    
    scss
    $red: #c00;
    strong {
        color: $red;
    }
    
    stylus
    red = #c00
    strong
        color: red
    
    css 的變量規範
    /* global scope */
    :root {
        --red: #c00;
    }
    strong {
        color: var(--red);
    }
    * 變量做用域:less 惰性加載,sass,stylus 就近加載
  2. 嵌套語法一致,用 & 引用父集 -- 嵌套不建議超過 4 層node

    * less 不支持跳出嵌套
    * sass `@at-root`
    ```
    @at-root 支持參數,跳出不一樣的嵌套 
    without: all,表示全部
    without: rule,表示常規css,rule是默認值
    without: media,表示media
    without: support,@support如今使用還不普遍
    
    // child1 將跳出 parent 的嵌套
    .parent1{
        color:#f00;
        @at-root .child1 {
            width:200px;
        }
        }
    }
    ```
  3. 插值webpack

    less
    @prefix: ui;
    .@{prefix}-button {
    color: #333;
    }
    
    sass
    $prefix: ui
    .#{$prefix}-button {
        color: #333;
    }
    
    stylus
    prefix = ui
    .{prefix}-button
        color #333
  4. 混入(mixin):預處理器最精髓的功能,樣式層面上的抽象(至關於copy代碼片斷)c++

    • less 直接引入
    • scss 要先聲明 @mixin,使用時 @include
  5. 繼承
  6. 函數
  7. 邏輯控制:sass, stylus 支持 if else for each while, less 使用 mixin when 處理
  • 具體語法看官方文檔

總結:

  • sass 大而全,出現時間最久,但依賴於 ruby (compass)
  • less 能夠平滑的從 css 過分而來,能夠在運行時解析,邏輯功能有些缺失
  • stylus 起源 nodejs 社區,語法靈活, 有一個官方開發的樣式庫 nib,一樣提供了很多好用的 mixin

Postcss 是什麼樣的一種存在?

  • PostCSS 既不是預處理器也不是後處理器,而是一個平臺,其自己並不處理任何具體任務,只有當咱們爲其附加各類插件以後,他才具備實用性
  • PostCSS 就像是一個使能器(enabler),他能夠不用徹底替代現有的預處理器或後處理器,而只是做爲他們的補充工具。PostCSS的工做機制主要包含解析代碼、執行插件、渲染結果三部分:
  • PostCSS 會將css代碼解析成包含一系列節點的抽象語法樹(AST, Abtract Syntax Tree)。
  • PostCSS經常使用插件 (用這些插件集合其實已經能夠代替 三大 css 預處理器)git

    • cssnext, 將來語法,顏色函數...
    • postcss-import, 導入文件
    • autoprefixer, 自動前綴
    • precss, 集成sass預處理器,功能強大包括 autoprefixer mixins
    • postcss-mixins, 混合宏,是用相似sass的混合宏,不可與 precss 混用
    • postcss-conditions 邏輯判斷
    • ...
  • 目前 Postcss 在通常項目中的用途github

    • 使用其 autoprefixer 插件,爲css 屬性增長前綴
    • 建立 postcss.config.js
    // webpack.config.js
    {
        test: /\.less$/,
        loader: ExtractTextWebpackPlugin.extract([
            {loader: 'css-loader', options: { minimize: true }},
            'postcss-loader', // 要在預處理器處理完以後,在使用 postcss-loader 
            'less-loader',
        ]),
    }
    
    // postcss.config.js
    module.exports = {
        plugins: [
            require('autoprefixer')({
                'browsers': ['> 1%', 'last 2 versions']
            })
        ]
    }

參考

相關文章
相關標籤/搜索