為什麼要使用 CSS 預處理器
在說明什麼是 CSS 預處理器之前,首先我們來問,為什麼要使用 CSS 預處理器呢? 原生的 CSS 的哪些不便,讓懶惰成性的工程師,願意特地再花時間學習一套語法,勝過寫原生 CSS?
了解脈絡或許不會讓你的高中歷史成績變好(承認吧,當時坐在隔壁的班草 / 班花的確更能引起你的興趣),但知道原因,會讓你用 CSS 預處理時多點心安理得、多點理直氣壯,跟面試官聊起時才不會大眼瞪小眼,然後心裡暗付著,難道就是愛情~
對 CSS 的愛恨糾葛
自從 1996 年 12月,CSS1 發表以來到現在的 CSS3,CSS 一直被認為是定義網頁樣式的屬性與排版等輔助性裝飾功能,其核心機制與語法沒有太大的改變,BUT 看過韓劇的人就知道,事情的發展並非想像中的簡單,往往會朝著意想不到的複雜化發展,你愛的人有可能其實是失散多年的親哥,而從小暗戀著你的隔壁鄰居小明,就算幫你撐傘,替你擋子彈,卻還是拿他的一片真心換來你絕情的背影。CSS 一行行單純的屬性描述,雖然簡單易學易懂,然而,隨著網頁開發的複雜度提高,網頁開發者發現傳統 CSS 有一些問題難以支持大型專案的維護與重製需求,例如:
- 遇到大量且相同的樣式要修改,例如文字或顏色等,就要花很多時間使用查找以及取代的功能調整
// 如果老闆突然說要把整個網站中的文字改成紅色的 red,
// 你通常會要一行一行的找出來並取代,
// 但,如果有 100 行 要改呢?
// 又或者 100 行中有 20 行維持原設定 ?
div{
color: green;
}
p{
color:blue;
}
- 命名時如果底下還有很多子元素,父元素還是需要重複打出,而且如果以後想要修改父元素名稱,要逐個找出來做調整
.person{
...
}
.person .avatar{
...
}
.person .name{
...
}
.person .address{
...
}
- 重複的樣式組需要寫多次,無法模組化再利用
// div1 與 div2 有很多重複的屬性,只有 font-size 不同
div1{
width: 100%;
heigh: 100%;
margin: 5px;
padding: 10px 20px;
font-size:16px;
}
div2{
width: 100%;
heigh: 100%;
margin: 5px;
padding: 10px 20px;
font-size:24px;
}
沒有變數與合理的樣式重複使用機制,以及需要寫很多重複的選擇器等情況降低了 CSS 的開發效率以及維護性,尤其是遇到複雜的專案開發時。
所以,CSS 預處理器是什麼
為了更快更有系統的管理 CSS,有開發者思考若是能讓 CSS 像一般程式語言一樣,有變數、函式、迴圈等功能該有多好。於是有了 CSS 預處理器(CSS Preprocessor)的誕生。
簡單來說,CSS 預處理器就是用另一種特定的語法規則撰寫 CSS,然後再幫你編譯成原生 CSS 檔案,讓瀏覽器可以讀取。
由於 CSS 預處理器是在生成 CSS 之前,所需進行撰寫與編譯,所以才會稱作"預(pre-)"處理
這個方式的好處是,讓開發者透過像是變數(varialbe)、混入(mixin)、繼承(extend)、嵌套(nesting)等常見的程式或邏輯的特性去撰寫 CSS,撰寫出更簡潔、可讀性高、可重複且易於維護的 CSS 程式碼
目前較多人使用相對成熟的 CSS 預處理器有: Sass/Scss、Less、Stylus,功能與語法都差不多,可以依照自己或公司使用習慣選用
由於 CSS 預處理器之後還是會被轉譯為原生 CSS,在瀏覽器中讀取的其實是轉譯後的原生 CSS,所以就算不用 CSS 預處理器直接使用原生的 CSS 也可以,就像手機沒有濾鏡 APP 可以自拍嗎? 當然還是可以拍,只是被打回原形後好不好看,你與網友們能不能接受。
有些人認為,在小型的個人 side project 或者單純的活動案,用原生 CSS 即可,省去建置編譯 CSS 預處理器相關環境的繁瑣;而在開發大型專案或多人協作時,為了管理以及維護的方便性,可以採用 CSS 預處理器。
但要選擇使用哪一套 CSS 預處理器,或是否使用 CSS 預處理器,終究還是要考量自己的熟練度以及公司團隊內部的習慣與規範,評估對此專案更有利的方式。
參考來源:
- 什麼是 CSS 預處理器?@ changtsuiling
- CSS preprocessor 介紹,與 SASS 入門分享@ wantingj
- 浅谈 css 预处理器,Sass、Less 和 Stylus@牧曈
- 浅谈 CSS 预处理器(一):为什么要使用预处理器?
- 2019 年,你是否可以拋棄 CSS 預處理器?
- Sass Documentation
- Sass/SCSS 基本語法介紹,搞懂 CSS 預處理器@ Alpha Camp
- SASS 用法指南@阮一峰
- 30 天掌握 Sass 語法 - (1) 什麼是 SASS?它真的能加速我寫 CSS 的效率嗎?@廖洧杰
- Sass/SCSS 簡明入門教學@TechBridge 技術共筆部落