關(guān)于CSS選擇器的一些知識

1、class和id的使用場景分別是什么?

首先,一個HTML文件中class名字可以有多個相同的,但是id的名字是唯一的;其次,如果是寫css樣式,那么id選擇器的優(yōu)先級高于class選擇器(就簡單選擇器來說,只單純考慮單一樣式書寫,不包括復(fù)雜選擇器情況下)。

2、CSS選擇器常見的有幾種?

1. 基礎(chǔ)選擇器
  • class選擇器
  • id選擇器
  • 通用元素選擇器(通配符選擇器)“*”;
  • element選擇器
2. 組合選擇器
  • one,two —— 多元素選擇器。兩個元素或兩個class或兩個id選擇器,同時匹配one和two,中間用“,”分隔
  • one two —— 后代選擇器。one下的two;two是one的子元素(匹配所有子元素),中間用空格分隔
  • one>two —— 直接子元素選擇器。匹配one的直接子元素two(可能會有多個),中間用“>”來分隔。
  • one~two —— 普通相鄰選擇器。匹配one之后的同級元素two(鄰居但是不管是否直接相鄰),中間用“+”分隔。
  • one+two ——直接相鄰子元素。匹配one后的直接同級元素two,中間用“+”來分隔。
  • .class1.class2 —— 選擇出某個元素既含有class1,也含有class2。中間沒有分隔符。
  • element#my —— 選擇出某個元素,而且id是my的元素。中間沒有分隔符。
3. 偽類選擇器
  • one:link —— 匹配所有未被點擊的鏈接

  • one:visited —— 匹配所有已經(jīng)點擊過的鏈接

  • one:active ——匹配所有點擊時的鏈接

  • one:hover —— 匹配所有鼠標懸停其上的鏈接

  • one:focus —— 匹配所有已經(jīng)獲取焦點的元素one

  • one:first-child —— 匹配作為第一個子元素的one

  • one:last-child —— 匹配作為最后一個子元素的one

  • one:enabled —— 匹配表單中可用的元素

  • one:disabled —— 匹配表單中不可用的元素

  • one:checked —— 匹配表單中的選中的radio或checkbox元素。

  • one:lang() —— 匹配lang屬性等于c的one元素

  • one::selection —— 匹配one中已被選擇的部分

  • one:root —— 匹配文檔的根元素,對于HTML文檔來說,根元素即為HTML標簽

  • one:nth-child(n) —— 匹配作為第n個子元素的one

  • one:nth-of-type(num) —— 匹配使用同種標簽的第num個元素one(其他同nth-child(n))

  • one:first-of-type —— 匹配第一個使用同種標簽的元素one,等于one:nth-of-type(1)

  • one:last-of-type —— 匹配最后一個使用同種標簽的元素one

  • one:only-child —— 匹配父元素下僅有的一個子元素

  • one:only-of-type —— 匹配父元素下使用同種標簽的唯一一個子元素,等同于::first-of-type:last-of-type或:nth-of-type(1):nth-last-child(1)

  • one:empty —— 匹配一個不包換任何子元素的元素(文本節(jié)點也是子元素)

  • one:not(selector) —— 匹配不符合當前選擇器的任何元素

4. 偽元素選擇器
  • one::after —— 在one元素之后插入生成的內(nèi)容
  • one::before —— 在one元素之前插入生成的內(nèi)容
  • one::first-letter —— 匹配one元素的第一個字符
  • one::first-line —— 匹配one元素的第一行
5. 屬性選擇器
  • one[attr] —— 匹配所有有attr屬性的元素。同理,span[id]就可以獲取到所有帶有id屬性的元素
  • one[attr=value] —— 匹配所有attr值為value的元素,如,input[type="text"]就可以匹配到所有type是text的input元素。
  • one[attr~=value] —— 匹配所有屬性attr具有多個空格分隔,其中一個值等于value的元素
  • one[attr^=value] —— 匹配所有attr屬性的值為value開頭的元素
  • one[attr$=value] —— 匹配所有attr屬性的值為value結(jié)尾的元素
  • one[attr*=value] —— 匹配所有attr屬性的值含有value的元素

3、選擇器的優(yōu)先級是怎么樣的?對于復(fù)雜場景怎樣計算優(yōu)先級?

優(yōu)先級順序
  1. 在屬性后使用!important會使此屬性擁有最高級別的優(yōu)先級,換句話說,可以認為這個屬性會覆蓋其他所有影響此樣式的重寫樣式。
  2. 寫在html文件中的,某個元素的style屬性,即為行內(nèi)樣式。
  3. id選擇器
  4. class選擇器
  5. 偽類選擇器
  6. 屬性選擇器
    7.標簽選擇器
    8.通配符選擇器
  7. 瀏覽器自定義

除此之外,有一個需要注意的:
針對同一個元素的樣式,如果寫多遍,那么寫在后面的會覆蓋前面的,比如:

div{ color: #f00; }
div{ color: #blue; }

那么這時,div的color屬性值其實是藍色的。

復(fù)雜場景的計算

我們可以定義一個優(yōu)先級的規(guī)則:

  • 行內(nèi)樣式:<p style="color: #f00"></p> —— a
  • id選擇器: —— b
  • class,屬性選擇器和偽類選擇器 —— c
  • 標簽選擇器,偽元素 —— d
    舉例說明:
.discount-compile .dc-cont>label input[type="checkbox"]:checked+span{position:absolute; top:.3rem; z-index:9; background:url(../img/radio.png) no-repeat center center; width:.8rem; height:.8rem; background-size: cover; left:.5rem;}

這里面有兩個標簽選擇器(label,span),兩個類選擇器(.discount-compile ,.dc-cont),一個屬性選擇器(input[type="checkbox"]),一個偽類選擇器(:checked)
可以得到:a=0;b=0;c=4;d=2

#discount-compile input[type="checkbox"]:checked+span{position:absolute; top:.3rem; z-index:9; background:url(../img/radio.png) no-repeat center center; width:.8rem; height:.8rem; background-size: cover; left:.5rem;}

這里面有一個id選擇器(#discount-compile),一個標簽選擇器(span),一個屬性選擇器(input[type="checkbox"]),一個偽類選擇器(:checked)
可以得到:a=0;b=1;c=2;d=1

看得時候abcd是層層遞進的,a的數(shù)字一樣就比較b的數(shù)字,以此類推。
那么,第二種的優(yōu)先級比第一種高,

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

這四個的順序分別是:
a:link
a:visited
a:hover
a:active
原因是如果順序錯亂會導(dǎo)致某些樣式不能夠顯示,例如將a:visited寫在第一位,那么a:link就不再起作用,無論這個鏈接是否被訪問過;例如將a:visited寫在第三位,那么a:link和a:hover都不再起作用,因為a:visited已經(jīng)將這兩個樣式都覆蓋;例如將a:visited寫在第四位,那么a:link和a:hover和a:active都不在起作用,因為a:visited已經(jīng)將所有樣式都覆蓋。這個的順序決定了頁面上的a標簽的展現(xiàn)行為,不能出錯。

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

#header{} —— 匹配id值為header的元素
.header{} —— 匹配class值為header的元素
.header .logo{} —— 匹配class為header的元素下所有的class值為logo的子元素
.header.mobile{} —— 匹配class值中既含有header又含有mobile的元素
.header p, .header h3{} —— 同時匹配class值為header的標簽為p的子元素和header下的標簽是h3的子元素
#header .nav>li{} —— 匹配id值為header中class值為nav的子元素的標簽為li的直接子元素
#header a:hover{} —— 匹配id值為header中所有的的a標簽,設(shè)置其鼠標懸停時的樣式
#header .logo~p{} —— 匹配id值為header中所有的class值為logo的元素的其后所有的p標簽
#header input[type="text"]{} —— 匹配id值為header中所有的標簽為input中的type屬性是text的元素

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

  • one:link —— 匹配所有未被點擊的鏈接

  • one:visited —— 匹配所有已經(jīng)點擊過的鏈接

  • one:active ——匹配所有點擊時的鏈接

  • one:hover —— 匹配所有鼠標懸停其上的鏈接

  • one:focus —— 匹配所有已經(jīng)獲取焦點的元素one

  • one:first-child —— 匹配作為第一個子元素的one

  • one:last-child —— 匹配作為最后一個子元素的one

  • one:enabled —— 匹配表單中可用的元素

  • one:disabled —— 匹配表單中不可用的元素

  • one:checked —— 匹配表單中的選中的radio或checkbox元素。

  • one:lang() —— 匹配lang屬性等于c的one元素

  • one::selection —— 匹配one中已被選擇的部分

  • one:root —— 匹配文檔的根元素,對于HTML文檔來說,根元素即為HTML標簽

  • one:nth-child(n) —— 匹配作為第n個子元素的one

  • one:nth-of-type(num) —— 匹配使用同種標簽的第num個元素one(其他同nth-child(n))

  • one:first-of-type —— 匹配第一個使用同種標簽的元素one,等于one:nth-of-type(1)

  • one:last-of-type —— 匹配最后一個使用同種標簽的元素one

  • one:only-child —— 匹配父元素下僅有的一個子元素

  • one:only-of-type —— 匹配父元素下使用同種標簽的唯一一個子元素,等同于::first-of-type:last-of-type或:nth-of-type(1):nth-last-child(1)

  • one:empty —— 匹配一個不包換任何子元素的元素(文本節(jié)點也是子元素)

  • one:not(selector) —— 匹配不符合當前選擇器的任何元素

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

  • div:first-child —— 是div作為子元素的情況,匹配div作為第一個子元素的情況
  • div:first-of-type —— 是div作為子元素的情況,匹配div作為第一個子元素的情況
  • div :first-child —— 是div作為父元素的情況,匹配div的子元素中的第一個元素(沒有指定類型那么則為第一個元素)
  • div :first-of-type —— 是div作為父元素的情況,匹配div的子元素中的所有類型的標簽的每一個的第1個元素(比較繞口)舉個例子說明:
<style>
    div :nth-of-type(2){background:#f00;}
</style>
<div>
    <p>我是第一個p</p>
    <article>我是第一個article</article>
    <h5>我是第一個h5</h5>
    <p>我是第二個p</p>
    <article>我是第二個article</article>
    <p>我是第三個p</p>
    <article>我是第三個article</article>
    <h5>我是第二個h5</h5>
</div>

結(jié)果是“我是第二個p”,“我是第二個article”,“我是第二個h5”的背景顏色都會變成紅色。

8、運行以下代碼并解釋輸出樣式的原因

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

運行結(jié)果如圖:

微信圖片_20170515132228.png

我們來分析一下:
首先看一下style中的內(nèi)容:.item1:first-child{color: red;}意思是class為item1的元素作為第一個子元素(此處不管是什么類型的標簽,瀏覽器不做判斷,就是我們能看到的第一個),我的顏色是紅色,得到第一行的aa字體顏色是紅色;第二句.item1:first-of-type{background: blue;}意思是class為item1的元素作為子元素的情況,我們可以看到,div中包著三個標簽,一個p標簽,兩個h3標簽。那么.item1:first-of-type事實上取的是每一個不同標簽的第一個元素,即第一個p標簽和第一個h3標簽。所以,aa和bb的背景色都變?yōu)樗{色,黑色的字是瀏覽器默認給的顏色。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

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

  • 1.class 和 id 的使用場景? 類選擇器允許以一種獨立于文檔元素的方式來指定樣式。該選擇器可以單獨使用,也...
    草鞋弟閱讀 2,440評論 0 1
  • 1.class 和 id 的使用場景? 兩者都能選取DOM節(jié)點并給DOM節(jié)點添加樣式,但是W3C標準里規(guī)定頁面中只...
    饑人谷_米彌輪閱讀 408評論 0 1
  • 1.class 和 id 的使用場景? class:類選擇器,一個標簽可以有多個類且同一個類可以用到不同的標簽上,...
    饑人谷_兔子君閱讀 1,205評論 0 0
  • class 和 id 的使用場景? 每個標簽只能設(shè)置一個id,此id在頁面中只能出現(xiàn)一次。id多用于頁面分塊時塊級...
    cross_王閱讀 445評論 0 0
  • class和id的使用場景? class為一類的元素命名,所有有共同特性的元素都可以用同一class進行分類;id...
    LeeoZz閱讀 393評論 0 0