開篇
有30個CSS選擇器你必須爛熟于心,它們适應于當今各大主流浏覽器。
1. *
*
* {
margin: ;
padding: ;
}
*
選擇器選擇的是每一個單一進制素。很多程式員用上面的CSS将所有元素的margin和padding清零。雖然這是有效的,但最好還是别這麼做,這會使得浏覽器的負擔很重。
*
選擇器也可以用在孩子選擇器中。
#container * {
border: px solid black;
}
這會使
#container
所有孩子都有border,但還是那句話,如果不是必須得這麼做,還是别用星選擇器。
view demo
Compatibility
- IE6+
- Firefox
- Chrome
- Safari
- Opera
2. #x
#x
#container {
width: px;
margin: auto;
}
id選擇器的優先級很高,是以在用之前問問自己:
我僅僅是為了找到這個元素而去給他加id的嗎?
view demo
Compatibility
- IE6+
- Firefox
- Chrome
- Safari
- Opera
3. .x
.x
.error {
color: red;
}
class選擇器和id選擇器不同,首先優先級沒有id高,再者id選擇器隻能選擇一個,而class選擇器則可以篩選出來一組。
view demo
Compatibility
- IE6+
- Firefox
- Chrome
- Safari
- Opera
4. x y
x y
li a {
text-decoration: none;
}
當不是選擇所有後代時,後代選擇器将會非常有用,但有一點得注意:
如果你的選擇器是x y z a b.error, 那你就用錯了。你得問問自己是否需要應用每一層?
view demo
Compatibility
- IE6+
- Firefox
- Chrome
- Safari
- Opera
5. x
x
a { color: red; }
ul { margin-left: ; }
如果想選擇同一類元素,那就不要用id或class了,直接用元素選擇器。
view demo
Compatibility
- IE6+
- Firefox
- Chrome
- Safari
- Opera
6. x:visted and x:link
x:visted and x:link
a:link { color: red; }
a:visted { color: purple; }
我們常常用僞類:link篩選a标簽是還未被點選;而用:visited去篩選哪些别點選過了。
view demo
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
7. x + y
x + y
ul + p {
color: red;
}
相鄰選擇器會選擇第一個相鄰的元素,如上面的例子會讓ul後第一個段落的字型變為紅色(而ul與p之間是不能有其他元素的)。
view demo
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
8. x > y
x > y
div#container > ul {
border: px solid black;
}
這也是一種後代選擇器,但它與
x y
這種後代選擇器不同,它隻能選擇直系後代。如:
<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>
在這個例子中,
#cotainer > ul
隻會選擇第一個ul,而不會search到ul裡面那個包含li的ul。
view demo
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
9. x ~ y
x ~ y
ul ~ p {
color: red;
}
這種兄弟選擇器與
x + y
類似,但不同的是,後者隻能篩選第一個p,而這種卻可以滿足ul下所有的直系p标簽。
view demo
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
10. x[title]
x[title]
a[title] {
color: green;
}
屬性選擇器。這将選擇所有具有title屬性的a标簽。
view demo
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
11. x[href="foo" target="_blank" rel="external nofollow" ]
x[href="foo" target="_blank" rel="external nofollow" ]
a[href="http://net.tutsplus.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" ] {
color: #1f6053; /* nettuts green */
}
這個選擇器可以選擇連結為
href="http://net.tutsplus.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow"
的a标簽,可如果這個裡這個連結變了呢?,這未免有些嚴格,可以适當的用正規表達式去比對。
view demo
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
12. x[href*="nettuts"]
x[href*="nettuts"]
a[href*="tuts"] {
color: #1f6053; /* nettuts green */
}
‘*’号将比對href中含有nuttuts字元,如果想更加嚴格,還可以用
^
和
$
表示開始和結束。
view demo
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
13. x[href^="http"]
x[href^="http"]
a[href^="http"] {
background: url(path/to/external/icon.png) no-repeat;
padding-left: px;
}
這樣去篩選具有有效href的a将比對http://和https://.
view demo
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
14. x[href$=".jpg"]
x[href$=".jpg"]
a[href$=".jpg"] {
color: red;
}
這将會選擇連結為jpg格式的圖檔連結,可是如果圖檔類型為png或gif等怎麼辦?
view demo
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
15. x[data-*="foo"]
x[data-*="foo"]
a[data-filetype="image"] {
color: red;
}
按照規則
14.
我們可能得:
a[href$=".jpg"],
a[href$=".jpeg"],
a[href$=".png"],
a[href$=".gif"] {
color: red;
}
可這也太。。。
我們可以加一個屬性用以标示。
a[data-filetype="image"] {
color: red;
}
view demo
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
16. x[foo~="bar"]
x[foo~="bar"]
a[data-info~="external"] {
color: red;
}
a[data-info~="image"] {
border: px solid black;
}
~
将會讓我們比對到屬性值被空格分隔符分開的值,如:
view demo
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
17. x:checked
x:checked
input[type=radio]:checked {
border: px solid black;
}
這個常常對checkbox非常有用。
view demo
Compatibility
- IE9+
- Firefox
- Chrome
- Safari
- Opera
18. x:after
x:after
僞類
before
和
after
已經有了一些新的用法,比如最常見的:
.clearfix:after {
content: "";
display: block;
clear: both;
visibility: hidden;
font-size: ;
height: ;
}
.clearfix {
*display: inline-block;
_height: %;
}
沒錯,這就是預設标準clearfix的實作原理。
Compatibility
- IE8+
- Firefox
- Chrome
- Safari
- Opera
19. x:hover
x:hover
div:hover {
background: #e3e3e3;
}
但是得注意,
:hover
在早期IE中并不适用。
Compatibility
- IE6+(In IE6, :hover must be applied to an anchor element)
- Firefox
- Chrome
- Safari
- Opera
20. x:not(selector)
x:not(selector)
div:not(#container) {
color: blue;
}
反選選擇器。
view demo
Compatibility
- IE9+
- Firefox
- Chrome
- Safari
- Opera
21. x::pseudoElement
x::pseudoElement
p::first-line {
font-weight: bold;
font-size: em;
}
p::first-letter {
float: left;
font-size: em;
font-weight: bold;
font-family: cursive;
padding-right: px;
}
僞元素選擇器,注意盡量還是按标準來,多使用
::
而不是
:
。
view demo
Compatibility
- IE6+
- Firefox
- Chrome
- Safari
- Opera
22. x:nth-child(n)
x:nth-child(n)
li:nth-child(3) {
color: red;
}
選擇一組中特定的孩子。n表示第幾個,也可以是表達式,如2n+1,2n.
view demo
Compatibility
- IE9+
- Firefox 3.5+
- Chrome
- Safari
- Opera
23. x:nth-last-child(n)
x:nth-last-child(n)
li:nth-last-child(2) {
color: red;
}
如果li有400個,而你需要target到第397個,那用這個咱合适不過了。
view demo
Compatibility
- IE9+
- Firefox 3.5+
- Chrome
- Safari
- Opera
24. x:nth-of-type(n)
x:nth-of-type(n)
ul:nth-of-type(3) {
border: px solid black;
}
如果ul沒有id,而你又要找第三個ul,那個這種方式是不錯。
view demo
Compatibility
- IE9+
- Firefox 3.5+
- Chrome
- Safari
- Opera
25. x:nth-last-of-type(n)
x:nth-last-of-type(n)
ul:nth-last-of-type(3) {
border: px solid black;
}
與
ul:nth-of-type
剛好相反。
Compatibility
- IE9+
- Firefox 3.5+
- Chrome
- Safari
- Opera
26. x:first-child
x:first-child
ul li:first-child {
border-top: none;
}
view demo
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
27. x:last-child
x:last-child
Example
<ul>
<li> List Item </li>
<li> List Item </li>
<li> List Item </li>
</ul>
ul {
width: px;
background: #292929;
color: white;
list-style: none;
padding-left: ;
}
li {
padding: px;
border-bottom: px solid black;
border-top: px solid #3c3c3c;
}
view demo
但是我不想要第一個的上邊框和最後一個的下邊框,可以這麼做:
li:first-child {
border-top: none;
}
li:last-child {
border-bottom: none;
}
view demo
Compatibility
- IE9+
- Firefox
- Chrome
- Safari
- Opera
28. X:only-child
X:only-child
div p:only-child {
color: red;
}
這将比對div裡隻有一個p的元素。如:
<div><p> My paragraph here. </p></div>
<div>
<p> Two paragraphs total. </p>
<p> Two paragraphs total. </p>
</div>
view demo
Compatibility
- IE9+
- Firefox
- Chrome
- Safari
- Opera
29. X:only-of-type
X:only-of-type
li:only-of-type {
font-weight: bold;
}
這将比對元素内隻有一個li的元素,有時這個做法很簡便。比如要尋找隻有一個清單的ul,可以:
ul > li:only-of-type {
font-weight: bold;
}
view demo
Compatibility
- IE9+
- Firefox 3.5+
- Chrome
- Safari
- Opera
30. x:first-of-type
x:first-of-type
Example
<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>
如何尋找上面的 “List Item 2”呢?
辦法1
ul:first-of-type > li:nth-child(2) {
font-weight: bold;
}
辦法2
p + ul li:last-child {
font-weight: bold;
}
辦法3
ul:first-of-type li:nth-last-child(1) {
font-weight: bold;
}
view demo
Compatibility
- IE9+
- Firefox 3.5+
- Chrome
- Safari
- Opera
總結
上述選擇器在IE6中的使用要尤其小心,但是别因為這而影響你閱讀這篇文章。你可以參考一下浏覽器相容表,或者你可以用 Dean Edward’s excellent IE9.js script 為舊版浏覽器提供這些選擇器的支援。
另外,當你在使用一些Javascript庫時,如jQuery,請盡量的使用這些原生的CSS3選擇器,因為浏覽器選擇器引擎将會按照浏覽器的原生方式去解析,這将使得你的代碼更加高效。
注:此文為譯文
我的部落格請戳 | 原文請戳