`

再谈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(Cascading Style Sheets,层叠样式表)是必不可少的一项技术。它不仅能够帮助设计师和开发者控制网页的布局、颜色、字体等视觉特性,还能通过媒体查询实现...

    《CSS3实战:开发与设计》源码

    《CSS3实战:开发与设计》书中所包含的示例的全部源码。 本书英文版书名《Practical CSS3:Developand Design》,作者Chris Mills是一名杰出的Web技术专家、Web开放标准的布道者和Web教育变革者。他创立了Opera网络...

    CSS特异性:掌握样式优先级的艺术

    ### CSS特异性:掌握样式优先级的艺术 在前端开发领域,CSS(层叠样式表)是一种必不可少的语言,它用于描述网页元素的外观和布局。为了更好地理解和应用CSS,本篇文章将深入探讨CSS特异性——一个关于样式优先级的...

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

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

    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变换更具...

    mui.css和input type=checkbox冲突,导致打不上勾(无法选中)的解决办法.zip

    总的来说,解决MUI CSS与`input[type="checkbox"]`冲突的问题需要对CSS样式有深入理解,并且可能涉及到特定开发环境的兼容性调整。通过合理地覆盖样式,以及利用`&lt;label&gt;`元素的特性,可以有效地解决这类问题。同时...

    css2.0 CHM 下载

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

    CSS2.0样式表中文手册

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

    精通CSS高级Web标准解决方案(带书签和源码)

    《精通CSS高级Web标准解决方案》是一本专注于深入理解与应用CSS技术的专业书籍,结合书签功能,便于读者高效查阅和学习。CSS(层叠样式表)是构建网页外观和布局的关键技术,它允许开发者分离内容与表现,实现网页的...

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

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

    css中文手册详细教程

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

    曹鹏CSS视频教程-58.冲突与具体性比较 4.rar

    具体性是CSS中用来确定哪些选择器更具有优先权的一个标准。具体性越高,对应的样式优先级就越高。具体性计算基于四个级别:ID选择器(#)、类选择器(.)、属性选择器和伪类([:])、以及元素选择器(无符号)。每个...

    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实现

    在本例中,我们将探讨如何仅使用CSS(Cascading Style Sheets)技术,不依赖JavaScript,来实现“鼠标滑过文字弹出一段说明文字”的功能。 首先,我们需要明白CSS的`:hover`伪类。`:hover`是CSS中的一个选择器,...

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

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

    css+div技术参考手册

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

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

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

Global site tag (gtag.js) - Google Analytics