CSS属性层叠

86 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情

CSS属性继承

CSS的某些属性具有继承性。如果一个属性具备继承性, 那么在该元素上设置后, 它的后代元素都可以继承这个属性。当然, 如果后代元素自己有设置该属性, 那么优先使用后代元素自己的属性(不管继承过来的属性权重多高)。

如何知道一个属性是否具有继承性呢?常见的font-size/font-family/font-weight/line-height/color/text-align都具有继承性。需要注意的是,继承过来的是计算值, 而不是设置值。

CSS属性层叠

CSS的翻译是层叠样式表, 什么是层叠呢?对于一个元素来说, 相同一个属性我们可以通过不同的选择器给它进行多次设置。那么属性会被一层层覆盖上去,但是最终只有一个会生效。

那么多个样式属性覆盖上去, 哪一个会生效呢?有什么判断依据呢?

判断依据一: 选择器的权重, 权重大的生效, 根据权重可以判断出优先级。

判断依据二: 先后顺序, 权重相同时, 后面设置的生效。

那么如何知道元素的权重呢?

选择器的权重

按照经验,为了方便比较CSS属性的优先级,可以给CSS属性所处的环境定义一个权值(权重)。

  • !important:10000
  • 内联样式:1000
  • id选择器:100
  • 类选择器、属性选择器、伪类:10
  • 元素选择器、伪元素:1
  • 通配符:0

HTML元素的类型

在前面我们会经常提到div是块级元素会独占一行, span是行内级元素会在同一行显示。到底什么是块级元素, 什么是行内级元素呢?

HTML定义元素类型的思路是这样子的。HTML元素有很多, 比如h元素/p元素/div元素/span元素/img元素/a元素等等。当我们把这个元素放到页面上时, 这个元素到底占据页面中一行多大的空间呢?为什么我们这里只说一行呢? 因为垂直方向的高度通常是内容决定的。比如一个h1元素的标题, 我们必然是希望它独占一行的, 其他的内容不应该和我的标题放在一起。比如一个p元素的段落, 必然也应该独占一行, 其他的内容不应该和我的段落放在一起。而类似于img/span/a元素, 通常是对内容的某一个细节的特殊描述, 没有必要独占一行。所以, 为了区分哪些元素需要独占一行, 哪些元素不需要独占一行, HTML将元素区分(本质是通过CSS的)成了两类:

  • 块级元素: 独占父元素的一行
  • 行内级元素:多个行内级元素可以在父元素的同一行中显示

事实上元素没有本质的区别。div是块级元素, span是行内级元素。div之所以是块级元素仅仅是因为浏览器默认设置了display属性而已。

image.png

image.png