CSS 选择器用于“选中” HTML 元素并应用样式。
| 选择器 | 示例 | 权重 |
|---|---|---|
| !important | color: red !important; | 最高 (Override) |
| 行内样式 | style="color: red" | 1000 |
| ID 选择器 | #header | 0100 |
| 类选择器 | .btn | 0010 |
| 属性选择器 | [type="text"] | 0010 |
| 伪类选择器 | :hover, :first-child | 0010 |
| 元素选择器 | div, p, h1 | 0001 |
| 伪元素选择器 | ::before, ::after | 0001 |
| 通配符/组合器 | *, +, >, ~ | 0000 |
注意:
:not()伪类本身不计算权重,但它里面的参数选择器会计算。
当同一个元素被多个规则命中时,浏览器不是只看选择器权重,还会按“层叠顺序”决定最终样式。
从低到高可以理解为:
!important。补充规则:
*、+、>、~ 这类通配符和组合器不增加权重。!important 会提升声明优先级,但仍不建议滥用,否则可维护性会变差。表示元素的状态或逻辑位置。
:hover: 鼠标悬停。:active: 鼠标按下。:focus: 获得焦点。:visited: 链接已访问。:first-child: 父元素的第一个子元素。:last-child: 父元素的最后一个子元素。:nth-child(n): 父元素的第 n 个子元素。:nth-of-type(n): 父元素的第 n 个同类型子元素。:nth-child vs:nth-of-typep:nth-child(2): 选中父元素的第 2 个子元素,且该元素必须是 <p>。如果第 2 个子元素是 <div>,则无法选中。p:nth-of-type(2): 选中父元素下的第 2 个 <p> 元素(忽略其他类型的兄弟元素)。用于创建一些不在 DOM 树中的元素,或选中元素的特定部分。必须使用双冒号 :: (CSS3 规范),单冒号兼容旧版。
::before: 在元素内容之前插入内容 (常用于图标、清除浮动)。::after: 在元素内容之后插入内容。::first-line: 选中第一行文本。::first-letter: 选中第一个字母。::selection: 选中被用户选取的文本。ID +100,Class +10,Tag +1,行内样式可视为 1000。!important)。:nth-child 和:nth-of-type 的区别?:nth-child(n) 强调的是“结构上的第 n 个子元素”,不区分类型。:nth-of-type(n) 强调的是“同类型中的第 n 个”。font-size, font-family, color, text-align, line-height。border, padding, margin, width, height, background。