`

再谈CSS优先权:old9解决优先权冲突的观点

阅读更多
  优先权问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多。

  首先就是CSS规则的specificity(特殊性),CSS2.1有一套关于specificity的计算方式,用一个四位的数字串(CSS2是三位)来表示,最终specificity越高的规则越特殊,在优先级判定时也就越有优势。关于specificity的具体计算在各种情况下的数字加成有如下一般规则:

  ◎ 每个ID选择符(#someid),加 0,1,0,0。 
  ◎ 每个class选择符(.someclass)、每个属性选择符(形如[attr=”"]等)、每个伪类(形如:hover等)加0,0,1,0 
  ◎ 每个元素或伪元素(:firstchild)等,加0,0,0,1 
  ◎ 其他选择符包括全局选择符*,加0,0,0,0。相当于没加,不过这也是一种specificity,后面会解释。 
  按这些规则将数字串逐位相加,就得到最终计算得的specificity,然后在比较取舍时按照从左到右的顺序逐位比较。



  举一些例子吧:

h1 {color: red;}
/* 只有一个普通元素加成,结果是 0,0,0,1 */
body h1 {color: green;}
/* 两个普通元素加成,结果是 0,0,0,2 */
——后者胜出
    
h2.grape {color: purple;}
/* 一个普通元素、一个class选择符加成,结果是 0,0,1,1*/
h2 {color: silver;}
/*一个普通元素,结果是 0,0,0,1 */
——前者胜出
    
html > body table tr[id=”totals”] td ul > li {color: maroon;}
/* 7个普通元素、一个属性选择符、两个其他选择符,结果是0,0,1,7 */
li#answer {color: navy;}
/* 一个ID选择符,一个普通选择符,结果是0,1,0,1 */
——后者胜出



除了specificity还有一些其他规则

  ◎ 文内的样式优先级为1,0,0,0,所以始终高于外部定义。这里文内样式指形如<div style=”color: red”>blah</div>的样式,而外部定义指经由<link>或<style>标签定义的规则。 
  ◎ 有!important声明的规则高于一切。 
  ◎ 如果!important声明冲突,则比较优先权。 
  ◎ 如果优先权一样,则按照在源码中出现的顺序决定,后来者居上。 
  ◎ 由继承而得到的样式没有specificity的计算,它低于一切其他规则(比如全局选择符*定义的规则)。 
  ◎ 关于经由@import载入的外部样式,由于@import必须出现在所有其他规则定义之前(如不是,则浏览器应该忽略之),所以按照后来居上原则,一般优先权冲突时是占下风的。
  这里需要提一下IE,IE是可以识别位置错误的@import的,但无论@import在什么地方,它都认为是位于所有其他规则定义之前的,这可能会引发一些误会。 



  所以优先权问题虽然看起来简单,但其背后还是有蛮复杂的机制的,需要多多留意。
  另外可以参考本站的另外两篇文章:
  ◎ CSS优先权之深入剖析(1) http://www.52css.com/article.asp?id=198
  ◎ CSS优先权之深入剖析(2) http://www.52css.com/article.asp?id=199
分享到:
评论

相关推荐

    css优先权详细解说

    了解CSS优先权对于解决样式冲突、确保页面呈现符合预期至关重要。 #### CSS优先权的基本原则 CSS优先权基于四个主要组成部分:ID选择器、类与属性选择器、元素选择器以及通配符选择器。它们分别对应于优先权计算中...

    CSS:The Definitive Guide, 4th Edition[CSS权威指南](英文版)

    读者通过阅读《CSS权威指南》,不仅可以掌握CSS的技术细节,更能学习到如何将理论应用到实际工作中,解决实际开发中遇到的问题,同时也能了解到CSS的最新进展和发展趋势。这对于前端开发者而言,无疑是一本极具价值...

    精通CSS高级Web标准解决方案-包含源码(高清PDF中文版)

    本书将最有用的CSS技术汇总在一起,在介绍基本的CSS概念和最佳实践之后,讨论了核心的CSS技术,例如图像、链接、列表操纵、表单设计、数据表格设计以及纯CSS布局。每一章内容由浅入深,直到建立比较复杂的示例。之后...

    Eric Meyer谈CSS(卷1)、(卷2)中文版

    内含“Eric Meyer谈CSS(卷1)”和“Eric Meyer谈CSS(卷2)”,pdf格式,中文版。(英文版名为“Eric Meyer on CSS”) 内容简介: 卷1:由CSS界传奇人物Eric Meyer所著,通过13个典型项目,完美结合理论与实践,...

    HTML5 CSS3 专题 :诱人的实例 3D旋转木马效果相册实例源码

    3D旋转木马效果相册利用了CSS3的transform属性,尤其是rotateY()和perspective属性,这两个属性结合可以创建出立体的3D旋转效果。rotateY()函数负责沿着Y轴进行旋转,而perspective属性则设置观察者到3D变换原点的...

    HTML5 CSS3 专题 :3D展示商品信息项目完整实例源码

    在3D展示中,CSS3的3D转换(`transform: translate3d()`、`rotateX()`、`rotateY()`等)是关键,可以实现物体的平移、旋转和缩放,创造出立体感。同时,`perspective`属性用于设置观察者的透视效果,使3D变换更具...

    css2.0 CHM 下载

    什么是样式表: CSS 是 Cascading Style Sheet 的缩写。译作「层叠样式表单」。是用于(增强)控制网页样式并允许将样式...高优先权样式将继承低优先权样式的未重叠定义但覆盖重叠的定义。例外请参阅 !important 声明。

    CSS2.0样式表中文手册

    CSS样式表中文手册什么是样式表: CSS 是 Cascading Style Sheet 的缩写。译作「层叠样式表单」。是用于(增强)控制网页...高优先权样式将继承低优先权样式的未重叠定义但覆盖重叠的定义。例外请参阅 !important 声明。

    css2.0字典

    高优先权样式将继承低优先权样式的未重叠定义但覆盖重叠的定义。例外请参阅 !important 声明。 链入外部样式表文件 (Linking to a Style Sheet) 你可以先建立外部样式表文件(.css),然后使用HTML的link对象。示例...

    精彩绝伦的CSS(Smashing CSS: Professional Techniques for Modern Layout)

    ### 精彩绝伦的CSS:Professional Techniques for Modern Layout #### 书籍概述 《精彩绝伦的CSS:Professional Techniques for Modern Layout》是一本由CSS领域著名专家Eric A. Meyer撰写的著作,该书深入浅出地...

    HTML5 CSS3 :canvas 模拟实现电子彩票刮刮乐实例代码

    例如,可以使用`:hover`伪类改变鼠标悬停在刮刮乐区域时的视觉反馈,或者使用CSS3的transition和animation属性创建动态效果。 在这个实例代码中,`09_canvas_guaguale`可能是一个包含具体实现的文件,可能包括HTML...

    CSS: The Missing Manual, 4th Edition

    - **解决实际问题**:每章末尾提供的解决方案能够帮助读者解决在实际开发过程中遇到的问题,比如如何优化性能、如何调试CSS等问题。 #### 六、附录与参考资料 - **CSS属性参考**:提供了一个全面的CSS属性索引,...

    CSS是Cascading Style Sheet 的缩写

    高优先权样式将继承低优先权样式的未重叠定义但覆盖重叠的定义。例外请参阅important声明。 将样式表加入到HTML中 http://www.cssplay.org.cn/css-tutorial/20080128/2.html   链入外部样式表文件 (Linking to a ...

    HTML5 CSS3 : 3D立方体旋转动画实例源码

    为了构建3D立方体,我们需要创建六个面,每个面都是一个独立的div元素,并应用相应的CSS样式。这些面会被定位并旋转到正确的位置,形成一个完整的立方体。CSS3的`perspective`属性用于设置观察者到3D元素的距离,这...

    CSS经典教程.pdf

    ### CSS经典教程知识点总结 #### 一、CSS简介与基础知识 - **CSS**:层叠样式表(Cascading Style Sheets)是一种用来表现HTML或XML等文件样式的计算机语言。 - **作用**:用于控制HTML元素的样式和布局,帮助实现...

    HTML5 CSS3 :无插件拖拽上传图片实例源码

    在CSS3方面,我们可以使用样式规则来美化这个拖放区域,例如设置边框、背景色、过渡效果等,使得拖放操作更加吸引人。此外,通过监听`dragenter`, `dragover`, 和 `dragleave`事件,我们可以动态改变dropzone的样式...

    css(样式)帮助文档帮助你写出好的样式

    提升指定样式规则的应用优先权。 示例: div { color:red!important } 应用于: IE4.0+ AADDRESSBBIGBLOCKQUOTEBODYCAPTIONCENTERCITECODECOLCOLGROUPDDDFNDIRDIVDLDTEMFORMHnHTMLIIMGINPUTINPUT type=buttonINPUT...

    精通css高级web标准解决方案(第二版高清pdf版)

    《精通CSS:高级Web标准解决方案(第二版高清PDF版)》是一本专为前端开发者深入理解CSS技术而编写的权威指南。这本书详细介绍了CSS在构建高效、可维护、响应式和适应性强的网页布局中的应用,是提升CSS技能的重要...

    CSS CSS CSS

    CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装

Global site tag (gtag.js) - Google Analytics