`

再谈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特异性——一个关于样式优先级的...

    Eric Meyer谈CSS(卷2)下载 pdf

    《Eric Meyer谈CSS(卷2)》是一本深入探讨CSS技术的专业书籍,由业界知名前端开发者Eric Meyer撰写。这本书是CSS学习者和实践者的宝贵资源,涵盖了CSS的高级概念、技巧以及最佳实践,旨在帮助读者提升对CSS的掌握...

    CSS:The Definitive Guide, 4th Edition[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个典型项目,完美结合理论与实践,...

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

    本书将最有用的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字典

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

    CSS酷站CSS特效华丽CSS

    9. **CSS图标**:使用`content`伪元素和`unicode`字符,或者SVG图标库,可以创建无PNG依赖的图标系统。 10. **粒子背景**:通过JavaScript和CSS配合,可以创建动态粒子效果作为背景,增加网站动感。 以上内容仅是...

    精通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是Cascading Style Sheet 的缩写

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

    CSS2.0帮助文档 - 3.0帮助文档 - 4.0帮助文档

    CSS4.0还计划改进层叠策略,使得样式冲突的解决更加智能。 学习这些帮助文档,你将能够了解和掌握从基础到高级的CSS技术,包括但不限于: 1. 选择器的使用:理解ID、类、标签等基本选择器,以及更复杂的组合选择器...

Global site tag (gtag.js) - Google Analytics