我们在写网页的时候经常会遇到同一个HTML文件,使用了外部样式、内部样式以及内联样式,那么如果发生冲突时浏览器是怎么抉择的呢?

  也会遇到这样的情况,在样式表中,对同一个HTML元素,我们有可能既用到了class,又用到了id,还有继承自父元素的样式,那么如果发生冲突时浏览器又怎么表现呢?

  1、样式表的优先级

  所谓多重样式,指的是对于相同的HTML元素在三种样式表中都存在样式效果的时候的样式覆盖问题。对于多重样式,也就是三种样式表都存在的情况下,一般来说它们的优先级是:

(外部样式)External style sheet <(内部样式)Internal style sheet <(内联样式)Inline style

  但是会有一种情况是,如果外部样式表的引入位置在内部样式的后面,也即外部样式表更接近HTML元素,那么外部样式表中的样式会覆盖内部样式表中相同元素的样式。也就是说,如果是对相同的的HTML元素进行样式编辑,在HTML文档流中距离HTML元素近的会覆盖距离HTML元素远的。

 <head>
<style type="text/css">
/* 内部样式 */
h1{color:green;}
</style> <!-- 外部样式 style.css -->
<link rel="stylesheet" type="text/css" href="style.css"/>
<!-- 设置:h1{color:blue;} -->
</head>
<body>
<h1>Test</p>
</body>

  上面代码中,Test会显示为蓝色。若将外部样式和内部样式交换位置,则Test将显示为绿色。

  确定了样式表的优先级之后,也就是确定了使用那个样式表中的样式之后,还有一个问题,就是,如果在同一个样式表中,对同一个HTML元素,分别用其id、class、tagName定义了样式,且样式还不相同,那么浏览器会怎么选择呢?这就是接下来要说的选择器的优先级。

  2、选择器的优先级

  Css选择器优先级计算规则

  根据Css选择器的类型,可以计算出这个样式有多大的优先级:

选择器类型

计算规则

元素标签中定义的样式(Style属性)

加1,0,0,0

每个ID选择符(如 #id)

加0,1,0,0

每个Class选择符(如 .class)、每个属性选择符(如 [attribute=])、每个伪类(如 :hover)

加0,0,1,0

每个元素选择符(如p)或伪元素选择符(如 :firstchild)等

加0,0,0,1

其它选择符包括全局选择符*,不过这也是一种specificity。

加0,0,0,0,相当于没加

  然后,将这四个数字分别累加,就得到每个CSS定义的优先级的值,从左到右逐位比较大小,数字大的CSS样式的优先级就高。

  有些人直接就说,内联的加1000,id的加100,class的加10, tag的加1,虽然在结果上是一致的,但是这种说法还是不够有说服力的。

  这里需要注意几点:

  1. !important声明的样式优先级最高,如果冲突再进行计算。
  2. 如果优先级相同,则选择最后出现的样式。
  3. 继承得到的样式的优先级最低。

  为了更好的理解这些计算规则,举些例子如下:

选择器

计算结果

* { }

0

li { }

1  (one element)

li:first-line { }

2  (one element, one pseudo-element)

ul li { }

2  (two elements)

ul ol+li { }

3  (three elements)

div + *[rel=up] { }

1,1  (one attribute, one element)

ul ol li.red { }

1,3  (one class, three elements)

li.red.level { }

2,1  (two classes, one element)

style=””

1,0,0,0  (one inline styling)

h1 { }

1  (one HTML selector)

div p { }

2  (two HTML selectors)

.hi

1,0  (one class selector)

div p.hi { }

1,2  (two HTML selectors and a class selector)

#hi

1,0,0  (one id selector)

body #darkside .sith p { }

1,1,2  (HTML selector, id selector, class selector, HTML selector; 1+100+10+1)

  祝愿大家可以在Css的路上一路披荆斩棘。生活,就当如Css一样,绚丽绽放、五彩缤纷。

 

  参考资料:http://www.cnblogs.com/xugang/archive/2010/09/24/1833760.html

       http://blog.sina.com.cn/s/blog_87728451010181pm.html

CSS:CSS样式表及选择器优先级总结的更多相关文章

  1. css 03-CSS样式表和选择器

    03-CSS样式表和选择器 #本文主要内容 CSS概述 CSS和HTML结合的三种方式:行内样式表.内嵌样式表.外部样式表 CSS四种基本选择器:标签选择器.类选择器.ID选择器.通用选择器 CSS几 ...

  2. CSS篇-样式表、选择器、权重、伪类

    CSS定义 CSS:Cascading Style Sheet(层叠样式表) // 写法 选择器 { 属性名: 属性值; } CSS样式表 (1)三种样式表使用 // 内联样式 <div sty ...

  3. CSS标签类型和样式表继承与优先级

    标签类型 块级标签 什么是块级标签:在html中<div>. <p>.h1~h6.<form>.<ul> 和 <li>就是块级元素 块级标签 ...

  4. Day5 CSS基本样式和C3选择器

    Day5 CSS基本样式和C3选择器 一.背景属性 1.背景颜色            background-color:transparent(默认值,透明); 颜色的取值:            ...

  5. css样式表和选择器的优先级以及position元素属性值的区别

    css样式表优先级 问题:当同一个HTML元素被不止一个样式定义时,会使用哪个样式呢? 答:一般而言,所有的样式会根据下面的规则层叠于一个新的虚拟样式表中,其中数字4拥有最高的优先权. 1.浏览器缺省 ...

  6. CSS样式----图文详解:css样式表和选择器

    主要内容 CSS概述 CSS和HTML结合的三种方式:行内样式表.内嵌样式表.外部样式表 CSS四种基本选择器:标签选择器.类选择器.ID选择器.通用选择器 CSS三种扩展选择器:组合选择器.后代选择 ...

  7. css样式表的选择器与分类

    css 样式表的作用: 主要用于结构,样式与行为,CSS主要的作用就是美化网页的一个语言,它的特点: 1.结构与样式分离的方式,便于后期维护与改版; 2.样式定义精确到像素的级别; css样式表的结构 ...

  8. CSS样式----css样式表和选择器(图文详解)

    本文最初于2015-10-03发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 本文主要内容 CSS概述 CSS和HTML结合的三种方式:行内样 ...

  9. CSS样式表及选择器相关内容(一)

    CSS(Cascading Style Sheets)层叠样式表1.CSS级联-CSS层叠:规定在哪个HTML中使用哪个样式. body{ font-size:16px; //body默认字体大小 } ...

随机推荐

  1. Oozie 快速入门

    设想一下,当你的系统引入了spark或者hadoop以后,基于Spark和Hadoop已经做了一些任务,比如一连串的Map Reduce任务,但是他们之间彼此右前后依赖的顺序,因此你必须要等一个任务执 ...

  2. Linux下安装Java环境配置步骤详述

    0.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html选择对 ...

  3. Sql Server系列:排序函数

    在SQL Server中有4个排序函数:ROW_NUMBER().RANK().DENSE_RANK()及NTILE()函数. 1. ROW_NUMBER()函数 ROW_NUMBER()函数为每条记 ...

  4. C#设计模式系列:桥接模式(Bridge)

    1.桥接模式简介 1.1>.定义 当一个抽象可能有多个实现时,通常用继承来进行协调.抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现.继承机制将抽象部分与它的实现部分固定在一起,使得 ...

  5. SQL Server 2014新特性探秘(3)-可更新列存储聚集索引

    简介      列存储索引其实在在SQL Server 2012中就已经存在,但SQL Server 2012中只允许建立非聚集列索引,这意味着列索引是在原有的行存储索引之上的引用了底层的数据,因此会 ...

  6. SQL 里解析 XML 格式 字段 信息

    DECLARE @ItemMessage XML ),zje ),yfje ),bcje ),URL ),Remark )) SET @ItemMessage=N'<List> <i ...

  7. es6学习笔记一数组(中)

    接着上一篇,给大家再分享一些数组的其他方法.大家也可以去点击这里学习数组更多的方法 concat方法: 概述:    concat() 方法将传入的数组或非数组值与原数组合并,组成一个新的数组并返回. ...

  8. Android 设置对话框全屏

    1.在styles.xml中添加一个style: <style name="Dialog_Fullscreen"> <item name="androi ...

  9. 前端工程师技能之photoshop巧用系列第二篇——测量篇

    × 目录 [1]测量信息 [2]实战 [3]注意事项 前面的话 前端工程师使用photoshop进行的大量工作实际上是测量.本文是photoshop巧用系列第二篇——测量篇 测量信息 在网页制作中需要 ...

  10. Web前端框架与类库的思考

    说起前端框架,我也是醉了.现在去面试或者和同行聊天,动不动就这个框架碉堡了,那个框架好犀利. 当然不是贬低框架,只是有一种杀鸡焉用牛刀的感觉.网站技术是为业务而存在的,除此毫无意义,框架也是一样.在技 ...