层叠
指的是决定同一个DOM元素的样式定义的一系列规则。它决定了如何解决冲突,是CSS语言的基础。web
下面分析层叠的规则。当生命冲突时,层叠会依据三种条件解决冲突。浏览器
你添加到网页中的样式表并非惟一使用的样式表,包括你的样式和浏览器默认样式等。编辑器
! important声明
:样式来源规则有个例外,标记为重要(important)的声明。 优先级从高到低:! important声明
=> 做者样式表
=> 浏览器样式
flex
若是没法用来源解决冲突声明,浏览器会尝试检查它们的优先级
。url
浏览器将优先级分为两部分:HTML的行内样式和选择器样式。spa
行内样式会覆盖任何来自样式表或者<style>
标签的样式(import 例外)。行内样式没有选择器,由于它们值做用域所在元素。code
不一样类型的选择器有不一样的优先级:orm
ID选择器 > 类选择器 > 标签选择器继承
实际上,ID选择器
的优先级比拥有任意多个类的选择器
都高。ci
优先级的准确规则以下。
❝伪类选择器(如: hover)和属性选择器(如[type=“input”])与一个类选择器的优先级相同。通用选择器(*)和组合器(>、+、~)对优先级没有影响。
❞
这个概念很简单,可是若是不理解优先级,那就弄不清楚为何一个规则能生效,另外一个却不能。
一个经常使用的表示优先级的方式是用数值形式来标记,一般用逗号隔开每一个数。如: 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
。
层叠的最后一步,是源码顺序。若是两个生命得了哀怨和优先级相同,其中一个声明在样式表中出现较晚,或者位于页面较晚引入的样式表中,则该声明生出。 也就是说,优先级相同时,后出现的样式会覆盖先出现的样式。
!important
。它比ID更难覆盖,一旦用它,想要覆盖原先的声明,就必须再加上一个
!important
。
还有最后一种给元素添加样式的方式:继承
。 若是一个元素的某个属性没有层叠值,则可能会继承
某个祖先元素的值。
不是全部属性都能被继承:
auto
不是全部属性的默认值。
initial
和
auto
值
本文使用 mdnice 排版