CSS選擇器

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

  • class: 指定標(biāo)簽的類名尺锚,用于選擇同一類型的元素。如果在頁(yè)面上有些元素有某些共同的特征,我們可以加同一個(gè)class
  • id: 指定標(biāo)簽的唯一標(biāo)識(shí)惜浅,在頁(yè)面上是獨(dú)一無(wú)二的

CSS選擇器常見的有幾種?

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

基礎(chǔ)選擇器

選擇器 含義
* 通用元素選擇器
#id id選擇器
.class 類選擇器
element 標(biāo)簽選擇器

組合選擇器

選擇器 含義
E,F 多元素選擇器瘫辩,用,分隔,同時(shí)匹配元素E或元素F
E F 后代選擇器坛悉,用空格分隔杭朱,匹配E元素所有的后代(不只是子元素、子元素向下遞歸)元素F
E>F 子元素選擇器吹散,用>分隔弧械,匹配E元素的所有直接子元素
E+F 直接相鄰選擇器,匹配E元素之后的相鄰的同級(jí)元素F
E~F 普通相鄰選擇器(弟弟選擇器)空民,匹配E元素之后的同級(jí)元素F(無(wú)論直接相鄰與否)
.class1.class2 (中間沒(méi)有空格)匹配的是同時(shí)擁有class1和class2的元素
element#id id和class選擇器和選擇器連寫的時(shí)候中間沒(méi)有分隔符刃唐,. 和 # 本身充當(dāng)分隔符的元素

屬性選擇器

選擇器 含義
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開頭的元素
E[attr $= value] 匹配屬性attr的值以value結(jié)尾的元素
E[attr *= value] 匹配屬性attr的值包含value的元素

偽類選擇器

選擇器 含義
E:first-child 匹配作為長(zhǎng)子(第一個(gè)子女)的元素E
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::first-line 匹配E元素內(nèi)容的第一行
E::first-letter 匹配E元素內(nèi)容的第一個(gè)字母
E::before 在E元素之前插入生成的內(nèi)容
E::after 在E元素之后插入生成的內(nèi)容

選擇器優(yōu)先級(jí)是怎樣的

優(yōu)先級(jí)從高到底依次是

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

對(duì)于復(fù)雜場(chǎng)景如何計(jì)算優(yōu)先級(jí)澄港?

在CSS2.1中是這樣描述的:

  • 如果聲明來(lái)自于“style”屬性,而不是帶有選擇器的規(guī)則柄沮,則記為 1回梧,否則記為 0 (= a)(HTML元素的style屬性也是樣式規(guī)則,因?yàn)檫@些樣式規(guī)則沒(méi)有選擇器祖搓,因此記為a=1,b=0,c=0,d=0)
  • 計(jì)算選擇器中 ID 屬性的個(gè)數(shù) (= b)
  • 計(jì)算選擇器中其他屬性(類狱意、屬性選擇器)和偽類的個(gè)數(shù) (= c)
  • 計(jì)算選擇器中元素名稱和偽元素的個(gè)數(shù) (= d)

將四個(gè)數(shù)字按 a-b-c-d這樣連接起來(lái)(位于大數(shù)進(jìn)制的數(shù)字系統(tǒng)中),構(gòu)成選擇器的優(yōu)先級(jí)拯欧。
當(dāng)遇到多個(gè)選擇符同時(shí)出現(xiàn)時(shí)候 按選擇符得到的Specificity值逐位相加详囤, (數(shù)位之間沒(méi)有進(jìn)制 比如說(shuō): 0,0,0,5 + 0,0,0,5 =0,0,0,10 而不是 0,0, 1, 0) 就得到最終計(jì)算得的specificity, 然后在比較取舍時(shí)按照從左到右的順序逐位比較哈扮。

比如:
<pre>
div { font-size:12px;}/此時(shí)div是元素名稱為d纬纪,個(gè)數(shù)為1個(gè),Specificity值為0,0,0,1/
body div p{color: green;} /3個(gè)元素名稱,Specificity值為0,0,0,3 /
div .my{ font-size:12px;} /
一個(gè)元素名稱為d滑肉,一個(gè)類選擇符為c包各,Specificity值為0,0,1,1
/
style="color: red;" /Specificity值為1,0,0,0/
</pre>

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

順序?yàn)椋篴:link问畅、a:visited、a:hover六荒、a:active

當(dāng)選擇器優(yōu)先級(jí)別相同時(shí)护姆,后定義的會(huì)覆蓋先定義的。在CSS中掏击,如果對(duì)于相同元素有針對(duì)不同條件的定義卵皂,宜將最一般的條件放在最上面,并依次向下砚亭,保證最下面的是最特殊的條件灯变。這樣殴玛,瀏覽器在顯示元素時(shí),才會(huì)從特殊到一般添祸、逐級(jí)向上驗(yàn)證條件滚粟,才會(huì)使你的每一個(gè)CSS語(yǔ)句都起到效果。關(guān)于a:link, a:hover, a:active, a:visited 的順序有一個(gè)便于記憶的“愛恨原則”(LoVe/HAte)刃泌,即四種偽類的首字母:LVHA凡壤。

a:link 代表為訪問(wèn)鏈接的樣式,只要是超鏈接且未被訪問(wèn)耙替,則鏈接就會(huì)按照設(shè)定的樣式顯示

a:visited 代表鏈接訪問(wèn)后的樣式亚侠,只要鏈接被訪問(wèn)過(guò)了,那么之后就會(huì)按照你設(shè)置的樣式顯示 如果放在a:hover的后面林艘,那么你點(diǎn)擊之后盖奈,由于a:visited是在后面定義的混坞,它會(huì)將a:hover覆蓋掉狐援,a:hover定義的樣式將不起作用

a:hover 代表的是你光標(biāo)經(jīng)過(guò)某一元素時(shí)的樣式 ,如果放在a:active 后面究孕,因?yàn)槭鞘髽?biāo)點(diǎn)擊的時(shí)候是一直處于a:hover狀態(tài)啥酱,會(huì)覆蓋掉a:active的樣式。所以應(yīng)該排在a:active前面厨诸,使得a:active為最后的樣式镶殷。

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

#header{}/*id 為 header 元素*/
.header{}/*有 header 類的所有元素*/
.header .logo{}/*有 header 類的所有元素的后代中有 logo類的所有元素*/
.header.mobile{}/*同時(shí)有 header 類和 mobile 類的所有元素*/
.header p, .header h3{}/* header 類的下面的所有元素p標(biāo)簽和h3標(biāo)簽元素*/
#header .nav>li{}/*id 為 header 的元素下面有 nav 類的后代元素的直接 li 子元素*/
#header a:hover{}/*id 為 header 的元素的a子元素中,處于鼠標(biāo)懸停狀態(tài)的鏈接*/
#header .logo~p{}/*id為header下所有class為log的元素之后的同級(jí)p元素微酬。*/
#header input[type="text"]{}/*id 為 header 的元素的 input 子元素中type屬性值為 text 的元素*/

列出你知道的偽類選擇器

選擇器 含義
E:first-child 匹配作為長(zhǎng)子(第一個(gè)子女)的元素E(只要E元素是它的父級(jí)的第一個(gè)子元素绘趋,就選中。它需要同時(shí)滿足兩個(gè)條件颗管,一個(gè)是“第一個(gè)子元素”陷遮,另一個(gè)是“這個(gè)子元素剛好是E”。)
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)

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

div:first-child 表示div的父元素的第一個(gè)子元素是div怖喻。(第一個(gè)必須為div),如:

<form>
    <div>hello</div>//選中
</form>
<form>
    <p>hel</p>
    <div>hello</div>//不選中
</form>

div:first-of-type表示選擇器匹配屬于其父元素的div的首個(gè)子元素的每個(gè)元素岁诉。等同于:nth-of-type(1)锚沸,如:

<form>
    <p>hel</p>
    <div>hello</div>//選中
</form>
<form>
    <div>hello</div>//選中
</form>

div :first-child表示的是在div的標(biāo)簽下的第一個(gè)子元素,如:

<form>
    <div>
        <p>dasd</p>/*選中*/
        <h2>dad</h2>/*不選中涕癣,因?yàn)椴皇堑谝粋€(gè)子元素*/
        <p>dada</p>/*不選中哗蜈,因?yàn)椴皇堑谝粋€(gè)子元素*/
    </div>
</form>

而div :first-of-type表示的是在div元素中第一次出現(xiàn)的各類標(biāo)簽元素,如

<form>
    <div>
        <p>dasd</p>/*選中*/
        <h2>dad</h2>/*選中*/
        <p>dada</p>/*不選中,因?yàn)檫@個(gè)標(biāo)簽出現(xiàn)第二次了*/
    </div>
</form>

運(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>

實(shí)現(xiàn)效果:


QQ圖片20180102002518.png

解析:因?yàn)閕tem1類的父元素div的第一個(gè)子元素是p元素,所以aa的字體為紅色只搁,又因?yàn)閕tem1類的父元素div的第一個(gè)出現(xiàn)的各類標(biāo)簽有第一個(gè)p和第二個(gè)h3音比,第三個(gè)h3是第二次出現(xiàn),所以第一個(gè)和第一個(gè)item的背景顏色是藍(lán)色

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氢惋,一起剝皮案震驚了整個(gè)濱河市洞翩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焰望,老刑警劉巖骚亿,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異熊赖,居然都是意外死亡来屠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門震鹉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)俱笛,“玉大人,你說(shuō)我怎么就攤上這事传趾∮ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵墨缘,是天一觀的道長(zhǎng)星虹。 經(jīng)常有香客問(wèn)我,道長(zhǎng)镊讼,這世上最難降的妖魔是什么宽涌? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蝶棋,結(jié)果婚禮上卸亮,老公的妹妹穿的比我還像新娘。我一直安慰自己玩裙,他們只是感情好兼贸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布段直。 她就那樣靜靜地躺著,像睡著了一般溶诞。 火紅的嫁衣襯著肌膚如雪鸯檬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天螺垢,我揣著相機(jī)與錄音喧务,去河邊找鬼。 笑死枉圃,一個(gè)胖子當(dāng)著我的面吹牛功茴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播孽亲,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼坎穿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了返劲?” 一聲冷哼從身側(cè)響起玲昧,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎旭等,沒(méi)想到半個(gè)月后酌呆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衡载,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搔耕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痰娱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弃榨。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梨睁,靈堂內(nèi)的尸體忽然破棺而出鲸睛,到底是詐尸還是另有隱情,我是刑警寧澤坡贺,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布官辈,位于F島的核電站,受9級(jí)特大地震影響遍坟,放射性物質(zhì)發(fā)生泄漏拳亿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一愿伴、第九天 我趴在偏房一處隱蔽的房頂上張望肺魁。 院中可真熱鬧,春花似錦隔节、人聲如沸鹅经。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瘾晃。三九已至贷痪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹦误,已是汗流浹背呢诬。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胖缤,地道東北人尚镰。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像哪廓,于是被迫代替她去往敵國(guó)和親狗唉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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

  • 其實(shí)平時(shí)用得多的選擇器無(wú)非也就是那么幾個(gè)涡真,時(shí)間久了分俯,許多不常用的選擇器就慢慢忘記了。為了不讓自己忘記這些選擇器哆料,今...
    盛夏晚清風(fēng)閱讀 1,837評(píng)論 0 5
  • 1. class 和 id 的使用場(chǎng)景: id:id選擇器缸剪,使用#name定義(name為id名,可任意取名)东亦,使...
    石林濤閱讀 373評(píng)論 0 1
  • 1 .class 和 id 的使用場(chǎng)景? .class杏节,類選擇器。類選擇器可以定義多個(gè)元素典阵。當(dāng)你想定義一組元素以相...
    饑人谷_邵征鵬閱讀 366評(píng)論 0 0
  • 一.class 和 id 的使用場(chǎng)景? name:指定標(biāo)簽的名稱應(yīng)用場(chǎng)景:①form表單:name可作為傳遞給服務(wù)...
    Sunset125閱讀 959評(píng)論 0 0
  • ?互聯(lián)網(wǎng)書籍:10本+并且做筆記 ?理順山東大學(xué)就業(yè)官網(wǎng)Sep-招聘信息 ?讀《額爾古納河右岸》奋渔、《一個(gè)人的朝圣》...
    灰鴿不灰閱讀 294評(píng)論 0 0