最近一直在解决ext里css冲突问题,终于找到了css的加权算法,分享给大家。
CSS执行顺序与优先权的问题其实就是一个冲突解决的问题,当同一个元素(或内容)被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在什么地方,它都认为是位于所有其他规则定义之前的,这可能会引发一些误会。
所以优先权问题虽然看起来简单,但其背后还是有蛮复杂的机制的,需要多多留意。
如果想系统的研究一下可以去:http://www.52css.com/ 找找,资源很多。
分享到:
相关推荐
CSS优先权基于四个主要组成部分:ID选择器、类与属性选择器、元素选择器以及通配符选择器。它们分别对应于优先权计算中的四个数字,从左至右依次表示: 1. **ID选择器**(如`#someid`)的权重最高,每个ID选择器计...
避免使用下划线`_`,因为它可能引发浏览器兼容性问题,并与JavaScript变量命名冲突。 6. **避免滥用id**:id应该是唯一的,主要用于JS操作,而非样式定义。尽量使用class,因为class可以重复使用,且CSS选择器的...
总结一下,HTML、CSS和JavaScript的加载顺序问题对于提高网页性能至关重要。合理的加载顺序和资源管理策略可以大大提升用户体验。在实践中,开发者应该根据具体情况和资源的依赖关系选择合适的解决方案,以确保网页...
CSS网站布局与美化CSS网站布局与美化CSS网站布局与美化CSS网站布局与美化CSS网站布局与美化CSS网站布局与美化CSS网站布局与美化CSS网站布局与美化CSS网站布局与美化CSS网站布局与美化CSS网站布局与美化CSS网站布局与...
在网页设计中,屏幕滚动与CSS动画的结合是一种常见的交互设计手法,能够为用户提供更为丰富的视觉体验。"屏幕滚动到相应位置,执行css动画"这一技术主要涉及到CSS的定位、媒体查询(Media Queries)以及CSS动画(CSS...
5. **避免使用下划线**:在CSS选择器中不建议使用下划线(`_`),原因是输入时节省按键次数,以及解决浏览器兼容问题(例如,在IE6中,带下划线的选择器可能无效),同时便于与JavaScript变量名区分。 #### 三、CSS...
Lint和样式表的顺序为 。 产品特点 对规则和规则内容进行排序。 对属性进行排序。 按不同选项对规则进行排序。 组属性,自定义属性,美元变量,嵌套规则,嵌套规则。 支持CSS,SCSS(使用 ),HTML(带有 ),...
今天偶尔看到这么一个问题,然后便上网查了很多资料,也做了相应的实验,现在我们来简单的看一下CSS的执行顺序问题。 1、确定CSS样式的导入方式 通常情况下我们知道的CSS导入方式有如下四种: a、链入外部样式 ...
资源名称:css编写顺序和命名规范资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
附录收录了网站发布与管理的知识和160个应用CSS时出现频度较高的英文单词及其中文解释。书中给出了大量详细的案例,并对案例进行分析,便于读者在理解的基础上,直接修改后使用。《HTML+CSS网页设计与布局从入门到...
设计模式是解决常见问题的标准化解决方案,此书可能包含了一些常见的网页设计模式,如模块化设计、响应式框架、移动优先策略等。读者将学习如何运用这些模式来构建可扩展、可维护和适应性强的网站。 通过以上四个...
什么是样式表: CSS 是 Cascading Style Sheet 的缩写。译作「层叠样式表单」。是用于(增强)控制网页样式并允许将样式...高优先权样式将继承低优先权样式的未重叠定义但覆盖重叠的定义。例外请参阅 !important 声明。
CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装 CSS CSS 资料套装
高优先权样式将继承低优先权样式的未重叠定义但覆盖重叠的定义。例外请参阅 !important 声明。 链入外部样式表文件 (Linking to a Style Sheet) 你可以先建立外部样式表文件(.css),然后使用HTML的link对象。示例...
查找一些教材中(w3schools等),只说css的顺序是“元素上的style” > “文件头上的style元素” >“外部样式文件”,但对于样式文件中的多个相同样式的优先级怎样排列,没有详细说明。经过测试和继续搜索,得知...
本文将详细解析CSS选择器优先级的实战应用,帮助开发者理解并解决样式覆盖的问题。 首先,我们要了解CSS选择器的四种基本类型,它们的优先级顺序如下: 1. **行内样式 (inline styles)**:这是最高优先级,通过`...
CSSCheckStyle是一个集成了CSS代码的解析、检查、修复与压缩的工具,它能够确保CSS代码遵循既定的编码规范,提高代码质量和压缩效率,同时方便开发者的代码维护。以下从几个方面详细介绍CSSCheckStyle所涉及的知识点...
导致设计师在没有定义某个CSS属性时,不同的浏览器会按照自己的默认值来为没有定义的样式赋值,所以我们要先定义好一些CSS样式,来让所有浏览器都按照同样的规则解释CSS,这样就能避免发生这种问题。 目前有很多...
第13章 CSS与JavaScript的综合应用 13.1 JavaScript概述 13.2 JavaScript语法基础 13.3 实例一:输入时高亮显示的Excel表格 13.4 实例二:由远到近的文字 13.5 实例三:跑马灯特效 13.6...
当项目js(css)文件使用越来越多,js 文件的加载也成了性能上的一个问题,此资源能够在页面全部加载完成后异步加载js等资源文件,它可以顺序加载资源列表,也可以并发加载资源列表,它包含一个方法调用接口:...