CSS 基础回顾 - 层叠、优先级和继承

CSS 基础回顾 - 层叠、优先级和继承

层叠指的是决定同一个DOM元素的样式定义的一系列规则。它决定了如何解决冲突,是CSS语言的基础。web

下面分析层叠的规则。当生命冲突时,层叠会依据三种条件解决冲突。浏览器

  • 样式表的来源: 样式从哪来的,包括你的样式和浏览器默认样式等。
  • 选择器优先级:哪些选择器比另外一些选择器更重要。
  • 源码顺序:样式在样式表里的声明顺序。

样式表来源

你添加到网页中的样式表并非惟一使用的样式表,包括你的样式和浏览器默认样式等。编辑器

! important声明 :样式来源规则有个例外,标记为重要(important)的声明。 优先级从高到低:! important声明 => 做者样式表 => 浏览器样式flex

理解优先级

若是没法用来源解决冲突声明,浏览器会尝试检查它们的优先级url

浏览器将优先级分为两部分:HTML的行内样式和选择器样式。spa

1. 行内样式

行内样式会覆盖任何来自样式表或者<style>标签的样式(import 例外)。行内样式没有选择器,由于它们值做用域所在元素。code

2. 选择器优先级

不一样类型的选择器有不一样的优先级:orm

ID选择器 > 类选择器 > 标签选择器继承

实际上,ID选择器的优先级比拥有任意多个类的选择器都高。ci

优先级的准确规则以下。

  • 若是选择器的ID数量更多,则它会胜出(即它更明确)
  • 若是ID数量一致,那么拥有最多类的选择器胜出。
  • 若是以上两次比较都一致,那么拥有最多标签名的选择器生出。

伪类选择器(如: hover)和属性选择器(如[type=“input”])与一个类选择器的优先级相同。通用选择器(*)和组合器(>、+、~)对优先级没有影响。

这个概念很简单,可是若是不理解优先级,那就弄不清楚为何一个规则能生效,另外一个却不能。

3. 优先级标记

一个经常使用的表示优先级的方式是用数值形式来标记,一般用逗号隔开每一个数。如: 1,2,2表示选择器由1个ID、2个类、2个标签组成。优先级最高的ID排在第一个,紧接着是类,而后是标签。

[image:B19764DB-4D70-47ED-A016-CF368B93452D-90240-0001B55CAF5326F4/29069885-F574-44AA-A8E8-75D544DEBFF6.png]

如今经过比较数值就能决定哪一个选择器优先级更高(更明确)。“1,0,0”的优先级高于“0,2,2”甚至“0,10,0”(尽管我不推荐写一个长达10个类名的选择器),由于第一个数(ID)有最高优先级。

还能够用4个数字来标记,第一位用0或1来表示,是不是用行内样式添加,1,0,0,0

4. 源码的顺序

层叠的最后一步,是源码顺序。若是两个生命得了哀怨和优先级相同,其中一个声明在样式表中出现较晚,或者位于页面较晚引入的样式表中,则该声明生出。 也就是说,优先级相同时,后出现的样式会覆盖先出现的样式。

5. 两条经验法则

  • 在选择器中不要使用ID。就算使用一个ID,也会大幅提高优先级。很难覆盖这个样式。
  • 不要使用 !important。它比ID更难覆盖,一旦用它,想要覆盖原先的声明,就必须再加上一个 !important

继承

还有最后一种给元素添加样式的方式:继承。 若是一个元素的某个属性没有层叠值,则可能会继承某个祖先元素的值。

不是全部属性都能被继承:

  • 主要是跟文本相关的属性: color、font、font-family、font-size、font-weight、font-variant、font-style、line-height、letter-spacing、text-align、text-indent、text-transform、white-space以及word-spacing
  • 列表属性:list-style、list-style-type、list-style-position 以及 list-style-image
  • 表格的边框属性 border-collapse 和border-spacing
  • … (以上为不彻底枚举)

特殊值

  • inherit: 当想用继承来代替一个层叠值时,用它来覆盖另外一个值,这样元素就能继承其父元素的值。
  • initial: 每一个CSS属性都有初始值,使用它来将属性充值未默认值。注: auto 不是全部属性的默认值。

总结

  • 控制选择器的优先级
  • 不要混淆层叠和继承
  • 某些属性会被继承,包括文本、列表、表格边框相关属性
  • 不要混淆 initialauto

本文使用 mdnice 排版

相关文章
相关标签/搜索