你必须记住的30个CSS选择器

简介:

开篇

有30个CSS选择器你必须烂熟于心,它们适应于当今各大主流浏览器。

1.*



   
   
  1. * {
  2. margin: 0;
  3. padding: 0;
  4. }
  • 1
  • 2
  • 3
  • 4

*选择器选择的是每一个单一元素。很多程序员用上面的CSS将所有元素的margin和padding清零。虽然这是有效的,但最好还是别这么做,这会使得浏览器的负担很重。

*选择器也可以用在孩子选择器中。



   
   
  1. #container * {
  2. border: 1px solid black;
  3. }
  • 1
  • 2
  • 3

这会使#container所有孩子都有border,但还是那句话,如果不是必须得这么做,还是别用星选择器。

view demo

Compatibility

  • IE6+
  • Firefox
  • Chrome
  • Safari
  • Opera

2.#x



   
   
  1. #container {
  2. width: 960px;
  3. margin: auto;
  4. }
  • 1
  • 2
  • 3
  • 4

id选择器的优先级很高,因此在用之前问问自己:我仅仅是为了找到这个元素而去给他加id的吗?

view demo

Compatibility

  • IE6+
  • Firefox
  • Chrome
  • Safari
  • Opera

3..x



   
   
  1. .error {
  2. color: red;
  3. }
  • 1
  • 2
  • 3

class选择器和id选择器不同,首先优先级没有id高,再者id选择器只能选择一个,而class选择器则可以筛选出来一组。

view demo

Compatibility

  • IE6+
  • Firefox
  • Chrome
  • Safari
  • Opera

4.x y



   
   
  1. li a {
  2. text-decoration: none;
  3. }
  • 1
  • 2
  • 3

当不是选择所有后代时,后代选择器将会非常有用,但有一点得注意: 
如果你的选择器是x y z a b.error, 那你就用错了。你得问问自己是否需要应用每一层?

view demo

Compatibility

  • IE6+
  • Firefox
  • Chrome
  • Safari
  • Opera

5.x



   
   
  1. a { color: red; }
  2. ul { margin-left: 0; }
  • 1
  • 2

如果想选择同一类元素,那就不要用id或class了,直接用元素选择器。

view demo

Compatibility

  • IE6+
  • Firefox
  • Chrome
  • Safari
  • Opera

6.x:visted and x:link



   
   
  1. a :link { color: red; }
  2. a :visted { color: purple; }
  • 1
  • 2

我们常常用伪类:link筛选a标签是还未被点击;而用:visited去筛选哪些别点击过了。

view demo

Compatibility

  • IE7+
  • Firefox
  • Chrome
  • Safari
  • Opera

7.x + y



   
   
  1. ul + p {
  2. color: red;
  3. }
  • 1
  • 2
  • 3

相邻选择器会选择第一个相邻的元素,如上面的例子会让ul后第一个段落的字体变为红色(而ul与p之间是不能有其他元素的)。

view demo

Compatibility

  • IE7+
  • Firefox
  • Chrome
  • Safari
  • Opera

8.x > y



   
   
  1. div #container > ul {
  2. border: 1px solid black;
  3. }
  • 1
  • 2
  • 3

这也是一种后代选择器,但它与x y这种后代选择器不同,它只能选择直系后代。如:



   
   
  1. <div id="container">
  2. <ul>
  3. <li> List Item
  4. <ul>
  5. <li> Child </li>
  6. </ul>
  7. </li>
  8. <li> List Item </li>
  9. <li> List Item </li>
  10. <li> List Item </li>
  11. </ul>
  12. </div>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这个例子中,#cotainer > ul只会选择第一个ul,而不会search到ul里面那个包含li的ul。

view demo

Compatibility

  • IE7+
  • Firefox
  • Chrome
  • Safari
  • Opera

9.x ~ y



   
   
  1. ul ~ p {
  2. color: red;
  3. }
  • 1
  • 2
  • 3

这种兄弟选择器与x + y类似,但不同的是,后者只能筛选第一个p,而这种却可以满足ul下所有的直系p标签。

view demo

Compatibility

  • IE7+
  • Firefox
  • Chrome
  • Safari
  • Opera

10.x[title]



   
   
  1. a [title] {
  2. color: green;
  3. }
  • 1
  • 2
  • 3

属性选择器。这将选择所有具有title属性的a标签。

view demo

Compatibility

  • IE7+
  • Firefox
  • Chrome
  • Safari
  • Opera

11.x[href="foo"]



   
   
  1. a [href="http://net.tutsplus.com"] {
  2. color: #1f6053; /* nettuts green */
  3. }
  • 1
  • 2
  • 3

这个选择器可以选择链接为href="http://net.tutsplus.com"的a标签,可如果这个里这个链接变了呢?,这未免有些严格,可以适当的用正则表达式去匹配。

view demo

Compatibility

  • IE7+
  • Firefox
  • Chrome
  • Safari
  • Opera

12.x[href*="nettuts"]



   
   
  1. a [href*="tuts"] {
  2. color: #1f6053; /* nettuts green */
  3. }
  • 1
  • 2
  • 3

‘*’号将匹配href中含有nuttuts字符,如果想更加严格,还可以用^$表示开始和结束。

view demo

Compatibility

  • IE7+
  • Firefox
  • Chrome
  • Safari
  • Opera

13.x[href^="http"]



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

这样去筛选具有有效href的a将匹配http://和https://.

view demo

Compatibility

  • IE7+
  • Firefox
  • Chrome
  • Safari
  • Opera

14.x[href$=".jpg"]



   
   
  1. a [href$=".jpg"] {
  2. color: red;
  3. }
  • 1
  • 2
  • 3

这将会选择链接为jpg格式的图片链接,可是如果图片类型为png或gif等怎么办?

view demo

Compatibility

  • IE7+
  • Firefox
  • Chrome
  • Safari
  • Opera

15.x[data-*="foo"]



   
   
  1. a [data-filetype="image"] {
  2. color: red;
  3. }
  • 1
  • 2
  • 3

按照规则14.我们可能得:



   
   
  1. a [href $= ".jpg" ],
  2. a [href $= ".jpeg" ],
  3. a [href $= ".png" ],
  4. a [href $= ".gif" ] {
  5. color: red;
  6. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可这也太。。。 
我们可以加一个属性用以标示。

<a href="path/to/image.jpg" data-filetype="image"> Image Link </a>
  • 1


   
   
  1. a [data-filetype="image"] {
  2. color: red;
  3. }
  • 1
  • 2
  • 3

view demo

Compatibility

  • IE7+
  • Firefox
  • Chrome
  • Safari
  • Opera

16.x[foo~="bar"]



   
   
  1. a [data-info~="external"] {
  2. color: red;
  3. }
  4. a [data-info~="image"] {
  5. border: 1px solid black;
  6. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

~将会让我们匹配到属性值被空格分隔符分开的值,如:

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

view demo

Compatibility

  • IE7+
  • Firefox
  • Chrome
  • Safari
  • Opera

17.x:checked



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

这个常常对checkbox非常有用。

view demo

Compatibility

  • IE9+
  • Firefox
  • Chrome
  • Safari
  • Opera

18.x:after

伪类beforeafter已经有了一些新的用法,比如最常见的:



   
   
  1. .clearfix :after {
  2. content: "";
  3. display: block;
  4. clear: both;
  5. visibility: hidden;
  6. font-size: 0;
  7. height: 0;
  8. }
  9. .clearfix {
  10. *display: inline-block;
  11. _height: 1%;
  12. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

没错,这就是默认标准clearfix的实现原理。

Compatibility

  • IE8+
  • Firefox
  • Chrome
  • Safari
  • Opera

19.x:hover



   
   
  1. div :hover {
  2. background: #e3e3e3;
  3. }
  • 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. div :not( #container) {
  2. color: blue;
  3. }
  • 1
  • 2
  • 3

反选选择器。

view demo

Compatibility

  • IE9+
  • Firefox
  • Chrome
  • Safari
  • Opera

21.x::pseudoElement



   
   
  1. p ::first-line {
  2. font-weight: bold;
  3. font-size: 1.2em;
  4. }
  5. p ::first-letter {
  6. float: left;
  7. font-size: 2em;
  8. font-weight: bold;
  9. font-family: cursive;
  10. padding-right: 2px;
  11. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

伪元素选择器,注意尽量还是按标准来,多使用::而不是:

view demo

Compatibility

  • IE6+
  • Firefox
  • Chrome
  • Safari
  • Opera

22.x:nth-child(n)



   
   
  1. li :nth-child(3) {
  2. color: red;
  3. }
  • 1
  • 2
  • 3

选择一组中特定的孩子。n表示第几个,也可以是表达式,如2n+1,2n.

view demo

Compatibility

  • IE9+
  • Firefox 3.5+
  • Chrome
  • Safari
  • Opera

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



   
   
  1. li :nth-last-child(2) {
  2. color: red;
  3. }
  • 1
  • 2
  • 3

如果li有400个,而你需要target到第397个,那用这个咱合适不过了。

view demo

Compatibility

  • IE9+
  • Firefox 3.5+
  • Chrome
  • Safari
  • Opera

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



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

如果ul没有id,而你又要找第三个ul,那个这种方式是不错。

view demo

Compatibility

  • IE9+
  • Firefox 3.5+
  • Chrome
  • Safari
  • Opera

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



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

ul:nth-of-type刚好相反。

Compatibility

  • IE9+
  • Firefox 3.5+
  • Chrome
  • Safari
  • Opera

26.x:first-child



   
   
  1. ul li :first-child {
  2. border-top: none;
  3. }
  • 1
  • 2
  • 3

view demo

Compatibility

  • IE7+
  • Firefox
  • Chrome
  • Safari
  • Opera

27.x:last-child

Example


   
   
  1. <ul>
  2. <li> List Item </li>
  3. <li> List Item </li>
  4. <li> List Item </li>
  5. </ul>
  • 1
  • 2
  • 3
  • 4
  • 5


   
   
  1. ul {
  2. width: 200px;
  3. background: #292929;
  4. color: white;
  5. list-style: none;
  6. padding-left: 0;
  7. }
  8. li {
  9. padding: 10px;
  10. border-bottom: 1px solid black;
  11. border-top: 1px solid #3c3c3c;
  12. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

view demo

但是我不想要第一个的上边框和最后一个的下边框,可以这么做:



   
   
  1. li :first-child {
  2. border-top: none;
  3. }
  4. li :last-child {
  5. border-bottom: none;
  6. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

view demo

Compatibility

  • IE9+
  • Firefox
  • Chrome
  • Safari
  • Opera

28.X:only-child



   
   
  1. div p :only-child {
  2. color: red;
  3. }
  • 1
  • 2
  • 3

这将匹配div里只有一个p的元素。如:



   
   
  1. <div> <p> My paragraph here. </p> </div>
  2. <div>
  3. <p> Two paragraphs total. </p>
  4. <p> Two paragraphs total. </p>
  5. </div>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

view demo

Compatibility

  • IE9+
  • Firefox
  • Chrome
  • Safari
  • Opera

29.X:only-of-type



   
   
  1. li :only-of-type {
  2. font-weight: bold;
  3. }
  • 1
  • 2
  • 3

这将匹配元素内只有一个li的元素,有时这个做法很简便。比如要寻找只有一个列表的ul,可以:



   
   
  1. ul > li :only-of-type {
  2. font-weight: bold;
  3. }
  • 1
  • 2
  • 3

view demo

Compatibility

  • IE9+
  • Firefox 3.5+
  • Chrome
  • Safari
  • Opera

30.x:first-of-type

Example


   
   
  1. <div>
  2. <p> My paragraph here. </p>
  3. <ul>
  4. <li> List Item 1 </li>
  5. <li> List Item 2 </li>
  6. </ul>
  7. <ul>
  8. <li> List Item 3 </li>
  9. <li> List Item 4 </li>
  10. </ul>
  11. </div>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

如何寻找上面的 “List Item 2”呢?

办法1


   
   
  1. ul :first-of-type > li :nth-child(2) {
  2. font-weight: bold;
  3. }
  • 1
  • 2
  • 3
办法2


   
   
  1. p + ul li :last-child {
  2. font-weight: bold;
  3. }
  • 1
  • 2
  • 3
办法3


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

view demo

Compatibility

  • IE9+
  • Firefox 3.5+
  • Chrome
  • Safari
  • Opera

总结

上述选择器在IE6中的使用要尤其小心,但是别因为这而影响你阅读这篇文章。你可以参考一下浏览器兼容表,或者你可以用 Dean Edward’s excellent IE9.js script 为旧版浏览器提供这些选择器的支持。

另外,当你在使用一些Javascript库时,如jQuery,请尽量的使用这些原生的CSS3选择器,因为浏览器选择器引擎将会按照浏览器的原生方式去解析,这将使得你的代码更加高效

本文作者:Jason_Jiagen
本文发布时间:2018年06月14日
本文来自云栖社区合作伙伴 CSDN,了解相关信息可以关注csdn.net网站。
目录
相关文章
|
3月前
|
前端开发
CSS:高级选择器
CSS:高级选择器
47 1
|
3月前
|
前端开发 JavaScript
CSS:基础选择器
CSS:基础选择器
50 1
|
14天前
|
存储 移动开发 前端开发
高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容
本文深入探讨了高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容,旨在提升开发效率、网站性能和用户体验。
29 5
|
1月前
|
前端开发 JavaScript UED
深入理解与应用 CSS 伪类选择器
【10月更文挑战第23天】通过以上对 CSS 伪类选择器的深入探讨,我们可以更好地理解和应用它们,为网页设计和开发带来更丰富、更灵活的样式效果。同时,要注意在实际应用中根据具体情况合理选择和使用伪类选择器,以达到最佳的设计效果和用户体验。
43 2
|
3月前
|
前端开发 JavaScript 容器
谁动了我的选择器?深入理解CSS选择器优先级
该文章详细解释了CSS选择器的工作原理,包括不同种类选择器的权重计算规则,并通过实例说明了如何解决样式冲突问题,确保所需的样式能够正确应用到目标元素上。
|
3月前
|
前端开发
前端基础(四)_CSS层叠样式表_什么是css_css样式的引入方式_样式表的优先级_样式选择器
本文详细介绍了CSS(层叠样式表)的基本概念、语法规则、引入方式、样式表的优先级和样式选择器。文章解释了CSS的作用,展示了如何在HTML中通过行内样式、内部样式和外部样式引入CSS,讨论了不同CSS选择器的优先级和如何确定最终的样式应用。此外,还强调了使用`!important`规则时的优先级高于行内样式。
99 1
|
2月前
|
前端开发
CSS常见的选择器
CSS常见的选择器
23 0
|
3月前
|
前端开发 JavaScript
【CSS】选择器
【CSS】选择器
|
4月前
|
前端开发
CSS3选择器
【8月更文挑战第23天】CSS3选择器。
33 1
|
4月前
|
前端开发
CSS中的层级选择器&伪类选择器和伪元素选择器
CSS中的层级选择器&伪类选择器和伪元素选择器