CSS 選擇器

問(wèn)題1. class 和 id 的使用場(chǎng)景?

class 常用于多個(gè)標(biāo)簽統(tǒng)一進(jìn)行樣式適配,在 CSS 文件中以 .xxx{} 進(jìn)行樣式調(diào)試;
id 在一個(gè) HTML 頁(yè)面中只為一個(gè)標(biāo)簽單獨(dú)使用,僅對(duì)這個(gè)標(biāo)簽有效,在 CSS 文件中以#xxx{} 進(jìn)行樣式調(diào)試。


問(wèn)題2. CSS選擇器常見(jiàn)的有幾種?

基礎(chǔ)選擇器/組合選擇器/屬性選擇器/偽類選擇器/偽元素選擇器


問(wèn)題3. 選擇器的優(yōu)先級(jí)是怎樣的?對(duì)于復(fù)雜場(chǎng)景如何計(jì)算優(yōu)先級(jí)?

優(yōu)先級(jí)從高到低分別是

1.在屬性后面使用 !important 會(huì)覆蓋頁(yè)面內(nèi)任何位置定義的元素樣式
2.作為 style 屬性寫在元素標(biāo)簽上的內(nèi)聯(lián)樣式
3.id 選擇器
4.類選擇器
5.偽類選擇器
6.屬性選擇器
7.標(biāo)簽選擇器
8.通配符選擇器
9.瀏覽器自定義

應(yīng)對(duì)復(fù)雜場(chǎng)景
選擇器分類 標(biāo)識(shí)
行內(nèi)樣式 <div style="xxx"></div> a
ID 選擇器 b
類/屬性選擇器/偽類選擇器 c
標(biāo)簽選擇器/偽元素選擇器 d
  1. 面對(duì)兩條復(fù)雜的 CSS 組合選擇器之間進(jìn)行權(quán)重選擇,我們將這兩條組合選擇器中的各個(gè)選擇器都挑出來(lái),按照上表選擇器分類并進(jìn)行相對(duì)應(yīng)的標(biāo)識(shí)。
  2. 然后由標(biāo)識(shí) a 到 b 比較兩條復(fù)雜組合選擇器各自擁有上述各標(biāo)識(shí)選擇器分類的多少,如果一條復(fù)雜選擇器擁有 a 標(biāo)識(shí)數(shù)目大于另一條,則權(quán)重高于另一條,不再考慮其它標(biāo)識(shí);如果兩者擁有 a 標(biāo)識(shí)數(shù)目相同,則再考慮 b 標(biāo)識(shí),若一者擁有 b 標(biāo)識(shí)數(shù)目大于另一方,則權(quán)重高于另一方,不再考慮 c 和 d 標(biāo)識(shí)。
  3. 以此類推,最終得出哪條復(fù)雜選擇器擁有的權(quán)重更高。
例:
#test p.class1 {...}
#test .class1.class2 {...}
//兩者對(duì)應(yīng)同一元素,元素聽(tīng)誰(shuí)的?
解:
復(fù)雜選擇器 標(biāo)識(shí)數(shù)
#test p.class1 {...} a=0, b=1, c=1, d=1
#test .class1.class2 {...} a=0, b=1, c=2, d=0

由該表可知,標(biāo)識(shí) a 和 b 兩條復(fù)雜選擇器擁有數(shù)目相同,而標(biāo)識(shí) c 第二行擁有數(shù)高于第一行,因此第二行的權(quán)重高于第一行。


問(wèn)題4. a:link, a:hover, a:active, a:visited 的順序是怎樣的? 為什么?

<style type="text/css">
    a {
        color: red;
    }
    a:visited { //小心順序
        color: black;
    }
    a:hover {
        color: blue;
    }
    a:active {
        color: yellow;
    }
</style>

順序是 a:link -> a:visited -> a:hover -> a:active,如果不按照這個(gè)順序,則可能出現(xiàn)屬性被相互覆蓋而無(wú)法獲得想要得到的效果。


問(wèn)題5.以下選擇器分別是什么意思?

#header{
} //選取 Class 為 header 的元素

.header{
} //選取 ID 為 header 的元素

.header .logo{
} //選取 ID 為 header 的所有 ID 為 logo 的后代;

.header.mobile{
} //選取 Class 中同時(shí)包含 header 和 mobile 的元素;

.header p, .header h3{
} //選取 Class 中包含 header 的 p 標(biāo)簽和 h3 標(biāo)簽

#header .nav>li{
} //選取 Class 包含 header 的 ID 為 nav 的后代元素的所有標(biāo)簽為 li 的直接子元素

#header a:hover{
} //選取 Class 包含 header 的所有標(biāo)簽為 a :hover 后代元素

#header .logo~p{
} //選取 Class 包含 header 的 ID 為 logo 的子元素之后的同級(jí)標(biāo)簽為 p 的元素

#header input[type="text"]{
} //選取 Class 包含 header 的后代元素中標(biāo)簽為 input 同時(shí) type="text"的元素


列出你知道的偽類選擇器

偽類選擇器 含義
E:first-child 匹配元素E的第一個(gè)子元素
E:link 匹配所有未被點(diǎn)擊的鏈接
E:visited 匹配所有已被點(diǎn)擊的鏈接
E:active 匹配鼠標(biāo)已經(jīng)其上按下、還沒(méi)有釋放的E元素
E:hover 匹配鼠標(biāo)懸停其上的E元素
E:focus 匹配獲得當(dāng)前焦點(diǎn)的E元素
E:lang(c) 匹配lang屬性等于c的E元素
E:enabled 匹配表單中可用的元素
E:disabled 匹配表單中禁用的元素
E:checked 匹配表單中被選中的radio或checkbox元素
E::selection 匹配用戶當(dāng)前選中的元素
E:root 匹配文檔的根元素,對(duì)于HTML文檔,就是HTML元素
E:nth-child(n) 匹配其父元素的第n個(gè)子元素,第一個(gè)編號(hào)為1
E:nth-last-child(n) 匹配其父元素的倒數(shù)第n個(gè)子元素,第一個(gè)編號(hào)為1
E:nth-of-type(n) 與:nth-child()作用類似,但是僅匹配使用同種標(biāo)簽的元素
E:nth-last-of-type(n) 與:nth-last-child() 作用類似,但是僅匹配使用同種標(biāo)簽的元素
E:last-child 匹配父元素的最后一個(gè)子元素,等同于:nth-last-child(1)
E:first-of-type 匹配父元素下使用同種標(biāo)簽的第一個(gè)子元素,等同于:nth-of-type(1)
E:last-of-type 匹配父元素下使用同種標(biāo)簽的最后一個(gè)子元素,等同于:nth-last-of-type(1)
E:only-child 匹配父元素下僅有的一個(gè)子元素,等同于:first-child:last-child 或 :nth-child(1):nth-last-child(1)
E:only-of-type 匹配父元素下使用同種標(biāo)簽的唯一一個(gè)子元素,等同于:first-of-type
E:empty 匹配一個(gè)不包含任何子元素的元素,文本節(jié)點(diǎn)也被看作子元素
E:not(selector) 匹配不符合當(dāng)前選擇器的任何元素

div:first-child 和 div:first-of-type 的作用和區(qū)別

div:first-child:匹配其父元素的第一個(gè)子元素,其選取了所有 div 標(biāo)簽的父元素的第一個(gè)子元素。
div:first-of-type:匹配其父元素第一個(gè)使用同種標(biāo)簽的子元素,其選取了所有 div 標(biāo)簽的父元素的第一個(gè)也是 div 標(biāo)簽的子元素。


運(yùn)行如下代碼,解析下輸出樣式的原因

<style>
    .item1:first-child{
      color: red;
    } //該選擇器選擇了所有 Class 為 item1 的父元素的第一個(gè)子元素
    .item1:first-of-type{
      background: blue;
    } //該選擇器選擇了所有 Class 為 item1 的元素(標(biāo)識(shí) A)的父元素的第一個(gè)標(biāo)簽與 A 元素相同的子元素
</style>

 <div class="ct">
   <p class="item1">aa</p>
   <h3 class="item1">bb</h3>
   <h3 class="item1">ccc</h3>
 </div>

CSS 中的第一個(gè)選擇器選擇了所有 Class 為 item1 的父元素的第一個(gè)子元素,三個(gè) Class 為 item1 的元素的父元素都是<div class="ct">,其第一個(gè)子元素為<p class="item1">aa</p>,故 aa 顯示為紅色。

CSS 中的第二個(gè)選擇器選擇了所有 Class 為 item1 的元素(標(biāo)識(shí) A)的父元素的第一個(gè)標(biāo)簽與 A 元素相同的子元素,<p class="item1">aa</p>父元素的第一個(gè)標(biāo)簽為 p 的子元素即是其自身,<h3 class="item1">bb</h3><h3 class="item1">ccc</h3>的父元素的第一個(gè)標(biāo)簽為 h3 的子元素為<h3 class="item1">bb</h3>,故而 aa 和 ccc 的背景顏色為藍(lán)色。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,814評(píng)論 1 92
  • 其實(shí)平時(shí)用得多的選擇器無(wú)非也就是那么幾個(gè),時(shí)間久了,許多不常用的選擇器就慢慢忘記了。為了不讓自己忘記這些選擇器,今...
    盛夏晚清風(fēng)閱讀 1,875評(píng)論 0 5
  • 一.class 和 id 的使用場(chǎng)景? name:指定標(biāo)簽的名稱應(yīng)用場(chǎng)景:①form表單:name可作為傳遞給服務(wù)...
    Sunset125閱讀 985評(píng)論 0 0
  • 1. class 和 id 的使用場(chǎng)景: id:id選擇器,使用#name定義(name為id名,可任意取名),使...
    石林濤閱讀 385評(píng)論 0 1
  • class和id的使用場(chǎng)景 class指定標(biāo)簽的類名,屬性值可出現(xiàn)在多個(gè)標(biāo)簽中。id指定標(biāo)簽的唯一標(biāo)識(shí),為某一元素...
    饑人谷_saybye閱讀 465評(píng)論 0 0