CSS選擇器總結(jié)

1、class 和 id 的使用場(chǎng)景?

  • id:指定標(biāo)簽的唯一標(biāo)識(shí)
    id選擇器,使用#name定義(name為id名,可任意取名),使用id="name"調(diào)用,其優(yōu)先級(jí)高于類選擇器,一個(gè)標(biāo)簽只能有一個(gè)id且每個(gè)id只能使用一次,多用于頁(yè)面分塊的塊級(jí)標(biāo)簽上;
  • class:指定標(biāo)簽的類名
    類選擇器,使用.name定義(name為類名,可任意取名),使用class="name"調(diào)用,一個(gè)標(biāo)簽可以有多個(gè)類且同一個(gè)類可以用到不同的標(biāo)簽上,多用于多個(gè)標(biāo)簽樣式相似或完全相同時(shí);

另外,name指定標(biāo)簽的名稱,如:<input type="text" name="username" >。
應(yīng)用場(chǎng)景:① form表單:name可作為轉(zhuǎn)遞給服務(wù)器表單列表的變量名;如上面的傳到服務(wù)器的名稱為:username= ' text的值 ' 。

②input type='radio'單選標(biāo)簽:把幾個(gè)單選標(biāo)簽的 name設(shè)為一個(gè)相同值時(shí),將會(huì)進(jìn)行單選操作。
③快速獲取一組name相同的標(biāo)簽:獲取擁有相同name的標(biāo)簽,一起進(jìn)行操作,如:更改屬性、注冊(cè)事件等。
特性:name屬性的值,在當(dāng)前page頁(yè)面中并非唯一性。

2、CSS選擇器常見(jiàn)的有幾種?

五種:基礎(chǔ)選擇器,組合選擇器,屬性選擇器,偽元素選擇器,偽類選擇器。

  • 基礎(chǔ)選擇器
選擇器 名稱 說(shuō)明
* 通用選擇器 選擇所有元素,包括html和body
div,span 標(biāo)簽選擇器 根據(jù)標(biāo)簽選擇元素
# id選擇器 選擇指定id元素
. 類選擇器 選擇指定class
  • 組合選擇器
選擇器 名稱 說(shuō)明
s1,s2,s3 分組選擇器 選擇多個(gè)選擇器的元素
s1 s2 后代選擇器 指定選擇器的后代元素
s1 > s2 子選擇器 指定選擇器的子元素
s1+s2 相鄰兄弟選擇器 選擇相鄰且之后的元素
s1~s2 兄弟選擇器 選擇之后的元素
  • 屬性選擇器
屬性擇器 含義
E[attr] 匹配所有具有屬性attr的元素,div[id]就能取到所有有id屬性的div
E[attr = value] 匹配屬性attr值為value的元素,div[id=test],匹配id=test的div
E[attr ~= value] 匹配所有屬性attr具有多個(gè)空格分隔、其中一個(gè)值等于value的元素
E[attr ^= value] 匹配屬性attr的值以value開(kāi)頭的元素
E[attr $= value] 匹配屬性attr的值以value結(jié)尾的元素
E[attr *= value] 匹配屬性attr的值包含value的元素
  • 偽元素選擇器
選擇器 名稱 說(shuō)明
::first-line偽元素選擇器 塊級(jí)首行
::first-letter 偽元素選擇器 塊級(jí)首字母
::before 偽元素選擇器 選擇元素之前插入內(nèi)容
::after 偽元素選擇器 選擇元素之后插入內(nèi)容
::selection 偽元素選擇器 光標(biāo)滑動(dòng)選擇內(nèi)容
  • 偽類選擇器

偽類選擇器之結(jié)構(gòu)性偽類選擇器

選擇器 名稱 說(shuō)明
:root 根元素選擇器 文檔根元素,一般為htm
:first-child 子元素選擇器 第一個(gè)子元素
:last-child 子元素選擇器 最后一個(gè)子元素
:first-of-type 子元素選擇器 同種標(biāo)簽的第一個(gè)子元素,等同于:nth-of-type(1)
:last-of-type 子元素選擇器 同種標(biāo)簽的最后一個(gè)子元素,等同于:nth-last-of-type(1)
:only-child 子元素選擇器 只有一個(gè)子元素的
:only-of-type 子元素選擇器 子元素只有一種類型的
:nth-child(n) 子元素選擇器 第n個(gè)子元素
:nth-last-child(n) 子元素選擇器 倒數(shù)第n個(gè)子元素,第一個(gè)編號(hào)為1
:nth-of-type(n) 子元素選擇器 nth-child()作用類似,但是僅匹配使用同種標(biāo)簽的元素
:nth-last-of-type(n) 子元素選擇器 nth-last-child() 作用類似,但是僅匹配使用同種標(biāo)簽的元素

偽類選擇器之UI選擇器(input標(biāo)簽用)

選擇器 名稱 說(shuō)明
:enabled 表單元素選擇器 input非disabled時(shí)
:disable 表單元素選擇器 input標(biāo)簽disabled時(shí)
:checked 表單元素選擇器 input標(biāo)簽checked時(shí)
:default 表單元素選擇器 選擇元素之后插入內(nèi)容
:valid 表單元素選擇器 選擇元素之后插入內(nèi)容
:invalid 表單元素選擇器 塊級(jí)首字母
:required 表單元素選擇器 選擇元素之前插入內(nèi)容
:optional 表單元素選擇器 選擇元素之后插入內(nèi)容

偽類選擇器之動(dòng)態(tài)偽類

選擇器 名稱 說(shuō)明
:link 動(dòng)態(tài)偽類選擇器 未被訪問(wèn)時(shí)
:visited 動(dòng)態(tài)偽類選擇器 已被訪問(wèn)時(shí)
:hover動(dòng)態(tài)偽類選擇器 鼠標(biāo)移上時(shí)
:active 動(dòng)態(tài)偽類選擇器 訪問(wèn)中跳轉(zhuǎn)頁(yè)面時(shí)
:focus 動(dòng)態(tài)偽類選擇器 獲得焦點(diǎn)時(shí)

偽類選擇器之其他

選擇器 名稱 說(shuō)明
:not 動(dòng)態(tài)偽類選擇器 反選
:empty 動(dòng)態(tài)偽類選擇器 空內(nèi)容
:lang 動(dòng)態(tài)偽類選擇器 包含lang元素
:target 動(dòng)態(tài)偽類選擇器 url中有target時(shí)

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

規(guī)則1:

最近的祖先樣式比其他祖先樣式優(yōu)先級(jí)高。

規(guī)則2:

“直接樣式”比“祖先樣式”優(yōu)先級(jí)高。

規(guī)則3:

優(yōu)先級(jí)關(guān)系:內(nèi)聯(lián)樣式 > ID 選擇器 > 類選擇器 = 屬性選擇器 = 偽類選擇器 > 標(biāo)簽選擇器 = 偽元素選擇器。

規(guī)則4:

選擇器的特殊性分為4個(gè)等級(jí),a b c d,從左到右,越左邊的越優(yōu)先, 如果一個(gè)選擇器規(guī)則有多個(gè)相同類型選擇器,則+1。
如果是HTML行內(nèi)樣式,那么特殊性最優(yōu)先 a
id選擇器的特殊性是 b
類選擇器、偽類選擇器、屬性選擇器為 c
標(biāo)簽選擇器、偽元素選擇器為 d

規(guī)則5:

屬性后插有 !important 的屬性擁有最高優(yōu)先級(jí)。若同時(shí)插有 !important,則再利用規(guī)則 3、4 判斷優(yōu)先級(jí)。

注意!?。?/em>

錯(cuò)誤的說(shuō)法
在學(xué)習(xí)過(guò)程中,你可能發(fā)現(xiàn)給選擇器加權(quán)值的說(shuō)法,即 ID 選擇器權(quán)值為 100,類選擇器權(quán)值為 10,標(biāo)簽選擇器權(quán)值為 1,當(dāng)一個(gè)選擇器由多個(gè) ID 選擇器、類選擇器或標(biāo)簽選擇器組成時(shí),則將所有權(quán)值相加,然后再比較權(quán)值。這種說(shuō)法其實(shí)是有問(wèn)題的。比如一個(gè)由 11 個(gè)類選擇器組成的選擇器和一個(gè)由 1 個(gè) ID 選擇器組成的選擇器指向同一個(gè)標(biāo)簽,按理說(shuō) 110 > 100,應(yīng)該應(yīng)用前者的樣式,然而事實(shí)是應(yīng)用后者的樣式。錯(cuò)誤的原因是:選擇器的權(quán)值不能進(jìn)位。還是拿剛剛的例子說(shuō)明。11 個(gè)類選擇器組成的選擇器的總權(quán)值為 110,但因?yàn)?11 個(gè)均為類選擇器,所以其實(shí)總權(quán)值最多不能超過(guò) 100, 你可以理解為 99.99,所以最終應(yīng)用后者樣式。

4、a:link, a:hover, a:active, a:visited 的順序是怎樣的? 為什么?

  • 這4個(gè)偽類優(yōu)先級(jí)相同,后邊的會(huì)產(chǎn)生覆蓋。
  • 一個(gè)鏈接可能同時(shí)處于多種狀態(tài),即同時(shí)屬于多個(gè)偽類。

未點(diǎn)擊鏈接前,link偽類長(zhǎng)期處于激活狀態(tài),鼠標(biāo)懸停(或點(diǎn)擊)時(shí),a鏈接同時(shí)處于link和hover(或active)狀態(tài),由于它們特指度相同,
在同時(shí)激活的情況下,后出現(xiàn)的偽類樣式會(huì)覆蓋前面的偽類樣式,故link狀態(tài)必須寫在hover(或active)之前。
再討論hover和active的順序,若把hover放在active后面,當(dāng)點(diǎn)擊鏈接一瞬,實(shí)際你在激活active狀態(tài)的同時(shí)觸發(fā)了hover偽類,hover在后面覆蓋了active的顏色,所以無(wú)法看到active的顏色。故hover在active之前
其次,若把visited放在hover后面,那已訪問(wèn)過(guò)的鏈接一直觸發(fā)著visited偽類,會(huì)覆蓋hover樣式。
最后,若果只有l(wèi)ink、visited兩個(gè)偽類,它們之間順序無(wú)所謂。(因?yàn)樗鼈z不可能同時(shí)觸發(fā),即又未訪問(wèn)同時(shí)又已訪問(wèn)。)

所以同時(shí)使用這四個(gè)偽類的順序是:a:link → a:hover→ a:active→ a:visited

5、以下選擇器分別是什么意思?

/*id選擇器,匹配id值為header的元素*/
#header{
}
/*class選擇器,匹配class值為header的元素*/
.header{
}
/*后代選擇器,匹配class值為header元素的所有class值為logo的后代*/
.header .logo{
}
/*class選擇器,匹配class值包含header和mobile的元素 */
.header.mobile{
}
/*匹配class值為header元素后代中的p和h3元素*/
.header p, .header h3{
}
/*匹配id為header的后代中,類名為nav的直接子元素中的li標(biāo)簽*/
#header .nav>li{
}
 /*匹配id為header的后代a標(biāo)簽在hover狀態(tài)(鼠標(biāo)懸停)*/
#header a:hover{
}
/*匹配id為header的后代中,類名為logo的元素之后的同級(jí)元素中的p標(biāo)*/
#header .logo~p{
}
 /*匹配id為header的后代中,input標(biāo)簽中,屬性type的值為"text"的元素*/
#header input[type="text"]{
}

6、列出你知道的偽類選擇器

常見(jiàn)的偽類選擇器:

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:last-of-type或 :nth-of-type(1):nth-last-of-type(1)
E:empty 匹配一個(gè)不包含任何子元素的元素,文本節(jié)點(diǎn)也被看作子元素
E:not(selector) 匹配不符合當(dāng)前選擇器的任何元素
n的取值1,2,3,4,5,2n+1, 2n, 4n-1,odd, even
E::first-line 匹配E元素內(nèi)容的第一行
E::first-letter 匹配E元素內(nèi)容的第一個(gè)字母
E::before 在E元素之前插入生成的內(nèi)容
E::after 在E元素之后插入生成的內(nèi)容

7、div:first-child、div:first-of-type、div :first-child和div :first-of-type的作用和區(qū)別 (注意空格的作用)

  • div:first-child 父元素下第一個(gè)子元素且其必須為div元素
  • div:first-of-type 父元素下第一個(gè)div元素
  • div :first-child div元素下的所有后代的第一個(gè)子元素
  • div :first-of-type div元素下的所有后代中標(biāo)簽相同的第一個(gè)子元素

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

<style>
.item1:first-child{
  color: red;
}
.item1:first-of-type{
  background: blue;
}
</style>
 <div class="ct">
   <p class="item1">aa</p>
   <h3 class="item1">bb</h3>
   <h3 class="item1">ccc</h3>
 </div>
測(cè)試03.png

原因:

  • .item1:first-child:即父元素div下第一個(gè)class為item的子元素,滿足條件的只有 <p class="item1">aa</p>,所以只有" aa "變?yōu)閞ed。
  • .item1:first-of-type:即父元素div下的class為item且為同標(biāo)簽第一個(gè)元素的子元素,滿足條件的有 <p class="item1">aa</p><h3 class="item1">bb</h3>,所以 " aa "、" bb " 背景變?yōu)閎lue。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基本選擇器 * 通用選擇器,匹配任何元素 E 標(biāo)簽選擇器,匹配所有使用E標(biāo)簽的元素 .class class選擇器...
    瘋狂的潛水員閱讀 648評(píng)論 0 2
  • 問(wèn)題1 :id和class的應(yīng)用場(chǎng)景 id:指定標(biāo)簽的唯一標(biāo)識(shí),每個(gè)ID在文檔中必須是唯一的 class:指定標(biāo)簽...
    hellowade閱讀 1,022評(píng)論 0 0
  • jQuery 的選擇器可謂之強(qiáng)大無(wú)比,這里簡(jiǎn)單地總結(jié)一下常用的元素查找方法 $("#myELement") 選擇i...
    JamHsiao_aaa4閱讀 1,009評(píng)論 0 0
  • 其實(shí)平時(shí)用得多的選擇器無(wú)非也就是那么幾個(gè),時(shí)間久了,許多不常用的選擇器就慢慢忘記了。為了不讓自己忘記這些選擇器,今...
    盛夏晚清風(fēng)閱讀 1,946評(píng)論 0 5
  • 1.class 和 id 的使用場(chǎng)景? class:類選擇器,一個(gè)標(biāo)簽可以有多個(gè)類且同一個(gè)類可以用到不同的標(biāo)簽上,...
    饑人谷_兔子君閱讀 1,273評(píng)論 0 0

友情鏈接更多精彩內(nèi)容