css优先级判断
概念
浏览器是通过判断优先级,来决定到底哪些属性值是与元素最相关的,从而应用到该元素上。优先级是由选择器组成的匹配规则决定的。
如何计算?
优先级是根据由每种选择器类型构成的级联字串计算而成的. 它不是一个对应相应匹配表达式的权重值.
如果优先级相同,元素最终会应用 CSS 中靠后的声明.
注意: 在文档树中的距离是不会对元素优先级计算产生影响的.(可以看文档中无视DOM树中的距离的例子)
优先级顺序
下列是一份优先级逐级增加的选择器列表:
- 通用选择器
*
- 元素(类型)选择器
- 类选择器
- 属性选择器
- 伪类
- ID 选择器
- 内联样式
事实上,元素还可以从父元素上继承一些样式,如color等属性。这些继承的样式的优先级永远低于元素本身的样式,包括通用选择器:
<div id='test'>
<a href="#">text</a>
</div>
* {
color:red;
} #test{
color:blue;
}
最终text的颜色是红色的。
!important
规则是例外
当!important
规则被应用在一个样式声明中时,该样式声明会覆盖CSS中任何其他的声明, 无论它处在声明列表中的哪个位置. 尽管如此, !important
规则还是与优先级毫无关系使用!important
不是一个好习惯,因为它改变了你样式表本来的级联规则,从而难以调试。
一些不成文规则
不要在全站范围的css中使用
!important
.只在需要覆盖全站范围的css或是外部css(例如引用的ExtJs或是YUI)的时候才在指定的页面上使用
!important
。不要在你的插件中使用
!important
。永远都要优先考虑使用样式规则的优先级来解决问题而不是
!important
。
取而代之,你可以:
更好的利用CSS的级联属性
更多的使用适合的选择器。比如在你需要选定的对象元素前加上更多的元素,使选择的范围缩小,你的选择器就变得更有针对性,从而提高优先级:
<div id="test">
<span>Text</span>
</div> div#test span { color: green }
span { color: red }
div span { color: blue }
无论你css语句的顺序是什么样的,文本都会是绿色的(green)因为这一条规则是最有特殊性、优先级最高的。(同理,无论语句顺序怎样,蓝色(blue)的规则都会覆盖红色(red)的规则)
什么时候应该使用:
A) 一种情况
你的网站上有一个设定了全站样式的CSS文件,同时你(或是你同事)写了一些效果通常都是很差的行内样式(行内样式的优先级是最高的)。
在这种情况下,你就可以在你全局的CSS文件中写一些!important
的样式来覆盖掉那些直接写在元素上的行内样式。
活生生的例子比如:有人在jQuery插件里写了糟糕的行内样式。
B) 另一种情况
#someElement p {
color: blue;
} p.awesome {
color: red;
}
在外层有 #someElement 的情况下,
你怎样能使 awesome
的段落变成红色呢?这种情况下,如果不使用!important,第一条规则永远比第二条的优先级更高。
怎样覆盖掉 !important
很简单,你只需要再加一条 !important
的CSS语句,将其应用到更高优先级的选择器(在原有基础上添加额外的标签、class或id选择器)上;或是保持选择器一样,但添加的位置需要在原有声明的后面(优先级相同的情况下,后边定义的会覆盖前边定义的)。
<div>
<a href="#" id="test">text</a>
</div>
想要把原有的绿色文本变成红色,提升优先级的方式:
#test.a{
color: red !important;<!--尽管这条声明在前,但是仍会覆盖下边的样式-->
}
a{
color: green !important;
}
不过
a{
color: green !important;
}
a{
color: red !important;<!--同样的选择器,后边的声明会覆盖前边的-->
}
原文来自:http://segmentfault.com/a/1190000000453851
css优先级判断的更多相关文章
- CSS 优先级判断
在面试中被问到这个问题 来记录下 发现自己之前之所以会忘记还是缺少理解的记忆 参考 CSS权威指南 一个CSS选择器的特殊性值表述为4个部分 0 0 0 0 对于选择器中给定的各个ID的属性值 ...
- css !important用法以及CSS样式使用优先级判断
之前一直看到很多css中都有!important这个样式,一直不知道有什么作用的,今天在网上详细了解了一下,看了别人的博客,顺便转载收藏一下 css !important用法CSS样式使用优先级判断 ...
- css优先级计算
主要的css选择器有id,class,tag,[],:,::等,而通常需要对其优先级进行判断的有id,class,tag,另外内联样式和!important也和css的优先级有关系. 如果将这五种不同 ...
- css优先级机制
所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序. 1.important >(内联样式)Inline style >(内部样式)Internal style sheet ...
- [05] css优先级
1.优先级计算规则(特殊性) 在css中,有不同的方式编写css,如果想给同一个标签设置样式,选择器的写法有很多种,那么当多个样式都应用于同一个标签,标签优先选择哪个样式呢?按照以下规则: 现有 0, ...
- CSS优先级的两种理解方式
方式一:值相加 我们先去MDN看看官方的解释: 优先级是如何计算的? 优先级就是分配给指定的 CSS 声明的一个权重,它由 匹配的选择器中的 每一种选择器类型的 数值 决定. 而当优先级与多个 CSS ...
- css选择器及css优先级
三个css选择器:id选择器#test1{ }.class选择器.test2{ }.标签选择器div{ }对三个div:<div>我是普通div</div>.<div i ...
- 关于CSS的优先级,CSS优先级计算
原则一: 继承不如指定原则二: #id > .class > 标签选择符原则三:越具体越强大原则四:标签#id >#id ; 标签.class > .class CSS优先级权 ...
- css 优先级 机制
多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External style sheet ...
随机推荐
- python 时间处理(time和datetime介绍)
python的有关时间的有哪几种呢?今天我们介绍两个:time和datetime time模块提供各种操作时间的函数 datetime模块定义了下面这几个类: datetime.date:表示日期的类 ...
- C++:类型转换
5.3 类型转换 5.3.1 系统预定义类型间的转换 1. 隐式转换: 例如: int x=5,y; y=3.5+x; //系统会自动先将int型的5转换为double型的5. ...
- PCL—综述—三维图像处理
点云模型与三维信息 三维图像是一种特殊的信息表达形式,其特征是表达的空间中三个维度的数据.和二维图像相比,三维图像借助第三个维度的信息,可以实现天然的物体-背景解耦.除此之外,对于视觉测量来说,物体的 ...
- Android如何获取开机启动项列表
static final String BOOT_START_PERMISSION = "android.permission.RECEIVE_BOOT_COMPLETED"; p ...
- hibernate--关联映射(一对多)
在对象模型中,一对多的关联关系,使用集合来表示. 实例场景:班级对学生:Classes(班级)和Student(学生)之间是一对多的关系. 对象模型: 多对一.一对多的区别: 多对一关联映射:在多的一 ...
- apk反编译(2)smali语言及文件
Smali语言是Davlik的虚拟机使用的一种语言,用toolapk反编译apk后,可以见到大量的.smali文件. 可以按照smali语法对其修改,然后重新生成一个未签名的apk. 下面是一个示例: ...
- Control Flow in Async Programs
Control Flow in Async Programs You can write and maintain asynchronous programs more easily by using ...
- socket编程---一个简单例子
服务器端代码(单线程): import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRe ...
- [swustoj 1023] Escape
Escape Description BH is in a maze,the maze is a matrix,he wants to escape! Input The input cons ...
- Android 怎样使用API
本文针对Android开发如何使用API文档进行一些经验分享. 1.为什么需要掌握API的使用. 也许你需要完成一个功能时很多时候你在网上google一番,因为很可能找到有用的代码片段,甚至不用关心具 ...