CSS-彻底搞懂选择器优先级与CSS单位

44 阅读2分钟

前言

为什么我写的样式不生效?为什么那个单位在移动端会缩放?理解 CSS 的优先级(Specificity)和度量单位,是每一个前端开发者从“画页面”走向“精通布局”的必经之路。

一、 CSS 优先级(权重)全解析

CSS 样式的应用遵循“就近原则”和“权重计算原则”。

1. 权重等级排列

我们将不同选择器划分为不同的等级:

  1. !important:无视规则,权重最高。
  2. 行内样式 (Inline style) :写在标签 style 属性里的样式。
  3. ID 选择器:如 #header
  4. 类、伪类、属性选择器:如 .content:hover[type="text"]
  5. 元素(标签)、伪元素选择器:如 div::before
  6. 通用选择器 (*) 、子选择器 (> )、相邻选择器 (+):权重极低(通常计为 0)。
  7. 继承的样式:权重最低。

2. 权重计算法(三位计数法)

为了方便对比,我们可以给它们分配分值(非绝对数值,仅作逻辑参考):

  • ID 选择器:100
  • 类/属性/伪类:10
  • 标签/伪元素:1

规则:从左往右比较,数值大的获胜。如果数值相等,则后者覆盖前者

⚠️ 注意!important 是“核武器”,如果它用于简写属性(如 background: !important),则其包含的所有子属性(color, image 等)都会获得最高权重,应谨慎使用


二、 CSS 常用度量单位

根据参考参照物的不同,单位可分为以下几类:

1. 绝对单位

  • px (像素) :最常用的基本单位,物理像素点,不随环境改变。

2. 相对单位(基于字体)

  • em:相对于当前元素font-size

    • 注意:如果当前元素未设置,则参考父元素;如果整个页面都没设置,则参考浏览器默认值(16px)。
  • rem (Root em) :相对于根元素 (<html>)font-size。是移动端适配的首选。

3. 相对单位(基于视口)

  • vw / vh:相对于浏览器可视窗口的宽度/高度。1vw 等于视口宽度的 1%。
  • % (百分比) :通常相对于父元素的对应属性(宽度、高度等)。

三、 现代布局黑科技

1. calc() 计算属性

允许在声明 CSS 属性值时执行加减乘除运算。

  • 语法width: calc(100% - 20px);
  • 注意:运算符前后必须保留空格。

2. aspect-ratio 设置宽高比

过去我们需要用 padding-top 技巧来实现等比缩放,现在一行代码搞定:

.box {
  width: 500px;
  aspect-ratio: 16 / 9; /*这时的宽高比就为16比9*/
  background: lightblue;
}

四、 总结:优先级冲突时的排查思路

  1. !important:有没有被强行置顶。
  2. 算权重值:ID > 类 > 标签。
  3. 看顺序:权重相同时,写在后面的样式生效。
  4. 看距离:行内样式 > 内部/外部样式表。
  5. 看加载:内部样式和外联样式的优先级,取决于它们在 HTML 中出现的先后顺序。