Css样式优先级

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

CSS 的继承性

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

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

  如果 <div>有个属性 color: red,则这个属性将被 <p> 继承,即 <p> 也拥有属性 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 7 种基础的选择器:
ID 选择器, 如 #id{}
类选择器, 如 .class{}
属性选择器, 如 a[href="www.F44.com"]{}
伪类选择器, 如 :hover{}
伪元素选择器, 如 ::before{}
标签选择器, 如 span{}
通配选择器, 如 *{}

CSS 优先规则3:优先级关系:内联样式 > ID 选择器 > 类选择器 = 属性选择器 = 伪类选择器 > 标签选择器 = 伪元素选择器

例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,因为内联样式比其他选择器的优先级高

CSS 优先规则4:计算选择符中 ID 选择器的个数(a),计算选择符中类选择器、属性选择器以及伪类选择器的个数之和(b),计算选择符中标签选择器和伪元素选择器的个数之和(c)。按 a、b、c 的顺序依次比较大小,大的则优先级高,相等则比较下一个。若最后两个的选择符中 a、b、c 都相等,则按照“就近原则”来判断。

例4:

<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:

<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.css
div {
    background: lime;
}

// style-import.css
div {
    background: grey;
}

  从顺序上看,内部样式在最下面,被最晚引用,所以 <div> 的背景色为 blue。

上面代码中,`@import` 语句必须出现在内部样式之前,否则文件引入无效。当你一定、必须确保某一个特定的属性要显示时,可以使用这个。

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

例6:

<div class="father">
    <p class="son"></p>
</div>

// CSS
p {
    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,应该应用前者的样式,然而事实是应用后者的样式。错误的原因是:选择器的权值不能进位。。这个我们可以自己尝试一下。11 个类选择器组成的选择器的总权值为 110,但因为 11 个均为类选择器,所以其实总权值最多不能超过 100,所以最终应用后者样式。

时间: 2024-07-31 10:28:29

Css样式优先级的相关文章

CSS 样式优先级

首先,选择器优先级顺序 优先级逐级增加的选择器列表: 通用选择器(*) 元素(类型)选择器 类选择器 属性选择器 伪类 ID 选择器 内联样式 !important 规则例外,该样式声明会覆盖CSS中任何其他的声明. 一些经验法则: Never 永远不要在全站范围的 css 上使用 !important Only 只在需要覆盖全站或外部 css的特定页面中使用   !important Never 永远不要在你的插件中使用 !important Always 要优化考虑使用样式规则的优先级来解决

css部分样式整理-特殊字体格式、导航栏固定、块级元素与行内元素、html 元素的margin与padding默认值、css样式优先级概括等

1.一些特殊字体样式: 首行缩进2字符:{text-indent:2em;} 水平居中:{text-align:center;} 两端对齐:{text-align:justify;} 垂直居中:{vertical-align: middle;} 字间距2字符:{letter-spacing:2em;} 行间距2倍:{line-height:2;}     2.导航栏固定在页面某处(相对于<body>):     {position:fixed;left:  px;top:  px;}  3.块

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

一.基本的优先级规则 比较同一级别的个数,数量多的优先级高,如果相同即比较下一级别的个数,至于各级别的优先级如下: important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 通配符 > 继承 二.CSS权重规则 在<页面重构中的模块化设计>中提到,影响CSS样式权重,有两个重要因素: A:样式的优先级跟样式定义的顺序有关 B:权值的大小跟选择器的类型和数量有关 一般来说,在同一个CSS文件中,如果有两个同名的样式

WEB前端--CSS样式优先级

转载信息: 作者: XuGang   网名:钢钢 出处: http://xugang.cnblogs.com 声明: 本文版权归作者和博客园共有.转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址! 样式的优先级 多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External style sheet <(内部样式)Internal style sheet <(内联样式)I

CSS权重及样式优先级问题

CSS权重值计算 一条样式规则的整体权重值包含四个独立的部分:[A, B, C, D]; (1) A 表示内联样式(写在标签的style属性中),只有 1 或者 0 两个值:对于内联样式,由于没有选择器,所以 B.C.D 的值都为 0,即 A=1, B=0, C=0, D=0(简写为 1,0,0,0,下同). (2)B 表示规则中 ID 的数量:(如,#header 这样的选择器,计算为 0, 1, 0, 0). (3)C 表示规则中除了 ID.标签和伪元素以外的其它选择器数量,包括类选择器.属

css样式代码优先级

特殊性 有的时候我们为同一个元素设置了不同的CSS样式代码,那么元素会启用哪一个CSS样式呢?我们来看一下面的代码: p{color:red;} .first{color:green;} <p class="first">三年级时,我还是一个<span>胆小如鼠</span>的小女孩.</p> p和.first都匹配到了p这个标签上,那么会显示哪种颜色呢?green是正确的颜色,那么为什么呢?是因为浏览器是根据权值来判断使用哪种css样式

CSS怎样改变行内样式(通过外部级联样式表) css !important用法CSS样式使用优先级判断

CSS样式优先级 行内>内部>外部 使用!important的css定义是拥有最高的优先级的.只是在ie6下出了一点小的bug,注意书写方式一般可以轻松避开的. CSS中的!important一般都是用于对低版本的除了iE 6 ,用来做hack的,后面缀上了!important的css语句,让浏览器首选执行这个语句,因为css有继承的样式,加上!importanrt可以覆盖父级的样式. IE6不认识它的,IE7和别的浏览器中可以用,用来处理浏览器的兼容性 .padding-l-r p span

bootstrap全局css样式

以下从官网抄来的,感觉还是很实用的,运用得好,灵活运用,非常方便快捷,能大大提高开发效率,也为调整不同尺寸的屏幕节省了时间. hidden-xs @media (max-width: 767px){ .hidden-xs { display: none!important; } } @media (max-width: 991px) and (min-width: 768px){ .hidden-sm { display: none!important; } } @media (min-widt

bootstrap 全局 CSS 样式

http://v3.bootcss.com/css/#less-mixins-utility 深入了解 Bootstrap 底层结构的关键部分,包括我们让 web 开发变得更好.更快.更强壮的最佳实践. HTML5 文档类型 Bootstrap 使用到的某些 HTML 元素和 CSS 属性需要将页面设置为 HTML5 文档类型.在你项目中的每个页面都要参照下面的格式进行设置. 复制 <!DOCTYPE html> <html lang="zh-CN"> ...