css优先级判断

概念

浏览器是通过判断优先级,来决定到底哪些属性值是与元素最相关的,从而应用到该元素上。优先级是由选择器组成的匹配规则决定的。

如何计算?

优先级是根据由每种选择器类型构成的级联字串计算而成的. 它不是一个对应相应匹配表达式的权重值.

如果优先级相同,元素最终会应用 CSS 中靠后的声明.

注意: 在文档树中的距离是不会对元素优先级计算产生影响的.(可以看文档中无视DOM树中的距离的例子)

优先级顺序

下列是一份优先级逐级增加的选择器列表:

  • 通用选择器*
  • 元素(类型)选择器
  • 类选择器
  • 属性选择器
  • 伪类
  • ID 选择器
  • 内联样式

事实上,元素还可以从父元素上继承一些样式,如color等属性。这些继承的样式的优先级永远低于元素本身的样式,包括通用选择器:

1 <div id=‘test‘>
2     <a href="#">text</a>
3 </div>
1 * {
2     color:red;
3 }
4
5 #test{
6     color:blue;
7 }

最终text的颜色是红色的。

!important 规则是例外

!important 规则被应用在一个样式声明中时,该样式声明会覆盖CSS中任何其他的声明, 无论它处在声明列表中的哪个位置. 尽管如此, !important规则还是与优先级毫无关系使用!important不是一个好习惯,因为它改变了你样式表本来的级联规则,从而难以调试。

一些不成文规则

  • 不要在全站范围的css中使用!important.
  • 只在需要覆盖全站范围的css或是外部css(例如引用的ExtJs或是YUI)的时候才在指定的页面上使用 !important
  • 不要在你的插件中使用!important
  • 永远都要优先考虑使用样式规则的优先级来解决问题而不是 !important

取而代之,你可以:

更好的利用CSS的级联属性

更多的使用适合的选择器。比如在你需要选定的对象元素前加上更多的元素,使选择的范围缩小,你的选择器就变得更有针对性,从而提高优先级:

1 <div id="test">
2   <span>Text</span>
3 </div>
4
5 div#test span { color: green }
6 span { color: red }
7 div span { color: blue }

无论你c?ss语句的顺序是什么样的,文本都会是绿色的(green)因为这一条规则是最有特殊性、优先级最高的。(同理,无论语句顺序怎样,蓝色(blue)的规则都会覆盖红色(red)的规则)

什么时候应该使用:

A) 一种情况

你的网站上有一个设定了全站样式的CSS文件,同时你(或是你同事)写了一些效果通常都是很差的行内样式(行内样式的优先级是最高的)。

在这种情况下,你就可以在你全局的CSS文件中写一些!important的样式来覆盖掉那些直接写在元素上的行内样式。

活生生的例子比如:有人在jQuery插件里写了糟糕的行内样式。

B) 另一种情况

1 #someElement p {
2     color: blue;
3 }
4
5 p.awesome {
6     color: red;
7 }

在外层有 #someElement 的情况下,你怎样能使 awesome 的段落变成红色呢?这种情况下,如果不使用!important,第一条规则永远比第二条的优先级更高。

怎样覆盖掉 !important

很简单,你只需要再加一条 !important 的CSS语句,将其应用到更高优先级的选择器(在原有基础上添加额外的标签、class或id选择器)上;或是保持选择器一样,但添加的位置需要在原有声明的后面(优先级相同的情况下,后边定义的会覆盖前边定义的)。

1 <div>
2   <a href="#" id="test">text</a>
3 </div>

想要把原有的绿色文本变成红色,提升优先级的方式:

1 #test.a{
2   color: red !important;<!--尽管这条声明在前,但是仍会覆盖下边的样式-->
3 }
4 a{
5   color: green !important;
6 }

不过

1 a{
2   color: green !important;
3 }
4 a{
5   color: red !important;<!--同样的选择器,后边的声明会覆盖前边的-->
6 }

原文来自:http://segmentfault.com/a/1190000000453851

时间: 2024-10-15 18:26:14

css优先级判断的相关文章

浅谈CSS优先级机制(一)

初次写随笔,如果有哪个地方不足还望大神指点改正,下面我来谈谈我对于CSS优先级的了解吧. CSS优先级,通俗的理解就是你给元素等一堆属性描述,然后最后到底是哪个描述作为最终显示的效果的规则或机制(个人理解).以下我将分为几个点来谈谈优先级的确定. 1.引入方式: CSS引入的方式,我目前只知道四种:内联式.内嵌式.导入式.链接式(当然网上的说法名称不一,理解就好). 各种引入方式的用法我在这里就不再多说了.以上我所按顺序罗列的四个方式是理论上的优先级顺序,也就是说,我使用内联式引入的css代码作

css优先级机制

所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序. 1.important >(内联样式)Inline style  >(内部样式)Internal style sheet >(外部样式)External style sheet (有个例外的情况,就是如果外部样式放在内部样式的后面,则外部样式将覆盖内部样式.) 2.CSS选择器优先级:id选择器优先级 > 类class选择器优先级 > 标签选择器优先级 1.文内的样式优先级为1,0,0,0,所以始终高于外部定义.

css优先级计算

主要的css选择器有id,class,tag,[],:,::等,而通常需要对其优先级进行判断的有id,class,tag,另外内联样式和!important也和css的优先级有关系. 如果将这五种不同情况的优先级以数字的形式来表示的话,其对应关系如下: !important(10000) > 内联样式(1000) > id(100) > class(10) > tag(1) 则通常的css优先级比较可转化为数值大小的比较,如:#list li和.list .content ul l

css 优先级 机制

多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External style sheet <(内部样式)Internal style sheet <(内联样式)Inline style 有个例外的情况,就是如果外部样式放在内部样式的后面,则外部样式将覆盖内部样式. 选择器的优先权--->权值 内联样式---1000: ID选择器----100:class选择器---10: 标签

css优先级

自适应布局 1.适应场景是:左右两列,一列设置浮动和设置宽度,另一列不需要设置浮动和宽度,只需设置overflow:hidden,就可以实现左右两列自适应.原理(BFC,清除浮动原理) 伪类与伪对象 在官方文档中伪类用classify来描述,而伪对象用create.从这里我们就能明白它们的区别: 伪对象则代表了某个元素的子对象,这个子对象虽然在逻辑上存在,但却并不实际存在于文档树中. 就像上文中的first-line,在DOM中其实并不存在.我们经常用的:before :after也属于伪对象.

css优先级汇总

我所理解的css优先级:当两个或者多个样式作用于同一个元素时,就会出现css优先级的问题. 多重样式优先级:当内联样式.内部样式和外部样式作用于同一个元素时,属于多重样式的范畴.优先级的顺序为内联样式>内部样式>外部样式. <head> <link href="style.css" rel="stylesheet" type="text/css" /> /*.color{color:red;}外部样式*/ &l

html网页的兼容性和css优先级

网页不仅是在一个浏览器上显示的网页,也要多考虑其他浏览器的兼容性,火狐.谷歌.搜狗等浏览器总体来说,网页的变化不大,最主要的是还是IE浏览器. color:red\9; IE6  IE7   IE8  都会执行这段代码. color:red\0 ; IE8  都会执行这段代码. _color:red ; *color:red ; >color:red ; <color:red ;  IE6  IE7  都会执行这段代码. 在编写IE6  IE7   IE8显示不同颜色的时候,要主要编写的顺序,

CSS优先级问题以及jQuery中的.eq()遍历方法和:eq()选择器的差别

在写一个TAB选项卡的时候遇到几个有意思的问题,记录下来 先把代码贴出来 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="

CSS/优先级

css的优先级 所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序. 样式表中的特殊性描述了不同规则的相对权重,它的基本规则是: 1 内联样式表的权值最高               style=""------------1000: 2 统计选择符中的ID属性个数.       #id --------------100 3 统计选择符中的CLASS属性个数. .class -------------10 4 统计选择符中的HTML标签名个数. p ------------