iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 30
0
自我挑戰組

學習 HTML / CSS 遇到的問題 系列 第 30

關於使用 ID 及選擇 CSS 選取器

  • 分享至 

  • xImage
  •  

學習 CSS 時知道盡量不使用 ID 來指定樣式,因一個 ID 只能放在一個元素上,無法像 class 一樣可以重複使用,也因 ID 權重較高,若要修改較難覆蓋

看到這篇文章有探討關於是否使用 ID 以及如何選擇 CSS 選擇器,讓我對為什麼 ID 在 CSS 可能出現問題有多些瞭解,而不是只記住不使用 ID
原文為 Why IDs Can be Problematic in CSS

因目前都是自己練習網頁,網頁的規模都不算大,很多都還在體會中,或還沒體會到 XD 這裡就紀錄幾個文章部分內容節錄:

  • 使用 OOCSS 的方法以結構與樣式分開、容器與內容分開為原則,可以減少許多重複的 CSS 樣式,讓規模較大的網頁 CSS 較好維護,也因使用此方法,很少需要唯一一個地方設定唯一的樣式,在這時候使用 ID 就可能產生需要覆蓋樣式的問題,因此在這個原則下避免使用 ID 是正確的
  • 類似想規模化,就需標準化的概念,當網站越來越大,CSS 追求一致化的風格時,也會傾向使用重複性較高的 class,但有時會只鼓勵避免使用 ID,但沒有了解背後的原因,造成對 ID 的使用上不了解
  • 在未有 HTML5 語意化標籤,像是 <header> <main> <footer> 等,這時使用 ID 來讓結構較有語意是可以的,例如 <div id=”footer”> … </div>,可以避免使用很多的 class 和 !important 來宣告樣式,但現在幾乎都已使用 HTML5 標籤,加上許多元件化的樣式,因此較依賴 class 指定樣式
  • 同時 ID 也具有「錨點」的功能,加上 id 的區塊可以將網頁的重點摘要,讓使用者點擊後可快速到達想閱覽的部分,像是:點擊 footer 的連結可跳至 footer 部分
<a href="#footer">footer</a> 

<footer id=”footer”> … </footer>
  • 雖然無法寫出同時可重複使用、一致化、易於維護又易讀的 CSS(這聽起來真的很難 XD)但是仍須往此方向努力 ,因此文章強調需思考自己專案的需求,來決定是否使用某種規則,而不是將一樣的規則都套用在所有不同情況的 CSS 中

作者也分享如何選擇較正確的 CSS 選取器,主要依照可維護性、性能、權重概念及解析 CSS 來思考要使用哪種選取器

  • 可維護性可以思考更改內容需要花費多少時間及心力、新開發人員需要花多少時間熟悉、許多人同時開發時是否容易有衝突產生,在考慮可維護性的情況下,樣式應該將盡量容易被覆蓋修改
  • 效能改善就能讓使用者跳出率下降,提升使用者體驗,達到 SEO 優化,因此是優化網站的主要目標,不過 CSS 選擇器的性能優化會是較不重要的,因改善像是網頁載入速度等其他地方會得到更大的效益,CSS 可以注意是否有像是引入 Bootstrap 框架的全部的內容,卻只使用到少部分樣式
  • 也需注意權重的部分( * < HTML 標籤 < class < ID < lnline selectors < !impoartant ),權重的值分別為 ( 0 < 1 < 10 < 100 < 1000 < 10000 ),若是權重分數相同時,後者會覆蓋前者,在 HTML 中的 inline selectors,例如 <h1 style="color: #ffffff;"> ... </h1> ,會覆蓋所有外部 CSS 檔的樣式,除了 !important,像是 * 全域設定或是屬性值為 inherit,繼承父元素屬性的權重都是 0 分
  • 因 CSS 解析過程會從最右到左讀取選取器,因此 CSS 的階層盡量不要太多層,選取器越少越好

參考資料:
Why IDs Can be Problematic in CSS


上一篇
關於偽類 ( pseudo-class )
系列文
學習 HTML / CSS 遇到的問題 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言