CSS选择器特殊性与重要性
特殊性
在编写CSS代码的时候,我们会出现多个样式规则作用于同一个元素的情况,例如
<!-- HTML -->
<header>
<nav class="nav-main" id="navigation">Here background</nav>
</header> /* CSS */
header nav {
background-color: red;
} #navigation {
background-color: green;
} .nav-main {
background-color: blue;
}
以上三个样式规则都会作用于 ID 值为 "navigation" 的 nav 标签,最终哪个样式规则会生效呢,这取决于选择器的特殊性(或优先级)高低,选择器特殊性高的样式会覆盖特殊性低的样式,经过测试 nav 标签的背景会显示为 green 绿色。
那么选择器特殊性是如何计算的呢?
通常,我们使用四个以逗号分隔的数字来表示特殊性,比如:
- 每个元素或伪元素选择器贡献特殊性为 0,0,0,1
- 每个类、伪类或者属性选择器的特殊性为 0,0,1,0
- 每个ID选择器的特殊性为 0,1,0,0
- 结合符和通配符的对特殊性没有贡献
计算一个组合选择器的特殊性的时候就先计算各种选择器的数量以及对应的特殊性再相加,比如
div ul li /* 0,0,0,3 3个元素选择器 */ div.aside ol li /* 0,0,1,3 1个类选择器,3个元素选择器 */ a:hover /* 0,0,1,1 1个伪类选择器,1个元素选择器 */ div.navlinks a:hover /* 0,0,2,2 1个类选择器,1个伪类选择器,2个元素选择器 */ .affix.top /* 0,0,2,0 多类选择器 注 */ input[type="text"] /* 0,0,1,1 1个属性选择器,1个元素选择器 */ input[name="sex"][type="radio"]
/* 0,0,2,1 2个属性选择器,1个元素选择器 */ #title em /* 0,1,0,1 1个 ID 选择器,1个元素选择器 */ h1#title em /* 0,1,0,2 1个 ID 选择器,2个元素选择器 */ * /* 0,0,0,0 1个通用选择器 */
注:多类选择器有多少个类就计算多少个类,不支持多类选择器的 IE6 会理解为一个类
比较选择器特殊性高低直接从左向右依次比较,数字大的则优先级更高,如果相同就比较下一位,所有位都相同则优先级是一样高,当选择器优先级一样高的时候后申明的样式会覆盖前面申明的样式
每个级别的优先级值是相互独立的,13个元素选择器写在一堆也不会比1个类选择器的特殊性高
第一个0是用于行内样式的,且仅用于行内样式
<nav style="background-color: gray;"></nav> <!-- 1,0,0,0 -->
重要性
有一样东西可以无视特殊性,那就是 !important。使用 !important 可以把任何样式规则标记为重要
.nav-main {
background-color: blue !important;
color: #666;
}
基本上,任何重要的样式规则都可以覆盖没有标记为重要的样式规则,
<div id="gohome"><a href="/" id="home">Home</a></div>
div#gohome a#home {
color: red;
}
div a {
color: green !important;
}
上面的代码会得到一个绿色 green 的链接,第一个规则有非常高的特殊性(0,2,0,2),
但是在 !important 面前一样没用,除非我们给第一个规则也标记为重要
div#gohome a#home {
color: red !important;
}
div a {
color: green !important;
}
这时候链接就变为红色 red 了,都标记为重要的情况下,则会使用前面提到的特殊性规则来解决,
所以使用 !important 的时候应当权衡,尽量不要用
另外,IE6 是支持 !important 的,只是不完全支持而已,当在同一个选择器中,在标记为重要的样式规则之后又重新定义了此样式则 !important 将失效
.header {
color: red !important; /* 标准浏览器 red */
color: green; /* IE6 green !important 失效 */
}
再有就是 IE6/7 可以允许在 !important 后面添加一些文字,依然能识别
.header {
color: red !important ie; /* ie6/7 red */
}
CSS选择器特殊性与重要性的更多相关文章
- CSS选择器的特殊性和LOVE HA
在CSS中当几个相同的选择器对同一个元素有不同的规则时,该怎么应用这些规则呢? 答案就是:CSS特殊性(CSS specificity) 选择器特殊性有选择器本身组成,特殊性由4个数值表述:0, 0, ...
- CSS选择器与CSS的继承,层叠和特殊性
什么是选择器?选择器{样式;},在{}之前的部分就是"选择器","选择器"指明了{}中的"样式"的作用对象,也就是"样式" ...
- 从覆盖bootstrap样式谈css选择器优先级
样式优先级 首先简单说几个定义样式的方式: 元素内嵌: <li><a href="" style="color:#ffffff;">SH ...
- CSS选择器学习小结
关于CSS选择器的问题,在实际项目中,以及一般的前端面试中会经常遇到.下面对此做一小结,梳理和巩固相关方面知识.(如有不妥之处,还望大家及时批评指正,以免误导他人) 一.选择器种类 1.id选择器(# ...
- CSS选择器的权重与优先规则?
我们做项目的时候,经常遇到样式层叠问题,被其他的样式覆盖,或者写的权重不高没效果,对权重没有具体的分析,做了一个总结. css继承是从一个元素向其后代元素传递属性值所采用的机制.确定应当向一个元素应用 ...
- css选择器万年不变的优先级和权重
我们在使用CSS对网页元素定义样式时经常会遇到这种情况:要对一般元素应用一般样式,然后在更特殊的元素上覆盖它们.那么我们怎么样来保证我们所新定义的元素样式能覆盖目标元素上原有的样式呢? 在CSS中,会 ...
- CSS选择器的权重与优先规则
权重顺序 “important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 继承 > 通配符”. 原文:http://w ...
- 深入理解CSS选择器优先级的计算
选择器的优先级关系到元素应用哪个样式.在CSS2.1的规范(http://www.w3.org/TR/2009/CR-CSS2-20090908/cascade.html#specificity)中是 ...
- 前端--关于css选择器
css选择器就好像表达式一样,返回一组或者一个html元素,后面的样式声明块应用到返回的元素上.所以可以把css选择器理解为某个或者某一类html元素的抽象的写法. 在讲具体的各种选择器之前要提一下选 ...
随机推荐
- 谈谈CSS预处理技术中for循环的应用-CSS Sprite
各种新技术的出现,推动着Web前端技术飞速发展,在提升用户体验的同时也方便开发者: 在前端优化时,我们使用CSSSprite技术,把多个图片合在一张图片上,然后通过background-image,b ...
- MyEclipse自动生成hibernate实体类和配置文件攻略
步骤1:找到导航栏里面的window--showView然后输入db brower,打开数据库浏览窗口步骤2:在数据库浏览窗口里只有一个Myeclipse自带的数据库,该数据没有用,我们在空白的地方右 ...
- Oracle Purchasing QUESTIONS AND ANSWERS
Topic Summary Topic: CORRECTIONS: Corrections Topic: DELIVER: Receiving Delivery Topic: DROPSHIP: Dr ...
- Oracle 物化视图 说明
一. 物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可 ...
- linux 下面 jdk1.7 rpm 包的安装
1.下载安装jdk7.0 for linux 我下载的版本为:jdk-7u2-linux-i586.rpm 下载地址为:http://www.oracle.com/technetwork/java/j ...
- Inkpad中文翻译已合并到官方项目
今天 Steve Sprang 已合并了#100提交请求,Inkpad即将在AppStore上发布简体中文版了! 20天前因一个偶然原因启动翻译的: 当晚(周六)我想对iPad上的矢量绘图软件进行交互 ...
- Linux高级编程--04.GDB调试程序(查看数据)
查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的.当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入"栈"(Stack)中.你可以用 ...
- 【解析 . PPT版】干货:阿里全息大数据构建与应用(包括:互联网金融、互联网+、精准营销...)
作者:毛波,阿里巴巴资深数据专家,阿里数据管理平台(DMP)产品负责人. 摘要: 回顾传统数据仓库.商业智能到大型分布式数据平台的进化历程,深入阐述阿里的数据发展历史和数据观,以阿里DMP平台为例深入 ...
- 将PDM文件导出成CHM帮助文件
实际开发中常常将维护数据库字段用 powerdesigner 维护起来,而实际要查阅 数据库用了什么字段是,常常又不方便去打开PDM 文件去找. 下面分享一个小工具,效果看下图: 有这个小工具, PD ...
- 【转载】一步一步写算法(之hash表)
转载自:http://blog.csdn.net/feixiaoxing/article/details/6885657 [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaox ...