百科问答小站 logo
百科问答小站 font logo



CSS的样式表 内联外部和内部优先级? 第1页

  

user avatar   justineo 网友的相关建议: 
      

这么说吧,正确理解 CSS 中层叠优先级逻辑的工程师,很少。但逻辑其实并不复杂。

所谓的「层叠」(cascading),就是为每个元素的每个 CSS 属性计算出生效的属性值的过程。

1. 先看样式来源,也就是说样式是谁写的。同时结合!important

浏览器 +!important> 用户 +!important> 开发者 +!important> 开发者 > 用户 > 浏览器。

2. 再看规则的特异性(specificity)。

内联 > 选择器。

3. 最后看声明顺序。

什么内部外部根本不影响,网上错漏百出的文章太多了。


另外,很多人容易把层叠过程和继承搞混。要搞清楚这个,先要了解 CSS 处理属性值的流程,属性值在处理流程中分为多个阶段:

1. declared value

比如一个<div>元素的width属性,可能被很多地方的声明命中:

       <div id="box" style="width: 100px">      
       div {   width: 10em; }  #box {   width: 80%; }      

2. cascaded value

通过计算层叠优先级,在第一步的多个值中找到优先级最高的那个。

3. specified value

如果在前两步发现没有指定color的值,那么根据默认值的逻辑进行填充。具体逻辑可以参考一下我之前的一个回答

4. computed value

80%这种相对值计算为绝对值,比如根据父元素的宽度转换成px单位。

5. used value

多个属性值结合以后,不一定满足规范的约束,需要根据规范规定的方式确定各个属性最后采用的值。比如一个绝对定位元素的left/right/width不可能完全根据指定值来,那么在指定的值过度约束时,需要根据规则进行调整。

6. actual value

浏览器实现时根据硬件、软件环境可能会对最后生效的值进一步进行调整,比如调整小数的精度。

我们常说的优先级其实就是其中 1 到 2 的最初那步,一共就三个层级的规则。




  

相关话题

  利用无理数压缩数据是否可行? 
  为什么程序员会有代码能跑就不要动的观点? 
  男朋友的大脑是单线程的怎么办? 
  为什么W3C要制定content-box盒子模型?IE5.5之前的IE盒子模型放在今天来看也是极好的啊 
  为什么我写代码时总是手滑把main打成mian? 
  LeetCode 刷不下去怎么办? 
  C# 这么优秀的语言,现在到底出了什么问题? 
  低代码开发以后有前景么?会不会最后一地鸡毛? 
  永恒之蓝病毒是如何穿透NAT访问到子网终端的445端口的? 
  如何用一句(段)代码表现孤独? 

前一个讨论
数学系哪门课最难学?
下一个讨论
关于 贫血模型 与 函数式编程 的疑问?





© 2024-05-19 - tinynew.org. All Rights Reserved.
© 2024-05-19 - tinynew.org. 保留所有权利