前言
CSS IS AWESOME
開發者們對 CSS 有不同的意見,有的人說它很簡單、有的人說它難以駕馭,這些都是事實。我時常聽到苦惱的後端或是與其打交道多年的自己脫口而出:「CSS 真的好詭異阿!」,這篇文章來總結為什麼 CSS 是一個讓人又愛又恨的存在,它為什麼這麼難學這麼詭異?
觀點一:年輕且爆炸成長的網路媒介
網頁至今仍是一個非常年輕的傳播媒介,不超過 30 年!隨著一開始網頁用途多是「相互連結的文件」到現在我們習慣的「網路應用程式」像是:遊戲、影音平台、社群媒體、部落格……任何生意都能在網路上運行,網頁的用途與複雜度已經大幅成長,而 CSS 也是在這個過程中不斷的演進。
- 早期會依靠預處理器撰寫另一語法再轉換回 CSS,過程中實踐一些 CSS 未支援的功能,像是變數、巢狀規則、混合、繼承……等,這些功能隨著時間推移也慢慢地出現在原生的 CSS 標準當中。
- 早期會需要依靠客製化撰寫 JavaScript 邏輯的樣式也隨著 CSS 演化而輕鬆許多,像是:Sticky、clamp()、View Transitions。
從這幾點變化可以看出建構網頁樣式的方式仍在持續改變,開發者們持續地在挑戰網頁的極限,隨著前人修築的道路,網頁開發的可能性不可限量,但也帶來許多複雜性。
觀點二:網頁的初衷是平台獨立(Platform Agnostic)
根據 HTML 設計原則容納任何瀏覽器與平台使用為其核心原則。不管是任何網頁標準的制定都必須考量到任何種類的終端用戶,網頁樣式的呈現基於用戶的硬體、軟體限制之外,還有用戶族群的差異,像是視力障礙者、老年人、不同國家的語言、文化……等,這些都是網頁樣式必須考量的因素。
因此「設計網頁」與常人印象中的「設計」有所不同,常見的設計通常只透過有限的媒介接觸有限的族群,而網頁的設計必須考量到無限的媒介接觸無限的族群。
觀點三:CSS 攸關上下文 (CSS is Contextual)
與其說開發者們去「定義」網頁應當如何呈現更像是「建議」網頁如何呈現,網頁最終顯示的控制權永遠在使用者而非開發者手中,這大概是 CSS 會這麼讓人惱火與難以理解的核心因素了。我們無法強硬的決定網頁的呈現,只能提供一些建議,而這些建議會被瀏覽器解讀並且呈現給使用者。
有經驗的前端開發者將會熟悉與各種類的瀏覽器環境互動、巧妙的建構可維護可擴充的架構,而往往過程中都要踩過無數個坑才能建立對應的經驗 😅。
總結
優雅降級(Graceful degradation)與漸進增強(Progressive enhancement)深植網頁開發的根本,這也是為什麼 CSS 這麼難學與詭異的原因,它必須考量到無限的可能性,並且背負著無數的包府前進。