CSS 選擇器 小結

1、什麼是 CSS 選擇器

CSS 選擇器用於定位咱們想要給予樣式的 HTML 元素css

2、什麼是選擇器優先級

瀏覽器經過優先級來判斷哪些屬性值與一個元素最爲相關,從而在該元素上應用這些屬性值。優先級是基於不一樣種類選擇器組成的匹配規則。算法

3、CSS 都有哪些選擇器

CSS 選擇器有許多種,例如 ID 選擇器、類選擇器、標籤選擇器、通用選擇器、屬性選擇器、僞類選擇器、僞元素選擇器、羣組選擇器、後代選擇器、子元素選擇器、兄弟元素選擇器等等瀏覽器

4、CSS 選擇器優先級

相信各位寫過 CSS 的朋友都知道,CSS 幾種常見選擇器優先級是:!important > 內聯 > ID選擇器 > 類選擇器 > 標籤選擇器 > 通用選擇器。那麼它是怎麼算出來的呢?有這樣一個算法過程:指針

優先級是由 A、B、C、D 的值來決定的,其中它們的值計算規則以下:code

  • 若是存在內聯樣式,那麼 A = 1, 不然 A = 0;繼承

  • B 的值等於ID選擇器出現的次數;element

  • C 的值等於類選擇器屬性選擇器僞類出現的總次數;文檔

  • D 的值等於標籤選擇器僞元素出現的總次數 。get

再通俗一點的說法:在一個賭桌上,有這麼幾種籌碼,input

  • 一個內聯樣式至關於¥1000;

  • 一個ID選擇器至關於¥100;

  • 一個類選擇器 /屬性選擇器/僞類至關於¥10

  • 一個標籤選擇器 / 僞元素 至關於¥1

每出現一個上述選擇器,就增長對應籌碼的錢數,最終,誰的籌碼多,就聽誰的。可是,這裏的計算方法和生活中的計算方法不同,這裏的十個一百,並不等於一千,只能是‘十百’,因此哪怕是‘十一百’,都要比一千小。

選擇器 示例 權重
!impotant color: #fff !important; +∞
內聯選擇器 "<div style='color: #fff'></div>" 1 0 0 0
ID 選擇器 #id 0 1 0 0
類選擇器、屬性選擇器、僞類 .class 0 0 1 0
標籤選擇器、僞元素 div 0 0 0 1
通用選擇器 * 0 0 0 0

5、結論

CSS 樣式有衝突時:

  1. 對於不一樣的 CSS 選擇器,可經過計算權重值得出優先級,判斷生效樣式

  2. 對於相同的 CSS 選擇器,可根據書寫位置判斷生效樣式

  3. 繼承屬性沒有權重值,優先級最低

附:

選擇器 例子 描述 css版本
.class .intro 選擇 class="intro" 的全部元素。 1
#id #firstname 選擇 id="firstname" 的全部元素。 1
* * 選擇全部元素。 2
element p 選擇全部 <p> 元素。 1
element,element div,p 選擇全部 <div> 元素和全部 <p> 元素。 1
element element div p 選擇 <div> 元素內部的全部 <p> 元素。 1
element>element div>p 選擇父元素爲 <div> 元素的全部 <p> 元素。 2
element+element div+p 選擇緊接在 <div> 元素以後的全部 <p> 元素。 2
[attribute] [target] 選擇帶有 target 屬性全部元素。 2
[attribute=value] [target=_blank] 選擇 target="_blank" 的全部元素。 2
[attribute~=value] [title~=flower] 選擇 title 屬性包含單詞 "flower" 的全部元素。 2
[attribute|=value] [lang|=en] 選擇 lang 屬性值以 "en" 開頭的全部元素。 2
:link a:link 選擇全部未被訪問的連接。 1
:visited a:visited 選擇全部已被訪問的連接。 1
:active a:active 選擇活動連接。 1
:hover a:hover 選擇鼠標指針位於其上的連接。 1
:focus input:focus 選擇得到焦點的 input 元素。 2
:first-letter p:first-letter 選擇每一個 <p> 元素的首字母。 1
:first-line p:first-line 選擇每一個 <p> 元素的首行。 1
:first-child p:first-child 選擇屬於父元素的第一個子元素的每一個 <p> 元素。 2
:before p:before 在每一個 <p> 元素的內容以前插入內容。 2
:after p:after 在每一個 <p> 元素的內容以後插入內容。 2
:lang(language) p:lang(it) 選擇帶有以 "it" 開頭的 lang 屬性值的每一個 <p> 元素。 2
element1~element2 p~ul 選擇前面有 <p> 元素的每一個 <ul> 元素。 3
[attribute^=value] a[src^="https"] 選擇其 src 屬性值以 "https" 開頭的每一個 <a> 元素。 3
[attribute$=value] a[src$=".pdf"] 選擇其 src 屬性以 ".pdf" 結尾的全部 <a> 元素。 3
[attribute*=value] a[src*="abc"] 選擇其 src 屬性中包含 "abc" 子串的每一個 <a> 元素。 3
:first-of-type p:first-of-type 選擇屬於其父元素的首個 <p> 元素的每一個 <p> 元素。 3
:last-of-type p:last-of-type 選擇屬於其父元素的最後 <p> 元素的每一個 <p> 元素。 3
:only-of-type p:only-of-type 選擇屬於其父元素惟一的 <p> 元素的每一個 <p> 元素。 3
:only-child p:only-child 選擇屬於其父元素的惟一子元素的每一個 <p> 元素。 3
:nth-child(n) p:nth-child(2) 選擇屬於其父元素的第二個子元素的每一個 <p> 元素。 3
:nth-last-child(n) p:nth-last-child(2) 同上,從最後一個子元素開始計數。 3
:nth-of-type(n) p:nth-of-type(2) 選擇屬於其父元素第二個<p> 元素的每一個 <p> 元素。 3
:nth-last-of-type(n) p:nth-last-of-type(2) 同上,可是從最後一個子元素開始計數。 3
:last-child p:last-child 選擇屬於其父元素最後一個子元素每一個 <p> 元素。 3
:root :root 選擇文檔的根元素。 3
:empty p:empty 選擇沒有子元素的每一個 <p> 元素(包括文本節點)。 3
:target #news:target 選擇當前活動的 #news 元素。 3
:enabled input:enabled 選擇每一個啓用的 <input> 元素。 3
:disabled input:disabled 選擇每一個禁用的 <input> 元素 3
:checked input:checked 選擇每一個被選中的 <input> 元素。 3
:not(selector) :not(p) 選擇非 <p> 元素的每一個元素。 3
::selection ::selection 選擇被用戶選取的元素部分。 3
相關文章
相關標籤/搜索