front-end-interview-handbook/packages/quiz/questions/what-is-css-selector-specif.../zh-CN.mdx

17 lines
1.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 什么是 CSS 选择器特异性以及它是如何工作的?
---
浏览器根据 CSS 规则的特异性来确定在元素上显示哪些样式。我们假设浏览器已经确定了与特定元素匹配的规则。在匹配的规则中,根据以下内容计算每个规则的特异性,四个逗号分隔的值 `a, b, c, d`
1. `a` 是指是否使用了内联样式。如果属性声明是元素上的内联样式,则 `a` 为 1否则为 0。
2. `b` 是 ID 选择器的数量。
3. `c` 是类、属性和伪类选择器的数量。
4. `d` 是标签和伪元素选择器的数量。
结果特异性不是单个数值分数,而是一个可以逐列比较的值数组。当比较选择器以确定哪个选择器的特异性最高时,从左到右查看,并比较每列中的最高值。因此,`b` 列中的值将覆盖 `c` 和 `d` 列中的值,无论它们可能是什么。因此,`0, 1, 0, 0` 的特异性将大于 `0, 0, 10, 10`。
在特异性相等的情况下:最新的规则是有效的规则。如果您在样式表中编写了相同的规则(无论内部还是外部)两次,那么样式表中较低的规则更接近要设置样式的元素,它被认为是更具体的,因此将被应用。
编写低特异性的 CSS 规则是一个更好的做法,这样如果需要,它们可以很容易地被覆盖。在编写 CSS UI 组件库代码时,重要的是它们具有较低的特异性,以便库的用户可以覆盖它们,而无需使用过于复杂的 CSS 规则,仅仅是为了增加特异性或求助于 `!important`。