开篇
有30个CSS选择器你必须烂熟于心,它们适应于当今各大主流浏览器。
1.*
- 1
- 2
- 3
- 4
*
选择器选择的是每一个单一元素。很多程序员用上面的CSS将所有元素的margin和padding清零。虽然这是有效的,但最好还是别这么做,这会使得浏览器的负担很重。
*
选择器也可以用在孩子选择器中。
- 1
- 2
- 3
这会使#container
所有孩子都有border,但还是那句话,如果不是必须得这么做,还是别用星选择器。
Compatibility
- IE6+
- Firefox
- Chrome
- Safari
- Opera
2.#x
- 1
- 2
- 3
- 4
id选择器的优先级很高,因此在用之前问问自己:我仅仅是为了找到这个元素而去给他加id的吗?
Compatibility
- IE6+
- Firefox
- Chrome
- Safari
- Opera
3..x
- 1
- 2
- 3
class选择器和id选择器不同,首先优先级没有id高,再者id选择器只能选择一个,而class选择器则可以筛选出来一组。
Compatibility
- IE6+
- Firefox
- Chrome
- Safari
- Opera
4.x y
- 1
- 2
- 3
当不是选择所有后代时,后代选择器将会非常有用,但有一点得注意:
如果你的选择器是x y z a b.error, 那你就用错了。你得问问自己是否需要应用每一层?
Compatibility
- IE6+
- Firefox
- Chrome
- Safari
- Opera
5.x
- 1
- 2
如果想选择同一类元素,那就不要用id或class了,直接用元素选择器。
Compatibility
- IE6+
- Firefox
- Chrome
- Safari
- Opera
6.x:visted and x:link
- 1
- 2
我们常常用伪类:link筛选a标签是还未被点击;而用:visited去筛选哪些别点击过了。
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
7.x + y
- 1
- 2
- 3
相邻选择器会选择第一个相邻的元素,如上面的例子会让ul后第一个段落的字体变为红色(而ul与p之间是不能有其他元素的)。
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
8.x > y
- 1
- 2
- 3
这也是一种后代选择器,但它与x y
这种后代选择器不同,它只能选择直系后代。如:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
在这个例子中,#cotainer > ul
只会选择第一个ul,而不会search到ul里面那个包含li的ul。
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
9.x ~ y
- 1
- 2
- 3
这种兄弟选择器与x + y
类似,但不同的是,后者只能筛选第一个p,而这种却可以满足ul下所有的直系p标签。
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
10.x[title]
- 1
- 2
- 3
属性选择器。这将选择所有具有title属性的a标签。
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
11.x[href="foo"]
- 1
- 2
- 3
这个选择器可以选择链接为href="http://net.tutsplus.com"
的a标签,可如果这个里这个链接变了呢?,这未免有些严格,可以适当的用正则表达式去匹配。
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
12.x[href*="nettuts"]
- 1
- 2
- 3
‘*’号将匹配href中含有nuttuts字符,如果想更加严格,还可以用^
和$
表示开始和结束。
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
13.x[href^="http"]
- 1
- 2
- 3
- 4
这样去筛选具有有效href的a将匹配http://和https://.
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
14.x[href$=".jpg"]
- 1
- 2
- 3
这将会选择链接为jpg格式的图片链接,可是如果图片类型为png或gif等怎么办?
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
15.x[data-*="foo"]
- 1
- 2
- 3
按照规则14.
我们可能得:
- 1
- 2
- 3
- 4
- 5
- 6
可这也太。。。
我们可以加一个属性用以标示。
- 1
- 1
- 2
- 3
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
16.x[foo~="bar"]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
~
将会让我们匹配到属性值被空格分隔符分开的值,如:
- 1
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
17.x:checked
- 1
- 2
- 3
这个常常对checkbox非常有用。
Compatibility
- IE9+
- Firefox
- Chrome
- Safari
- Opera
18.x:after
伪类before
和after
已经有了一些新的用法,比如最常见的:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
没错,这就是默认标准clearfix的实现原理。
Compatibility
- IE8+
- Firefox
- Chrome
- Safari
- Opera
19.x:hover
- 1
- 2
- 3
但是得注意,:hover
在早期IE中并不适用。
Compatibility
- IE6+(In IE6, :hover must be applied to an anchor element)
- Firefox
- Chrome
- Safari
- Opera
20.x:not(selector)
- 1
- 2
- 3
反选选择器。
Compatibility
- IE9+
- Firefox
- Chrome
- Safari
- Opera
21.x::pseudoElement
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
伪元素选择器,注意尽量还是按标准来,多使用::
而不是:
。
Compatibility
- IE6+
- Firefox
- Chrome
- Safari
- Opera
22.x:nth-child(n)
- 1
- 2
- 3
选择一组中特定的孩子。n表示第几个,也可以是表达式,如2n+1,2n.
Compatibility
- IE9+
- Firefox 3.5+
- Chrome
- Safari
- Opera
23.x:nth-last-child(n)
- 1
- 2
- 3
如果li有400个,而你需要target到第397个,那用这个咱合适不过了。
Compatibility
- IE9+
- Firefox 3.5+
- Chrome
- Safari
- Opera
24.x:nth-of-type(n)
- 1
- 2
- 3
如果ul没有id,而你又要找第三个ul,那个这种方式是不错。
Compatibility
- IE9+
- Firefox 3.5+
- Chrome
- Safari
- Opera
25.x:nth-last-of-type(n)
- 1
- 2
- 3
与ul:nth-of-type
刚好相反。
Compatibility
- IE9+
- Firefox 3.5+
- Chrome
- Safari
- Opera
26.x:first-child
- 1
- 2
- 3
Compatibility
- IE7+
- Firefox
- Chrome
- Safari
- Opera
27.x:last-child
Example
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
但是我不想要第一个的上边框和最后一个的下边框,可以这么做:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Compatibility
- IE9+
- Firefox
- Chrome
- Safari
- Opera
28.X:only-child
- 1
- 2
- 3
这将匹配div里只有一个p的元素。如:
- 1
- 2
- 3
- 4
- 5
- 6
Compatibility
- IE9+
- Firefox
- Chrome
- Safari
- Opera
29.X:only-of-type
- 1
- 2
- 3
这将匹配元素内只有一个li的元素,有时这个做法很简便。比如要寻找只有一个列表的ul,可以:
- 1
- 2
- 3
Compatibility
- IE9+
- Firefox 3.5+
- Chrome
- Safari
- Opera
30.x:first-of-type
Example
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
如何寻找上面的 “List Item 2”呢?
办法1
- 1
- 2
- 3
办法2
- 1
- 2
- 3
办法3
- 1
- 2
- 3
Compatibility
- IE9+
- Firefox 3.5+
- Chrome
- Safari
- Opera
总结
上述选择器在IE6中的使用要尤其小心,但是别因为这而影响你阅读这篇文章。你可以参考一下浏览器兼容表,或者你可以用 Dean Edward’s excellent IE9.js script 为旧版浏览器提供这些选择器的支持。
另外,当你在使用一些Javascript库时,如jQuery,请尽量的使用这些原生的CSS3选择器,因为浏览器选择器引擎将会按照浏览器的原生方式去解析,这将使得你的代码更加高效。