我们之前学了很多个选择器,都可以帮我们定位到具体标签上,然后我们在设置样式。但这也不可避免会产生一个问题:如果多个选择器同时指向同一个标签,那么到底该听谁的???

css一定有自己的机制来处理这个问题,这个就是css的层叠性。今天我们就一起来具体讨论一下这个问题。

1.场景一:多个选择器选中同一个标签,怎么办?

首先我们写一段简单的html代码:

7层叠性.html(body部分)

     <div id="box1" class="box1">
<div id="box2" class="box2">
<div id="box3" class="box3">
<p>我到底什么颜色的?</p>
</div>
</div>
</div>

注意给组件设置id和class时同名并不影响,因为一个是id,一个是类,本来就是不同的东西。

好,首先我们先在head标签里写如下一段css代码:

7层叠性.html(head部分)

     <style>
#box1 .box2 .box3 p{
color: red;
}
#box1 div.box2 div.box3 p {
color: green;
}
.box1 #box2 div p {
color: blue;
}
</style>

我们注意写下的这三个选择器有一个共同的特点,就是虽然写法不同,但最后都指向了p标签。那么这个时候浏览器显示出来的到底是什么颜色呢?

css有规定:当几个选择器同时指向同一个标签时,此时比较权重。权重就是特定选择器的个数(id选择器 > 类选择器 > 标签选择器)

我们可以分析一下上面三个选择器的权重: 

            id选择器个数    class选择器个数     标签选择器个数
                1                   2                     1
                1                   2                     3
                1                   0                     2

经过对比,应该是第二个选择器起作用,也就是颜色应该显示为绿色。我们在浏览器里查看一下实现效果:

再打开谷歌的"检查"工具,看一下源代码

另外两个选择器都被消掉,只留下绿色选择器还在。

总结:当几个选择器同时指向同一个标签时,此时比较权重,谁大听谁的!

2.场景二:权值相同,怎么办?

7层叠性.html(head部分)

     <style>
.box1 #box2 .box3 p {
color: red;
}
#box1 .box2 .box3 p {
color: green;
}
.box1 .box2 #box3 p {
color: blue;
}
</style>

更改css部分,我们发现这三个选择器同样指向了同一个标签,所以处理办法依旧是比较权重,好,开始分析

                                id选择器个数    class选择器个数     标签选择器个数
                                    1               2                   1
                                    1               2                   1
                                    1               2                   1

结果我们发现虽然指向同一个标签,但是他们权重相同,这个时候我又该听谁的呢??

css规定:当几个选择器同时指向同一个标签时,如果权重相同,那么依照书写顺序,谁写在后面听谁的。

因此我们推断应该是蓝色。看一下实现效果:

把上面两个例子进行一个总结:当几个选择器同时指向同一个标签时,首先比较权重,谁大听谁的,如果权重相同,那么依照书写顺序,谁写在后面听谁的。

3.场景三:样式都是继承来的,怎么办?

保持html代码不变,我们再次更改css代码

7层叠性.html(head部分)

     <style>
#box1 {
color: red;
}
.box1 #box2 .box3 {
color: pink;
}
.box1 .box2 {
color: green;
} </style>

其中这三个选择器都没有直接指到p标签,但是都选择了p标签的祖辈标签,从上一篇随笔中我们知道css具有继承性,P标签会继承父类的样式。那么问题来了,每个父辈样式不同,p该继承谁呢?其实这个问题很好想象,你是向你爸爸多一些,还是你爷爷多一些?还是你祖爷爷多一些?

css规定:当三种选择器都没有直接选择元素,通过继承让p拥有属性, 此时看谁描述的近,就听谁的。

所以一次判断,应该是父标签的颜色,也就是粉色。我们看一下实现效果检查一下:

4.场景四:描述一样近,怎么办?

Q:那么如果描述的一样近呢?我们又该听谁的?

保持html代码不变,更改css代码

7层叠性.html(head部分)

     <style>
#box1 .box2 #box3 {
color: red;
}
.box1 .box2 .box3 {
color: green;
}
.box1 #box2 #box3 {
color: blue;
}
</style>

此时三个选择器都选择到p标签的父标签,描述的一样近,根据经验,这时候我们又该比较什么??对,跟之前例子类似,此时又要比较权重。现在比较的方法又和之前例子是类似了。

css规定:当三种选择器都没有直接选择元素,通过继承让p拥有属性, 此时看谁描述的近,就听谁的。假如描述的一样近,此时再比较权重, 权重谁高就听谁的。若权重相同,谁在后面听谁的。

实现效果:

自己比划一下,是不是能够想明白为什么是蓝色????如果可以,说明对这一块是彻底理解了。

5.总结

以上就是关于css层叠性的知识,最后总结一下:

  1.当几个选择器同时指向同一个标签时,首先比较权重,谁大听谁的,如果权重相同,那么依照书写顺序,谁写在后面听谁的。

  2.当几个选择器都没有直接选择元素,通过继承拥有属性, 此时看谁描述的近,谁近就听谁的。假如描述的一样近,此时再比较权重,谁大听谁的。若权重相同,谁在后面听谁的。

【CSS】我的颜色到底听谁的?—— css的层叠性的更多相关文章

  1. css 05-CSS样式表的继承性和层叠性

    05-CSS样式表的继承性和层叠性 #本文重点 CSS的继承性 CSS的层叠性 计算权重 权重问题大总结 CSS样式表的冲突的总结 权重问题深入 同一个标签,携带了多个类名 !important标记 ...

  2. CSS响应式布局到底是什么?

    响应式布局是最近几年在前端开发中非常火热的词,它是相对于固定像素大小的网页而言的,那么CSS响应式布局到底是什么?顾名思义,响应式布局就是网页能够响应各种各样不同分辨率大小的设备,能够将网页很好的呈献 ...

  3. css设置滚动条颜色与样式以及如何去掉与隐藏滚动条

    我们大家在浏览网页的时偶尔会看到很漂亮的各种颜色样式的滚动条,这就是通过css代码控制来实现的,于是本人搜集整理一番,这里和大家分享一下使用CSS设置滚动条颜色以及如何去掉滚动条的方法,需要的朋友可以 ...

  4. CSS中的颜色问题

    css颜色: CSS 颜色 颜色是通过对红.绿和蓝光的组合来显示的 颜色值 CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) 表示法进行定义.对光源进行设置的最低值可以是 0(十 ...

  5. CSS 文本字体颜色设置方法(CSS color)

    CSS 文本字体颜色设置方法(CSS color) 一.认识CSS 颜色(CSS color) 这里要介绍的是网页设置颜色包含有哪些:网页颜色规定规范. 1.常用颜色地方包含:字体颜色.超链接颜色.网 ...

  6. 在 CSS 中表示颜色的hex code方法和rgb方法

    hexadecimal code(十六进制编码),简写为 hex code. 我们通常使用 decimals,也就是十进制数字,它对每一位数字使用符号0到9来表示.Hexadecimals (或 he ...

  7. 关于css中层叠性的一点理解

    关于css层叠性的一点理解 标签(空格分隔): html css 我们平时在写css的时候会遇到这样的情况 <!DOCTYPE html> <html lang="en&q ...

  8. CSS Houdini:用浏览器引擎实现高级CSS效果

    vivo 互联网前端团队-Wei Xing Houdini被称之为Magic of styling and layout on the web,看起来十分神秘,但实际上,Houdini并非什么神秘组织 ...

  9. 【WEB前端】CSS继承性和层叠性(极度重要)

    1.1 继承性 有一些属性,当给自己设置的时候,自己的后代都继承上了,这个就是继承性. 哪些属性能继承? color. text-开头的.line-开头的.font-开头的. 这些关于文字样式的,都能 ...

随机推荐

  1. c#使用 StackExchange.Redis 封装 RedisHelper

    公司一直在用.net自带的缓存,大家都知道.net自带缓存的缺点,就不多说了,不知道的可以查一查,领导最近在说分布式缓存,我们选的是redis,领导让我不忙的时候封装一下,搜索了两天,选了选第三方的插 ...

  2. connect: network is unreachable

    解决方法: 在确保完善网卡驱动,以及确保将网卡驱动编译进内核后,检查 ls /etc/sysconfig/network-script/ifcfg-eth0 一.看是否在上述目录下存在ifcfg-et ...

  3. Luogu P4168 [Violet]蒲公英 分块

    这道题算是好好写了.写了三种方法. 有一个好像是$qwq$$N\sqrt(N)$的方法,,但是恳请大佬们帮我看看为什么这么慢$qwq$(后面的第三种) 注:$pos[i]$表示$i$属于第$pos[i ...

  4. MySQL多表查询总结

    MySQL术语: Redundacncy(冗余):存储两次或多次数据,以便实现快速查询. Primary Key(主键):主键是唯一的.表中每条记录的唯一标识. Foreign Key(外键):用于连 ...

  5. Manacher 算法学习小记

    概要 一个字符串有多少个回文的字串?最多有 \(O(n^2)\) 级别个.但 Manacher 算法却可以用 \(O(n)\) 的时间复杂度解决这个问题.同时 Manacher 算法实现非常简单. 一 ...

  6. axios 是如何封装 HTTP 请求的

    原载于 TutorialDocs 网站的文章<How to Implement an HTTP Request Library with Axios>.译者:zhangbao90shttp ...

  7. C/C++程序基础-C++与C有什么不同

    1:C和C++的联系和区别? 答:C是一个结构化语言,它的重点在于算法和数据结构.对于语言本身而言,C是C++的子集.C程序的设计首先要考虑的是如何通过一个过程,对输入进行运算处理,得到输出.对于C+ ...

  8. java按某个字段对数据分组

    import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; i ...

  9. InnoDB缓存---InnoDB Buffer Pool

    InnoDB Buffer Pool 定义 对于InnoDB存储引擎,不管用户数据还是系统数据都是以页的形式存储在表空间进行管理的,其实都是存储在磁盘上的. 当InnoDB处理客户端请求,需要读取某页 ...

  10. Fiddler主界面图标简单说明

    Fiddler主界面图标简单说明: 名称 含义 # 抓取HTTP Request的顺序,从1开始,以此递增 Result HTTP状态码 Protocol 请求使用的协议,如HTTP/HTTPS/FT ...