在網頁中,無論是透過 JavaScript 或是 CSS 有一套共用的選取器,這邊挑些常見的來說吧
#id
.class
div
*
#id > .class
#id div
input[type='text']
由於偽類和偽元素能提的東西過多,因此我們這邊額外拉出來講
p:first-child
:所有作為父元素第一個子元素的 p 元素p:last-child
:所有作為父元素最後一個子元素的 p 元素p > span:first-of-type
:選擇 p 元素子代的第一個 span 元素p > span:nth-of-type(n)
:選擇 p 元素子代的第 n 個 span 元素input:focus
:當 input 元素被聚焦時input:checked
:當 input 元素被勾選時,通常配合 checkbox 或 radioinput:disabled
:當 input 元素被禁止時p:not(.special)
為選取所有 p 元素除了類名為 specialp::before
或 p::after
:在 p 元素的內容之前或是之後添加一個假元素,當添加 content 屬性後即會生成一個透過 CSS 產生的元素p::before {
content: '' //這邊也可以輸入文字或是 unicode
}
p:first-line
:選取在 p 元素的第一行元素,可以用來像是加粗字體或是加大字體等等效果,通常在內容型網站較有可能使用p::first-letter
:選取在 p 元素的第一個字母,一樣為內容型網站較有機會使用div.container
:當我們把兩個選取器連在一起時即為 and 的效果,像這邊為類名是 container 的 div 元素h1, h2, h3
:我們可以透過透號將會需要同一組設定的選取器放在一起,就不需要一直複製貼上了相信權重問題只要打開任何一篇CSS 教學或介紹都絕對會提到,個人開發的時候還好說,基本上樣式表都是自己套的,差別只在會不會有第三方套件需要覆蓋;但若多人開發或是交接別人的舊專案一但樣式權重不明確或是分散於各地,最後就會看到 !important 來無視前面的全部權重設定,最慘的狀況會變成我 !important 你的 !important,為了避免這種問題我們還是好好了解權重的設定吧。
正常來說,我們會把權重分為四個等級 (0,0,0,0) 同等級的權重在高也不會進位影響到下一等級的權重,當分數相等時會後蓋前,其中四個等級如下
*
通用選取器:通用選取器的權重為 (0,0,0,0) 基本上有寫的東西都會覆蓋過去,通常這邊需要注意會不會跟 reset.css 之類的初始化 CSS 起衝突權重算法為只要出現在同一組選取器的權重就直接加上去,像是 #id > div.class > p
這組權重為
#id
為 (0, 1, 0, 0)div.class
為 (0, 0, 0, 1) + (0, 0, 1, 0)p
為 (0, 0, 0, 1)因此總權重為 (0, 1, 1, 2)
!important 為寫在 CSS 屬性內的一個後綴,效果是無視所有權重,直接將此屬性的效果套用上去,只會受到前後的 !important 影響,通常不建議使用