如何重設 CSS 的 property
November 15, 2019
寫 CSS 偶爾會遇到需要重設 property 值的時候。這裡介紹三個看起來很像但又不一樣的關鍵字:initial、unset、revert。
initial
會依照 property 在 CSS Spec 裡面的初始值。例如 margin-left 的初始值是 0。
常見的錯誤是把 div 的 display 設成 initial 以為能夠讓它回到 block(一般瀏覽器的 User Agent Style 都會把 div 的 display 設為 block)。但其實 display 的初始值是 inline。
unset
和 initial 類似,但如果該 property 是一個繼承屬性(inherited property) 就會按照繼承值計算,否則採用初始值。
例如 color 就是一個繼承屬性。
revert
revert 則又比 unset 進一步,他會依照樣式所在的地方而定:
- 如果我們在網站上設定屬性為
revert,則會將屬性回滾到用戶自定義的屬性;否則就回滾到 User Agent Style (i.e. 瀏覽器的初始樣式)。 - 如果我們在用戶自定義的樣式(例如 plugin/extension)設定屬性為
revert,則回滾到 User Agent Style。 - 如果 User Agent Style 設定屬性為
revert則行為和unset一模一樣。
revert 的出現讓我們能夠重設屬性到瀏覽器樣式。例如讓已經設成 display: inline 的 div 能夠回到 block。
如果你想看看實際用起來的效果如何,下面有一個簡單的範例:
甚至你可以這樣做:
.content-by-wysiwyg-editor * {
all: revert;
}來重設所有的 property 回到 User Agent Style(假設用戶沒有自定義樣式的話)。
可惜的是 revert 目前只有在 Firefox 67、Safari 9.1 以上才有實作,等待 Chrome 和 Edge(本質上是 Chromium) 跟上吧。
參考資料:
Written by Yi-Shan, Chen. Github