CSS属性的 指定值 (specified value)会经过下面3种途径取得:css
应用值(used value)是完成全部计算后最终使用的值。计算出CSS属性的最终值有三个步骤。html
window.getComputedStyle
得到最终的应用值。CSS 2.0 只定义了 计算值 computed value 做为属性计算的最后一步。 CSS 2.1 引进了定义明显不一样的的应用值,这样当父元素的计算值为百分数时子元素能够显式地继承其高宽。 对于不依赖于布局的 CSS 属性 (例如 display, font-size, line-height)计算值与应用值同样,不然就会不同canvas
优先级是浏览器是经过判断哪些属性值与元素最相关以决定并应用到该元素上的。优先级仅由选择器组成的匹配规则决定的。浏览器
优先级是根据由每种选择器类型构成的级联字串计算而成的。他是一个对应匹配表达式的权重。ide
若是优先级相同,靠后的 CSS 会应用到元素上。布局
下列是一份优先级逐级增长的选择器列表:优化
!important
规则例外 Link插件
当
!important
规则被应用在一个样式声明中时,该样式声明会覆盖CSS中任何其余的声明, 不管它处在声明列表中的哪里. 尽管如此,!important
规则仍是与优先级毫无关系.使用!important
不是一个好习惯,由于它改变了你样式表原本的级联规则,从而使其难以调试。调试
一些经验法则:code
!important
!important
!important
!important
怎样覆盖掉 !important
:not 伪类例外
:not 否认伪类在优先级计算中不会被看做是伪类. 事实上, 在计算选择器数量时仍是会把其中的选择器当作普通选择器进行计数.
无视DOM树中的距离
有以下样式声明:
body h1 { color: green; } html h1 { color: purple; }
当它应用在下面的HTML时:
<html> <body> <h1>Here is a title!</h1> </body> </html>
浏览器会将它渲染成purple,即后面的优先级更高
外边距合并指的是,当两个垂直外边距相遇时,它们将造成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
外边距合并初看上去可能有点奇怪,可是实际上,它是有意义的。以由几个段落组成的典型文本页面为例。第一个段落上面的空间等于段落的上外边距。若是没有外边距合并,后续全部段落之间的外边距都将是相邻上外边距和下外边距的和。这意味着段落之间的空间是页面顶部的两倍。若是发生外边距合并,段落之间的上外边距和下外边距就合并在一块儿,这样各处的距离就一致了。
CSS 里,可替换元素是这样一些元素, 其展示不是由CSS来控制的。这些外部元素的展示不依赖于CSS规范。 典型的可替换元素有 <img>
、 <object>
、 <video
> 以及 <textarea>
、 <input>
这样的表单元素。 一些元素,好比 <audio>
和 <canvas>
,只在一些特殊状况下是可替换元素。 使用了 CSS content 属性插入的对象被称做匿名的可替换元素。
CSS在某些状况下会对可替换元素作特殊处理,好比计算外边距和处理值为 auto 的状况。
须要注意的是,一部分(并不是所有)可替换元素,自己具备尺寸和基线,会被一些 CSS 属性用到,好比 vertical-align。