css 选择器 类 反选,必须记住的 30 类 CSS 选择器

开篇

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

1.*

* {

margin: 0;

padding: 0;

}

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

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

#container * {

border: 1px solid black;

}

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

Compatibility

IE6+

Firefox

Chrome

Safari

Opera

2.#x

#container {

width: 960px;

margin: auto;

}

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

Compatibility

IE6+

Firefox

Chrome

Safari

Opera

3..x

.error {

color: red;

}

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

Compatibility

IE6+

Firefox

Chrome

Safari

Opera

4.x y

li a {

text-decoration: none;

}

当不是选择所有后代时,后代选择器将会非常有用,但有一点得注意:

如果你的选择器是x y z a b.error, 那你就用错了。你得问问自己是否需要应用每一层?

Compatibility

IE6+

Firefox

Chrome

Safari

Opera

5.x

a { color: red; }

ul { margin-left: 0; }

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

Compatibility

IE6+

Firefox

Chrome

Safari

Opera

6.x:visted and x:link

a:link { color: red; }

a:visted { color: purple; }

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

Compatibility

IE7+

Firefox

Chrome

Safari

Opera

7.x + y

ul + p {

color: red;

}

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

Compatibility

IE7+

Firefox

Chrome

Safari

Opera

8.x > y

div#container > ul {

border: 1px solid black;

}

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

  • List Item
    • Child
  • List Item
  • List Item
  • List Item

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

Compatibility

IE7+

Firefox

Chrome

Safari

Opera

9.x ~ y

ul ~ p {

color: red;

}

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

Compatibility

IE7+

Firefox

Chrome

Safari

Opera

10.x[title]

a[title] {

color: green;

}

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

Compatibility

IE7+

Firefox

Chrome

Safari

Opera

11.x[href="foo"]

a[href="http://net.tutsplus.com"] {

color: #1f6053; /* nettuts green */

}

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

Compatibility

IE7+

Firefox

Chrome

Safari

Opera

12.x[href*="nettuts"]

a[href*="tuts"] {

color: #1f6053; /* nettuts green */

}

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

Compatibility

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 的 a 将匹配 http:// 和 https://.

Compatibility

IE7+

Firefox

Chrome

Safari

Opera

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

a[href$=".jpg"] {

color: red;

}

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

Compatibility

IE7+

Firefox

Chrome

Safari

Opera

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

a[data-filetype="image"] {

color: red;

}

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

a[href$=".jpg"],

a[href$=".jpeg"],

a[href$=".png"],

a[href$=".gif"] {

color: red;

}

可这也太。。。

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

Image Linka[data-filetype="image"] {

color: red;

}

Compatibility

IE7+

Firefox

Chrome

Safari

Opera

16.x[foo~="bar"]

a[data-info~="external"] {

color: red;

}

a[data-info~="image"] {

border: 1px solid black;

}

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

"Click Me, Fool

Compatibility

IE7+

Firefox

Chrome

Safari

Opera

17.x:checked

input[type=radio]:checked {

border: 1px solid black;

}

这个常常对 checkbox 非常有用。

Compatibility

IE9+

Firefox

Chrome

Safari

Opera

18.x:after

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

.clearfix:after {

content: "";

display: block;

clear: both;

visibility: hidden;

font-size: 0;

height: 0;

}

.clearfix {

*display: inline-block;

_height: 1%;

}

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

Compatibility

IE8+

Firefox

Chrome

Safari

Opera

19.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)

div:not(#container) {

color: blue;

}

反选选择器。

Compatibility

IE9+

Firefox

Chrome

Safari

Opera

21.x::pseudoElement

p::first-line {

font-weight: bold;

font-size: 1.2em;

}

p::first-letter {

float: left;

font-size: 2em;

font-weight: bold;

font-family: cursive;

padding-right: 2px;

}

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

Compatibility

IE6+

Firefox

Chrome

Safari

Opera

22.x:nth-child(n)

li:nth-child(3) {

color: red;

}

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

Compatibility

IE9+

Firefox 3.5+

Chrome

Safari

Opera

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

li:nth-last-child(2) {

color: red;

}

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

Compatibility

IE9+

Firefox 3.5+

Chrome

Safari

Opera

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

ul:nth-of-type(3) {

border: 1px solid black;

}

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

Compatibility

IE9+

Firefox 3.5+

Chrome

Safari

Opera

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

ul:nth-last-of-type(3) {

border: 1px solid black;

}

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

Compatibility

IE9+

Firefox 3.5+

Chrome

Safari

Opera

26.x:first-child

ul li:first-child {

border-top: none;

}

Compatibility

IE7+

Firefox

Chrome

Safari

Opera

27.x:last-child

Example

  • List Item
  • List Item
  • List Item
ul {

width: 200px;

background: #292929;

color: white;

list-style: none;

padding-left: 0;

}

li {

padding: 10px;

border-bottom: 1px solid black;

border-top: 1px solid #3c3c3c;

}

list.png

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

li:first-child {

border-top: none;

}

li:last-child {

border-bottom: none;

}

Compatibility

IE9+

Firefox

Chrome

Safari

Opera

28.X:only-child

div p:only-child {

color: red;

}

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

My paragraph here.

Two paragraphs total.

Two paragraphs total.

Compatibility

IE9+

Firefox

Chrome

Safari

Opera

29.X:only-of-type

li:only-of-type {

font-weight: bold;

}

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

ul > li:only-of-type {

font-weight: bold;

}

Compatibility

IE9+

Firefox 3.5+

Chrome

Safari

Opera

30.x:first-of-type

Example

My paragraph here.

  • List Item 1
  • List Item 2
  • List Item 3
  • List Item 4

如何寻找上面的 "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;

}

Compatibility

IE9+

Firefox 3.5+

Chrome

Safari

Opera