CSS中的选择器最全集合,确定不看看吗?

282 阅读4分钟

选择器的种类

1. 基本选择器

ID选择器:选中具有指定ID的单个元素。ID在页面中应该是唯一的。

```
#my-id {
  background-color: yellow;
}
```

类选择器:选中所有具有指定类名的元素。

```
.my-class {
  font-size: 16px;
}
```

元素选择器:选中所有指定的HTML元素。

```
p {
  color: blue;
}
```

通配符选择器:选中所有元素。

```
* {
  margin: 0;
  padding: 0;
}
```

优先级依次降低

2. 组合选择器

后代选择器:选中指定元素的所有后代元素。

```
div p {
  color: green;
}
```

子元素选择器:选中指定元素的直接子元素。

```
ul > li {
  list-style-type: none;
}
```

相邻兄弟选择器:选中紧接在指定元素后的兄弟元素。

```
h2 + p {
  margin-top: 0;
}
```

一般兄弟选择器:选中指定元素后的所有兄弟元素。

```
h2 ~ p {
  color: red;
}
```

没有特定的优先级 在不同组合不同的优先级

3. 属性选择器

存在属性选择器:选中具有指定属性的元素。

```
[type] {
  border: 1px solid black;
}
```

特定属性值选择器:选中具有指定属性和特定值的元素。

```
[type="text"] {
  background-color: lightgray;
}
```

属性值前缀选择器:选中具有指定属性且值以特定字符串开头的元素。

```
[href^="https"] {
  color: green;
}
```

属性值后缀选择器:选中具有指定属性且值以特定字符串结尾的元素。

```
[href$=".pdf"] {
  color: red;
}
```

属性值包含选择器:选中具有指定属性且值包含特定字符串的元素。

```
[class*="btn"] {
  padding: 10px;
}
```

4. 伪类选择器

:hover:选中鼠标悬停时的元素。

```
a:hover {
  color: red;
}
```

:first-child:选中指定元素的第一个子元素。

```
p:first-child {
  font-weight: bold;
}
```

:last-child:选中指定元素的最后一个子元素。

```
p:last-child {
  font-style: italic;
}
```

:nth-child(n) :选中指定元素的第n个子元素。

```
li:nth-child(2) {
  color: blue;
}
```

:not(selector) :选中不匹配指定选择器的元素。

```
div:not(.exclude) {
  border: 1px solid black;
}
```

5. 伪元素选择器

::before:在元素内容之前插入内容。

```
p::before {
  content: "Note: ";
  font-weight: bold;
}
```

::after:在元素内容之后插入内容。

```
p::after {
  content: " (end)";
}
```

优先级的计算规则

  1. 内联样式style 属性):优先级最高。

    <p style="color: red;">Hello</p>
    
  2. ID选择器:优先级次高。

    #my-id {
      color: blue;
    }
    
  3. 类选择器、属性选择器和伪类选择器:优先级中等。

    .my-class {
      color: green;
    }
    
    [type="text"] {
      border: 1px solid black;
    }
    
    a:hover {
      color: orange;
    }
    
  4. 元素选择器和伪元素选择器:优先级最低。

    p {
      color: purple;
    }
    
    p::before {
      content: "Prefix: ";
    }
    

优先级具体计算

优先级是通过以下四个值来计算的:

  1. 内联样式1000(因为内联样式具有最高优先级)
  2. ID选择器0100(每个ID选择器增加100的优先级)
  3. 类选择器、属性选择器和伪类选择器0010(每个增加10的优先级)
  4. 元素选择器和伪元素选择器0001(每个增加1的优先级)

这些值的计算方式如下:

  1. 内联样式1000
  2. ID选择器0100
  3. 类选择器、属性选择器和伪类选择器0010
  4. 元素选择器和伪元素选择器0001

计算优先级的例子

假设有以下CSS规则:

/* 优先级:0001 */
p {
  color: blue;
}

/* 优先级:0010 */
.my-class {
  color: green;
}

/* 优先级:0100 */
#my-id {
  color: red;
}

/* 优先级:1000 */
<div style="color: purple;">Hello</div>

如果这些规则都应用到一个<p>元素上,优先级从高到低的顺序是:

  1. 内联样式(color: purple
  2. ID选择器(color: red
  3. 类选择器(color: green
  4. 元素选择器(color: blue

因此,<p>元素的最终颜色是紫色,因为内联样式具有最高优先级。

优先级不能同级相加,只能跨级相加,再多低级的选择器比不过上一级的一个选择器(不能跨越阶级)

特殊的important

在CSS中有一个传说,只要它出现谁也拦不住。加上!important会覆盖所有的选择器,谁来都不好使。

  • 提高优先级!important 可以覆盖所有选择器规则,甚至是ID选择器和内联样式。使用时应慎重考虑。

  • 样式的维护性:过度使用 !important 会使CSS的维护变得困难,因为它打破了自然的优先级规则,可能导致样式冲突难以追踪和解决。

  • 应对特定问题!important 常用于解决特定的样式覆盖问题,比如在第三方库或框架中调整样式,或在调试阶段。

  • 避免滥用:在正常情况下,最好通过合理设计选择器的优先级和结构来解决样式问题,而不是依赖 !important