首页 > 开发 > CSS > 正文

详解CSS的结构与层叠以及格式化

2024-07-11 08:33:20
字体:
来源:转载
供稿:网友

结构与层叠

每个合法的文档都会生成一个结构树,有了结构树元素的祖先、属性兄弟元素等等创建选择器来选择元素,这是CSS继承的核心。继承是从一个元素向后代元素传递属性值所采用的机制。面向一个元素使用哪些值时,用户代理不仅要考虑继承,还要考虑特殊性,另外需要考虑声明本身的来源,这个过程就叫层叠。

本文讨论3种机制之间的关联:特殊性、继承和层叠。

特殊性

同一元素可以使用不同的方法来选择元素。但是每个规则,用户代理会计算选择器的特殊性,并将这个特殊性附加到规则的个个声明。如果一个元素有两个或多个冲突的属性声明,那么最高特殊性的声明会胜出。

特殊性计算规则:

1)对于选择器中给定的各个ID属性值,加0100

2)对于选择器中给定的各个类属性值,属性选择或伪类,加0010

3)对于选择器中给定的各个元素和伪元素,加0001

4)结合符和通配选择器对特殊性没有任何贡献

对于重叠的选择,如果符合多种规则,这些规则将累加计算。0011特殊性优于0001,0100优于0022。这是因为值从左向右排序。

题目:下列选择器同指向同一元素,容器的颜色应该为什么颜色?

CSS Code复制内容到剪贴板
  1. div.container  div.bright{background: #996699;}    div.bright{background: #99CCCC;}   
  2. div#id216{background: #FFFF66;}    #id216{background: #CC3333;}   
  3. div.container div#id216{background: #333399;}  

考察特殊性,答案#333399;特殊性分别为:0022,0011,0101,0100,0112

 

注意:特殊性不是解决冲突的全部,实际上,所有样式冲突的解决都由层叠来处理。

到目前为止,我们只见过以0开头的特殊性。一般地,第一个0是为内联样式声明保留的,他比所有其他声明的特殊性都高。

CSS Code复制内容到剪贴板
  1. <div class ="bright" id ="id216" style="background:#003300"></div>  

有时候某个声明可能非常重要,超过了所有其他声明,并允许在这些声明的结束分号之前插入!important来标志。

CSS Code复制内容到剪贴板
  1. #id216{ background: #990033 !important;}  

当样式表增设!important时,内联冲突样式将会失效,以important为准。

 

继承

基于继承机制,样式不仅应用到指定的元素,还会应用到它的后代元素。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表