溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

最常用的css選擇器及兼容性 +幾個(gè)好用卻不多見的 nth-child等

發(fā)布時(shí)間:2020-07-06 00:54:08 來(lái)源:網(wǎng)絡(luò) 閱讀:780 作者:莫問(wèn)初心 欄目:編程語(yǔ)言


最常用的css選擇器及兼容性 +幾個(gè)好用卻不多見的 nth-child等

你也許已經(jīng)掌握了id、class、后臺(tái)選擇器這些基本的css選擇器。但這遠(yuǎn)遠(yuǎn)不是css的全部。下面向大家系統(tǒng)的解析css中30個(gè)最常用的選擇器,包括我們最頭痛的瀏覽器兼容性問(wèn)題。掌握了它們,才能真正領(lǐng)略css的巨大靈活性。

1. *

* {     margin: 0;     padding: 0;    } 
星狀選擇符會(huì)在頁(yè)面上的每一個(gè)元素上起作用。web設(shè)計(jì)者經(jīng)常用它將頁(yè)面中所有元素的margin和padding設(shè)置為0。*選擇符也可以在子選擇器中使用。
#container * {      border: 1px solid black;    } 
上面的代碼中會(huì)應(yīng)用于id為container元素的所有子元素中。除非必要,我不建議在頁(yè)面中過(guò)的的使用星狀選擇符,因?yàn)樗淖饔糜蛱?,相?dāng)耗瀏覽器資源。兼容瀏覽器:IE6+、Firefox、Chrome、Safari、Opera

2. #X

#container {       width: 960px;       margin: auto;    } 
井號(hào)作用域有相應(yīng)id的元素。id是我們最常用的css選擇器之一。id選擇器的優(yōu)勢(shì)是精準(zhǔn),高優(yōu)先級(jí)(優(yōu)先級(jí)基數(shù)為100,遠(yuǎn)高于class的10),作為javascript腳本鉤子的不二選擇,同樣缺點(diǎn)也很明顯優(yōu)先級(jí)過(guò)高,重用性差,所以在使用id選擇器前,我們最好問(wèn)下自己,真的到了非用id選擇器的地步?兼容瀏覽器:IE6+、Firefox、Chrome、Safari、Opera

3. .X

.error {      color: red;    }  
這是一個(gè)class(類)選擇器。class選擇器與id選擇器的不同是class選擇器能作用于期望樣式化的一組元素。兼容瀏覽器:IE6+、Firefox、Chrome、Safari、Opera

4. X Y

li a {      text-decoration: none;    }  
這也是我們最常用的一種選擇器——后代選擇器。用于選取X元素下子元素Y,要留意的點(diǎn)是,這種方式的選擇器將選取其下所有匹配的子元素,無(wú)視層級(jí),所以有的情況是不宜使用的,比如上述的代碼去掉li下的所有a的下劃線,但li里面還有個(gè)ul,我不希望ul下的li的a去掉下劃線。使用此后代選擇器的時(shí)候要考慮是否希望某樣式對(duì)所有子孫元素都起作用。這種后代選擇器還有個(gè)作用,就是創(chuàng)建類似命名空間的作用。比如上述代碼樣式的作用域明顯為li。 兼容瀏覽器:IE6+、Firefox、Chrome、Safari、Opera

5. X

a { color: red; }   ul { margin-left: 0; }  
標(biāo)簽選擇器。使用標(biāo)簽選擇器作用于作用域范圍內(nèi)的所有對(duì)應(yīng)標(biāo)簽。優(yōu)先級(jí)僅僅比*高。兼容瀏覽器:IE6+、Firefox、Chrome、Safari、Opera

6. X:visited和X:link

a:link { color: red; }    a:visted { color: purple; }  
使用:link偽類作用于未點(diǎn)擊過(guò)的鏈接標(biāo)簽。:hover偽類作用于點(diǎn)擊過(guò)的鏈接。兼容瀏覽器:IE7+、Firefox、Chrome、Safari、Opera

7. X+Y

ul + p {       color: red;    }  
相鄰選擇器,上述代碼中就會(huì)匹配在ul后面的第一個(gè)p,將段落內(nèi)的文字顏色設(shè)置為紅色。(只匹配第一個(gè)元素)兼容瀏覽器:IE7+、Firefox、Chrome、Safari、Opera

8. X>Y

div#container > ul {      border: 1px solid black;    }   <div id="container">       <ul>          <li> List Item            <ul>               <li> Child </li>            </ul>          </li>          <li> List Item </li>          <li> List Item </li>          <li> List Item </li>       </ul>  </div> 
子選擇器。與后代選擇器X Y不同的是,子選擇器只對(duì)X下的直接子級(jí)Y起作用。在上面的css和html例子中,div#container>ul僅對(duì)container中最近一級(jí)的ul起作用。從理論上來(lái)講X > Y是值得提倡選擇器,可惜IE6不支持。兼容瀏覽器:IE7+、Firefox、Chrome、Safari、Opera

9. X ~ Y

ul ~ p {       color: red;    } 
相鄰選擇器,與前面提到的X+Y不同的是,X~Y匹配與X相同級(jí)別的所有Y元素,而X+Y只匹配第一個(gè)。兼容瀏覽器:IE7+、Firefox、Chrome、Safari、Opera

10. X[title]

a[title] {       color: green;    }  

屬性選擇器。比如上述代碼匹配的是帶有title屬性的鏈接元素。

兼容瀏覽器:IE7+、Firefox、Chrome、Safari、Opera

11. X[title="foo"]

a[href="http://css9.net"] {      color: #1f6053;  }  

屬性選擇器。 上面的代碼匹配所有擁有href屬性,且href為http://css9.net的所有鏈接。

這個(gè)功能很好,但是多少又有些局限。如果我們希望匹配href包含css9.net的所有鏈接該怎么做呢?看下一個(gè)選擇器。兼容瀏覽器:IE7+、Firefox、Chrome、Safari、Opera

12. X[title*="css9.net"]

a[href*="css9.net"] {      color: #1f6053;    } 

屬性選擇器。正如我們想要的,上面代碼匹配的是href中包含"css9.net"的所有鏈接。

兼容瀏覽器:IE7+、Firefox、Chrome、Safari、Opera

13. X[href^="http"]

a[href^="http"] {       background: url(path/to/external/icon.png) no-repeat;       padding-left: 10px;    }  

屬性選擇器。上面代碼匹配的是href中所有以http開頭的鏈接。兼容瀏覽器:IE7+、Firefox、Chrome、Safari、Opera

13. X[href$=".jpg"]

a[href^="http"] {       background: url(path/to/external/icon.png) no-repeat;       padding-left: 10px;    }  

屬性選擇器。在屬性選擇器中使用$,用于匹配結(jié)尾為特定字符串的元素。在上面代碼中匹配的是所有鏈接到擴(kuò)展名為.jpg圖片的鏈接。(注意,這里僅僅是.jpg圖片,如果要作用于所有圖片鏈接該怎么做呢,看下一個(gè)選擇器。)

兼容瀏覽器:IE7+、Firefox、Chrome、Safari、Opera

14. X[data-*="foo"]

在上一個(gè)選擇器中提到如何匹配所有圖片鏈接。如果使用X[href$=".jpg"]實(shí)現(xiàn),需要這樣做:

a[href$=".jpg"], a[href$=".jpeg"], a[href$=".png"], a[href$=".gif"] {      color: red;   }  

看上去比較麻煩。另一個(gè)解決辦法是為所有的圖片鏈接加一個(gè)特定的屬性,例如‘data-file’

html代碼

<a href="path/to/image.jpg" data-filetype="image"> 圖片鏈接 </a>  

css代碼如下:

a[data-filetype="image"] {       color: red;    }  

這樣所有鏈接到圖片的鏈接字體顏色為紅色。

兼容瀏覽器:IE7+、Firefox、Chrome、Safari、Opera

15. X[foo~="bar"]

屬性選擇器。屬性選擇器中的波浪線符號(hào)可以讓我們匹配屬性值中用空格分隔的多個(gè)值中的一個(gè)。看下面例子:

html代碼

<a href="path/to/image.jpg" data-info="external image"> Click Me, Fool </a>  

css代碼

a[data-info~="external"] {       color: red;    } a[data-info~="image"] {       border: 1px solid black;    }  

在上面例子中,匹配data-info屬性中包含“external”鏈接的字體顏色為紅色。匹配data-info屬性中包含“image”的鏈接設(shè)置黑色邊框。

兼容瀏覽器:IE7+、Firefox、Chrome、Safari、Opera

17. X:checked

checked偽類用來(lái)匹配處于選定狀態(tài)的界面元素,如radio、checkbox。

input[type=radio]:checked {       border: 1px solid black;    }  

上面代碼中匹配的是所有處于選定狀態(tài)的單選radio,設(shè)置1px的黑色邊框。

兼容瀏覽器:IE9+、Firefox、Chrome、Safari、Opera

18. X:after和X:before

這兩個(gè)偽類與content結(jié)合用于在元素的前面或者后面追加內(nèi)容,看一個(gè)簡(jiǎn)單的例子:

h2:after {content:url(/i/logo.gif)}  

上面的代碼實(shí)現(xiàn)了在h2標(biāo)題的后面顯示一張圖片。

我們也經(jīng)常用它來(lái)實(shí)現(xiàn)清除浮動(dòng),寫法如下:

.clearfix:after {        content: "";        display: block;        clear: both;        visibility: hidden;        font-size: 0;        height: 0;        }        .clearfix {       *display: inline-block;       _height: 1%;    } 

19. X:hover

div:hover {      background: #e3e3e3;    }  

:hover偽類設(shè)定當(dāng)鼠標(biāo)劃過(guò)時(shí)元素的樣式。上面代碼中設(shè)定了div劃過(guò)時(shí)的背景色。

需要注意的是,在ie 6中,:hover只能用于鏈接元素。

這里分享一個(gè)經(jīng)驗(yàn),在設(shè)定鏈接劃過(guò)時(shí)出現(xiàn)下滑線時(shí),使用border-bottom會(huì)比text-decoration顯得更漂亮些。代碼如下:

a:hover {     border-bottom: 1px solid black;    }  

兼容瀏覽器:IE6+、Firefox、Chrome、Safari、Opera

20. X:not(selector)

div:not(#container) {       color: blue;    }  

否定偽類選擇器用來(lái)在匹配元素時(shí)排除某些元素。在上面的例子中,設(shè)定除了id為container的div元素字體顏色為blue。

兼容瀏覽器:IE9+、Firefox、Chrome、Safari、Opera

21. X::pseudoElement

::偽類用于給元素片段添加樣式。比如一個(gè)段落的第一個(gè)字母或者第一行。需要注意的是,這個(gè)::偽類只能用于塊狀元素。

下面的代碼設(shè)定了段落中第一個(gè)字母的樣式:

p::first-letter {       float: left;       font-size: 2em;       font-weight: bold;       font-family: cursive;       padding-right: 2px;    }  

下面的代碼中設(shè)定了段落中第一行的樣式:

p::first-line {       font-weight: bold;       font-size: 1.2em;    }  

兼容瀏覽器:IE6+、Firefox、Chrome、Safari、Opera

(IE6竟然支持,有些意外啊。)

22. X:nth-child(n)

li:nth-child(3) {       color: red;    }  

這個(gè)偽類用于設(shè)定一個(gè)序列元素(比如li、tr)中的第n個(gè)元素(從1開始算起)的樣式。在上面例子中,設(shè)定第三個(gè)列表元素li的字體顏色為紅色。

看一個(gè)更靈活的用法,在下面例子中設(shè)定第偶數(shù)個(gè)元素的樣式,可以用它來(lái)實(shí)現(xiàn)隔行換色:

tr:nth-child(2n) {       background-color: gray;    }  

兼容瀏覽器:IE9+、Firefox、Chrome、Safari

23. X:nth-last-child(n)

li:nth-last-child(2) {       color: red;    }  

與X:nth-child(n)功能類似,不同的是它從一個(gè)序列的最后一個(gè)元素開始算起。上面例子中設(shè)定倒數(shù)第二個(gè)列表元素的字體顏色。

兼容瀏覽器:IE9+、Firefox、Chrome、Safari、Opera

24. X:nth-of-type(n)

ul:nth-of-type(3) {       border: 1px solid black;    }  

與X:nth-child(n)功能類似,不同的是它匹配的不是某個(gè)序列元素,而是元素類型。例如上面的代碼設(shè)置頁(yè)面中出現(xiàn)的第三個(gè)無(wú)序列表ul的邊框。

兼容瀏覽器:IE9+、Firefox、Chrome、Safari

25. X:nth-last-of-type(n)

ul:nth-last-of-type(3) { border: 1px solid black; }

與X:nth-of-type(n)功能類似,不同的是它從元素最后一次出現(xiàn)開始算起。上面例子中設(shè)定倒數(shù)第三個(gè)無(wú)序列表的邊框

兼容瀏覽器:IE9+、Firefox、Chrome、Safari、Opera

26. X:first-child

:first-child偽類用于匹配一個(gè)序列的第一個(gè)元素。我們經(jīng)常用它來(lái)實(shí)現(xiàn)一個(gè)序列的第一個(gè)元素或最后一個(gè)元素的上(下)邊框,如:

ul:nth-last-of-type(3) {       border: 1px solid black;    }  

兼容瀏覽器:IE7+、Firefox、Chrome、Safari、Opera

27. X:last-child

ul > li:last-child {       border-bottom:none;   } 

與:first-child類似,它匹配的是序列中的最后一個(gè)元素。

兼容瀏覽器:IE9+、Firefox、Chrome、Safari、Opera

28. X:only-child

div p:only-child {       color: red;    } 

這個(gè)偽類用的比較少。在上面例子中匹配的是div下有且僅有一個(gè)的p,也就是說(shuō),如果div內(nèi)有多個(gè)p,將不匹配。

<div><p> My paragraph here. </p></div>  <div>       <p> Two paragraphs total. </p>       <p> Two paragraphs total. </p> </div> 

在上面代碼中第一個(gè)div中的段落p將會(huì)被匹配,而第二個(gè)div中的p則不會(huì)。

兼容瀏覽器:IE9+、Firefox、Chrome、Safari、Opera

29. X:only-of-type

li:only-of-type {       font-weight: bold;    }  

這個(gè)偽類匹配的是,在它上級(jí)容器下只有它一個(gè)子元素,它沒有鄰居元素。例如上面代碼匹配僅有一個(gè)列表項(xiàng)的列表元素。

兼容瀏覽器:IE9+、Firefox、Chrome、Safari、Opera

30. X:first-of-type

:first-of-type偽類與:nth-of-type(1)效果相同,匹配出現(xiàn)的第一個(gè)元素。我們來(lái)看個(gè)例子:

<div>       <p> My paragraph here. </p>       <ul>          <li> List Item 1 </li>          <li> List Item 2 </li>       </ul>       <ul>          <li> List Item 3 </li>          <li> List Item 4 </li>       </ul>  </div> 

在上面的html代碼中,如果我們希望僅匹配List Item 2列表項(xiàng)該如何做呢:

方案一:

ul:first-of-type > li:nth-child(2) {       font-weight: bold;    }  

方案二:

p + ul li:last-child {       font-weight: bold;    }  

方案三:

ul:first-of-type li:nth-last-child(1) {       font-weight: bold;    }  

兼容瀏覽器:IE9+、Firefox、Chrome、Safari、Opera。

總結(jié):

如果你正在使用老版本的瀏覽器,如IE 6,在使用上面css選擇器時(shí)一定要注意它是否兼容。不過(guò),這不應(yīng)成為阻止我們學(xué)習(xí)使用它的理由。在設(shè)計(jì)時(shí),你可以參考瀏覽器兼容性列表,也可以通過(guò)腳本手段讓老版本的瀏覽器也支持它們。

另一點(diǎn),我們?cè)谑褂胘avascript類庫(kù)的選擇器時(shí),例如jquery,要盡可能的使用這些原生的css3選擇器,因?yàn)轭悗?kù)的選擇器引擎會(huì)通過(guò)瀏覽器內(nèi)置解析它們,這樣會(huì)獲得更快的速度。

原文:http://net.tutsplus.com/tutorials/html-css-techniques/the-30-css-selectors-you-must-memorize/

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI