`

关于CSS的规则优先级

阅读更多

      在CSS中,如果某个元素可以匹配中多条样式规则时,如何判定使用哪一条规则,这就是一个优先级问题?

      带着这个问题,在Google中找到下面这篇web,对上面的问题,做了一番解释。现在转贴于下,作为了解的起点。


      CSS规则层叠时的优先级算法


CSS 规则的优先级是Web前端开发人员必须理解的一个概念,我们常用的添加样式的方法有4种。

inline style

embeded style

external style

user style

inline style是丑陋的,它们穿梭在HTML文档中,与HTML元素扭成一团,给Web前端开发人员造成了许多麻烦。它们往往以这样的面目出现:

<p style="color:red;">This is a paragraph.< /p>

 embeded style比inline style绅士一些,它们也寄宿在HTML文档中,但是它们不屑于与HTML元素扭成一团。它们往往在 < style> 元素中出现:

<style type="text/css" media="screen">
p{ color: red; }
< /style>

 external style是个贵族,它不愿意同HTML呆在一起,所以干脆以外部文件的形式独立存在。通常我们使用 < link> 元素或者@import语句将它们导入HTML。

<link rel="stylesheet" type="text/css" href="style.css" media="screen" />

 我们应当尽可能使用external style,我想理由有很多,大家都知道,我也就不重复了。

还 有一种user style与以上三者略有不同,如果你使用IE浏览器,那么你可以在Tools – Internet Options – General – Appearance – Accessibility – User style sheet 下找到添加user style的地方(原谅我没有中文版的IE浏览器)。

既然我们有如此多的添加style的方法,那么难以避免样式会产生层叠。如:

<p class="intro" style="color:red;">This is a paragraph.< /p>

 我们在使用以上inline style的同时,又在我们的external style中使用了:

p{ color: yellow; } 

 我们甚至还在拥有 class="intro" 的 < p> 元素上应用了:

p.intro{ color: blue; } 
 

这样我们就 在同一元素的同一属性 color 上,拥有多条CSS规则指定了值 。这种情况被称为层叠(Cascading)。当层叠发生时,CSS Parser将根据优先级算法来确定最终选用的值。

优先级算法按照先后顺序考虑以下三个方面:

CSS规则的重要性和来源

CSS规则的特殊性

CSS规则在文档中出现的顺序

算法过程分为4步:

1、针对某一元素的某一属性,列出所有给该属性指定值的CSS规则。如上例中,在 class="intro" 的 < p> 元素上,有三条CSS规则指定了 color 属性。

2、根据声明的重要性和来源进行优先级排序

重要性有两种:

important

normal(即非important)

在CSS规则后添加 !important 的重要性要高于没有添加的。

来源有三种:

user agent stylesheet – 浏览器默认样式

author stylesheet – 开发人员定义的样式

user stylesheet – 用户在浏览器中定义样式

重要性和来源的优先级排序从低到高是:
 
user agent stylesheet

user style sheets中的normal规则

author style sheets中的important规则

user style sheets中的important规则

经过以上排序,如果有一条CSS规则的优先级高于其他所有竞争规则,那么算法结束,返回该最高优先级指定的值。如果有多条CSS规则具有最高优先级,那么它们将要继续竞争下去,算法将进入第3步。

3、按照特殊性(Specificity)排序

CSS将计算多条规则中指定每一规则的selector的特殊性值,该值越高,优先级越高。

特殊性值是一个由4个整数组成的一个类似数组的值:a,b,c,d,其中a的权重最高,依次类推,d的权重最低。selector特殊性值的计算方法是:

如果该规则是一条inline style,那么a = 1

如果该规则由selector指定,selector中出现的id selector的数量就是b的值

e.g.
#AA{
color:blue;
} 

 优先级高于

.test{
color:red;
}
 

如果该规则由selector指定,selector中出现的属性selector(包括class selector)或者伪类selector的数量总和就是c的值!

如果该规则由selector指定,selector中出现的元素selector或者是伪元素selector的数量总和就是d的值。 

universal selector * 的特殊性值为0,0,0,0

官方网站 提供了一些例子可以加深理解。

在根据特殊性值排序时,由于a的权重最高,因此首先比较a,在a相同的情况,在比较b,依次类推。因此不论b,c,d值有多大,inline style总是具有最高的特殊性。

如果根据以上特殊性排序后,有一条CSS规则的优先级高于其他所有竞争规则,那么算法结束,返回该最高优先级指定的值。如果有多条CSS规则具有最高优先级,那么它们将要继续竞争下去,算法将进入第4步。

4、比较CSS规则在文档中出现的顺序

出现在后的总是比出现在前的具有更高的优先级,因此出现在最后的那条语句将被作为该属性的值。

 

 

      对于其中的按照特殊性(Specificity)排序,下面的web做了一些更具体的示例,包括图示解释,可以帮助理解。

      关于CSS Selector的优先级


      如果要了解更多,首先可以从CSS的官网上寻找:

      http://www.w3.org/Style/CSS/

分享到:
评论

相关推荐

    css样式优先级比较实例

    在CSS(层叠样式表)中,样式优先级是一个关键概念,它决定了浏览器如何解析和应用不同的CSS规则来渲染网页元素。本实例将深入探讨CSS样式的优先级比较,帮助你更好地理解和控制页面的视觉呈现。 首先,我们需要...

    css优先级总结

    初学者往往会觉得CSS非常简单直观,但实际上,随着对CSS掌握程度的加深,我们会发现其中包含着许多复杂的规则与特性,其中之一便是CSS的选择器优先级。 #### 二、CSS优先级基础知识 CSS优先级是指当多个样式规则...

    css样式应用优先级实用PPT课件.pptx

    CSS 样式应用优先级是指在CSS样式规则应用时的顺序和优先级。该优先级规则决定了哪些样式规则将被应用于HTML元素。下面是CSS样式应用优先级的详细解释: 1. 重要声明(!important) 重要声明是CSS样式规则中最高的...

    HTML5&CSS3网页制作:CSS优先级.pptx

    在多个CSS规则应用于同一元素时,理解CSS优先级至关重要,因为它决定了哪个样式会生效。这个概念对于创建美观且功能完备的网页至关重要。 首先,我们来探讨CSS优先级的基本原则: 1. 继承性:当一个元素没有明确的...

    CSS优先级总结.pdf

    在CSS中,优先级是指样式规则的应用顺序,高优先级的样式规则将覆盖低优先级的样式规则。 在CSS中,有多种选择器可以用来指定样式规则,每种选择器都有其自己的优先级。以下是常见的选择器和它们的优先级: 1. !...

    CSS 优先级 详细分析

    CSS优先级是网页设计中一个至关重要的概念,它决定了浏览器如何解析和应用样式规则,从而影响页面元素的呈现。在深入探讨优先级之前,我们先简单回顾一下CSS的基础。CSS,全称为层叠样式表(Cascading Style Sheets...

    CSS优先级计算的规则

    - 如果选择器类型相同,则后定义的CSS规则优先级更高。 - 如果存在多个选择器具有相同的权重,则通常遵循“就近原则”,即离被应用元素最近的规则优先。 - 在同一个选择器中,如果通过逗号分隔定义了多个规则,那么...

    CSS优先级冲突:终极解决指南

    - **编写清晰的注释**:为CSS规则提供上下文和目的说明。 - **模块化CSS**:使用CSS模块或BEM(Block Element Modifier)方法组织代码,使得代码更加模块化,易于管理和扩展。 #### 八、总结 解决CSS优先级冲突是...

    同级情况下CSS的优先级探讨

    例如,如果在LINK所链接的样式表(mycss.css)中定义了以下一条样式规则: H1{color:red}同时在嵌入式样式定义中也定义了一条规则:H1{color:yellow}在网页中的样式定义如下所示:&lt;HEAD&gt;&lt;LINK rel=...

    css优先级98908u0

    它可以使某个特定的CSS规则始终生效,无论其他规则如何定义。例如: ```css .classA {font-size: 12px;} #idA {font-size: 20px !important;} ``` 在这个例子中,即使`.classA`的定义出现在`#idA`之后,由于`#idA`...

    CSS优先级规则的细节

    详解CSS优先级的读法,CSS优先级包含四个级别(文内选择符,ID选择符,Class选择符,元素选择符)以及各级别出现的次数。根据这四个级别出现的次数计算得到CSS的优先级。  最近看到篇对CSS优先级有比较好的解释的...

    CSS规则层叠时的优先级算法

    important规则优先级高于用户定义样式。 2. CSS规则的特殊性:特殊性是计算各个选择器权重的方法,它由四部分组成:a,b,c,d,权重从高到低。内联样式(a=1)的特殊性值最高,其次是id选择器(b),然后是类选择器、...

    使用DIV+CSS做网站时CSS样式的优先级

    CSS 样式的优先级是指在多个样式规则同时作用于同一个元素时,浏览器如何决定采用哪一个样式规则。一般来说,CSS 样式的优先级顺序是:[1 位重要标志位] &gt; [4 位特殊性标志] &gt; 声明先后顺序。 使用 `!important` ...

    网页css优先级为您详细解读

    特殊性是一个量度,用以表示某个CSS规则相对于其他规则的优先级权重,用一组数字来表示(通常是三位数,但在CSS 2.1中使用四位数)。特殊性的计算方法是这样的:最后,按正确的顺序写出三个数字,不要加空格或逗号,...

    CSS优先级算法如何计算?有哪些判定规定及计算方式

    关于CSS specificity CSS 的specificity 特性或称非凡性,它是一个衡量CSS值优先级的一个标准,既然作为标准,就具有一套相关的判定规定及计算方式,specificity用一个四位的数 字串(CSS2是三位)来表示,更像四个...

    关于CSS选择器优先级的判断题附结果截图

    以下是关于CSS选择器优先级的一些详细说明: 首先,CSS选择器的优先级由四个部分组成,每个部分对应一个权重值: 1. ID选择器(#id):每个ID选择器的权重为100。 2. 类选择器(.class)、属性选择器和伪类(如:...

    权重和层叠规则决定了CSS样式优先级

    首先,给大家看一篇关于CSS优先级的示例 复制代码代码如下: &lt;span xss=removed&gt;&lt;html&gt; &lt;head&gt; &lt;style type=”text/css”&gt; #redP p { /* 权值 = 100+1=101 */ color:#F00; /* 红色 */ } #redP .red...

    CSS选择器权重计算及优先级

    以下是关于CSS选择器权重计算及优先级的详细解释: 首先,我们要了解CSS选择器的四个等级及其对应权重: 1. **内联样式**(权重1000):这是最高级别的权重,当直接在HTML元素中使用`style`属性定义样式时,例如`;...

    新手学习css优先级

    权重越高的选择符,其对应的样式规则优先级也越高。浏览器会根据选择符类型计算一个总的权重值,权重高的规则将覆盖权重低的规则。 3. !important标识符:在CSS规则中,可以使用!important标识符来提高单个属性的...

    css的导入方式以及优先级 测试

    以下是对CSS导入方式及优先级的详细阐述: 1. **内联样式**: 内联样式是通过在HTML元素的`style`属性中定义CSS来实现的。例如: ```html ;"&gt;这是一个红色的段落 ``` 内联样式的优先级是最高的,因为它们直接...

Global site tag (gtag.js) - Google Analytics