HTML & CSS
SASS
CSS 預處理器
其實過去在 Lidemy 課程中,也有提過 CSS 預處理器的觀念:[week 13] 前端工具之二 - CSS 預處理器、Babel,因為工作上需要使用,發現自己對語法還是不太熟悉,於是整理了這篇筆記。瞭解這套工具的由來,基本語法的使用,以及如何幫助我們解決前端開發可能遇到的問題。
我們所熟知的 CSS,是用來撰寫網頁樣式的語言,但隨著網頁開發複雜度提高,尤其是大型專案,在開發時也面臨許多問題:
為了解決這些問題,CSS 預處理器(CSS Preprocessor)就誕生了!透過將程式模組化的概念,新增了變數、巢狀結構、混入、繼承等寫法,作為 CSS 語法的擴充,用以改善程式碼的結構與可維護性。
現今較為主流的 CSS 預處理器有下列三種,均賦予 CSS 動態語言的特性:
而本篇所探討的 Sass/SCSS,主要包含兩種寫法,分別是:
將上述範例程式碼,經編譯過的 CSS 寫法如下:
需注意不管使用哪種 CSS 預處理器,程式碼都必須先編譯(compiled)成 CSS 的形式,才能讓瀏覽器解讀並呈現出畫面。
詳細教程可參考 Sass 官網。
Sass/SCSS 提供的功能主要如下:
@each
搭配 array、@each
搭配 map、for 迴圈使用說明:以錢字號 $
來宣告變數,通常會寫在程式碼最上方,只要有引用該變數的地方,均可統一修改管理,常用於:按鈕顏色、字型字體大小等。
使用說明:需注意縮排寫法,可使用 &
符號來引用父選擇器,常用於 CSS 元件狀態 :hover
、:focus
、:before
、:after
等。
使用說明:將經常被重複使用的程式碼獨立撰寫,以 @mixin
語法包裝起來,需要時透過 @include
引用,即可根據不同參數來設定相似的樣式,常用於 width、height、flex-center 等。
@mixin
可傳入參數使用說明:當許多選擇器具有相同樣式時,可透過%
佔位符號宣告,將所有相同樣式內容合併,在以 @extend
來引入使用。
@extend
的 class 才會被編譯成 CSS 程式碼,並且整合到共用樣式%message-shared
佔位符號進行宣告的 class,並不會產生實體對象@mixin
和 @extend
使用時機使用 @mixin
的好處,是減少重複撰寫樣式的時間,卻也可能造成編譯後的 CSS 樣式大量重複,使檔案異常肥大。
這時可以改用有類似效果的 @extend
,同樣能解決重用問題,搭配 placeholder 佔位選擇器,將目標對象進行合併而非載入。
而 @mixin
和 @extend
兩者的使用時機與差異,可從下列兩點來思考:
使用說明:透過 @import
或 @use
語法,可將 SCSS 以模組化的形式,從其他 SCSS 檔案引入需要的樣式,需注意已存在的模組尚未全面支援 @use
。
_base.scss
。使用 @import
:會全部導入樣式,有可能產生命名衝突的狀況:
使用@use
:代表「參照」,只選擇需要的部分使用,並戴上模組名稱來呼叫,降低衝突的可能性:
參考資料: