Home >Web Front-end >HTML Tutorial >CSS 样式优先级_html/css_WEB-ITnose

CSS 样式优先级_html/css_WEB-ITnose

WBOY
WBOYOriginal
2016-06-24 11:35:161215browse

CSS 样式优先级

当创建的样式表越来越复杂时,一个标签的样式将会受到越来越多的影响,这种影响可能来自周围的标签,也可能来自其自身。下面我们从这两方面去看看 CSS 样式的优先级。

CSS 的继承性

CSS 的继承特性指的是应用在一个标签上的那些 CSS 属性被传到其内嵌标签上。看下面的 HTML 结构:

<div>    <p></p></div>

如果

有个属性 color: red,则这个属性将被

继承,即

也拥有属性 color: red。

由上可见,当网页比较复杂, HTML 结构嵌套较深时,一个标签的样式将深受其祖先标签样式的影响。影响的规则是:

CSS 优先规则1: 最近的祖先样式比其他祖先样式优先级高。

例1:

<!-- 类名为 son 的 div 的 color 为 blue --><div style="color: red">    <div style="color: blue">        <div class="son"></div>    </div></div>

如果我们把一个标签从祖先那里继承来的而自身没有的属性叫做“祖先样式”,那么“直接样式”就是一个标签直接拥有的属性。又有如下规则:

CSS 优先规则2:“直接样式”比“祖先样式”优先级高。

例2:

<!-- 类名为 son 的 div 的 color 为 blue --><div style="color: red">    <div class="son" style="color: blue"></div></div>

选择器的优先级

上面讨论了一个标签从祖先继承来的属性,现在讨论标签自有的属性,有时候我们会遇到一个标签同时被应用了多个同一种属性,我们便需要确定这些属性的优先级。我们有如下规则:

CSS 优先规则3:优先级关系:内联样式 > ID 选择器 > 类选择器 > 标签选择器

其中,伪元素,如::first-line 被当做标签选择器;伪类,如:link 则被当做类对待。

例3:

// HTML<div class="content-class" id="content-id" style="color: black"></div>// CSS#content-id {    color: red;}.content-class {    color: blue;}div {    color: grey;}<div> 最终的 color 为 black,因为内联样式比其他选择器的优先级高。

但我们常常会看到一个选择器是由多个 ID 选择器、类选择器和标签选择器组合而成。有如下规则:

CSS 优先规则4:当一个 CSS 选择器由多个 ID 选择器、类选择器或者标签选择器组合而成时,先比较 ID 选择器的个数,个数多者优先级高;若个数相同,再比较类选择器,个数多者优先级高;若仍相同,再比较标签选择器,个数多者优先级高,若仍相同,则位置在下面的优先级高。

例4:

// HTML<div id="con-id">    <span class="con-span"></span></div>// CSS#con-id span {    color: red;}div .con-span {    color: blue;}由规则 4 可见,<span> 的 color 为 red。

如果外部样式表和内部样式表中的样式发生冲突会出现什么情况呢?这与样式表在 HTML 文件中所处的位置有关。样式被应用的位置越在下面则优先级越高,其实这仍然可以用规则 4 来解释。

例5:

// HTML<link rel="stylesheet" type="text/css" href="style-link.css"><style type="text/css">@import url(style-import.css); div {    background: blue;}</style><div></div>// style-link.cssdiv {    background: lime;}// style-import.cssdiv {    background: grey;}从顺序上看,内部样式在最下面,被最晚引用,所以 <div> 的背景色为 blue。

上面代码中,@import 语句必须出现在内部样式之前,否则文件引入无效。当然不推荐使用 @import 的方式引用外部样式文件,原因见另一篇博客。

CSS 还提供了一种可以完全忽略以上规则的方法,当你一定、必须确保某一个特定的属性要显示时,可以使用这个技术。

CSS 优先规则5:属性后插有 !important 的属性拥有最高优先级。若同时插有 !important,则再利用规则 3、4 判断优先级。

例6:

// HTML<div class="father">    <p class="son"></p></div>// CSSp {    background: red !important;}.father .son {    background: blue;}虽然 .father .son 拥有更高的权值,但选择器 p 中的 background 属性被插入了 !important,所以 <p> 的 background 为 red。

错误的说法

在学习过程中,你可能发现给选择器加权值的说法,即 ID 选择器权值为 100,类选择器权值为 10,标签选择器权值为 1,当一个选择器由多个 ID 选择器、类选择器或标签选择器组成时,则将所有权值相加,然后再比较权值。这种说法其实是有问题的。比如一个由 11 个类选择器组成的选择器和一个由 1 个 ID 选择器组成的选择器指向同一个标签,按理说 110 > 100,应该应用前者的样式,然而事实是引用后者的样式。错误的原因是:选择器的权值不能进位

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn