css继承和层叠
在前面介绍了如何利用文档结构和css选择器为元素应用各种丰富的样式,今天来好好聊聊css的层叠和继承,先说说概念。
继承:一个元素向其后代元素传递属性值所采用的机制,说的通俗点,就是元素的某些属性可以通过继承从而传递给子元素的。
如:
<p><span>测试继承</span>这里不是span中的内容</p>
p{color:red},这里便会看到p元素和审判元素中的文字都变为红色,因为p元素的属性被span继承过来了。但是有的属性是无法通过继承来传递的,
如border就不会通过继承获得。其实继承很好理解,但要配合层叠来一起理解。
层叠:确定一个元素究竟该用哪些样式时,就需要把继承和声明的特殊性拿来一起考虑,从而该启用哪一个css样式,这个过程就被称为层叠。
上面提到了特殊性,那我们就来重点看看。
先抛出一个问题,下面2对规则,哪条会获胜?
h1{color:red}
body h1{color:blue}
h2{color:red}
h2.color{color:green}
上面的2对规则中,显然只能有一个胜出,然而哪个该胜出嘞?答案就在每个选择器的特殊性。
一个选择器的具体特殊性如下:
1.对于规则中给定的每个ID属性值,特殊性加0,1,0,0
2.对于规则中每个类选择符合属性选择符以及伪类,特殊性加0,0,1,0
3.对于规则中每个元素和伪元素,特殊性0,0,0,1
4.结合符和通配符对特殊性没有任何贡献。
5.内联样式的特殊性加1,0,0,0
6.继承的属性没有特殊性,甚至连0特殊性都没有,所以要低于通配符的。
7.!important总会胜出。
所以对于上面的两组规则就有了结果:
h1{color:red} 0,0,0,1
body h1{color:blue} 0,0,0,2
h2{color:red} 0,0,0,1
h2.color{color:green} 0,0,1,0
所以red和green会生效。
于是,层叠的规则如下:
1.找出你代码里面所有的选择符。
2.规则的显示权重排序和起源排序,标记!important的样式最优先,且有三种起源:制作者,读者,用户代理。
3.元素声明的特殊性排序。
4.元素声明的出现顺序排序。
css继承和层叠的更多相关文章
- CSS继承、层叠和特殊性
1.继承 (1)样式应用于某个特定的HTML标签元素,而且应用于其后代. (2)但某些标签不适用,如border: (3)例子:p{color:red;}设置了颜色 <p class=" ...
- CSS语法、选择器、继承、层叠
行内样式(内联样式) <h1 style="color:red;font-size:20px;">css行内样式</h1> 内部样式表(嵌入样式) < ...
- CSS系列:CSS的继承与层叠特性
1. CSS的继承特性 所有的CSS语句都是基于各个标记直接的继承关系,CSS继承是指子标记会继承父标记的所有样式风格,并可以再父标记样式风格的基础上再加以修改,产生新的样式,而子标记的样式完全不会影 ...
- CSS特性: 继承 和 层叠
在css中也存在着继承关系,与面向对象的编程语言不同,css的继承很简单,而且主要指的是在CSS盒模型中,外围的盒子的样式会被内部所包含的盒子所继承.具体来了解一下. HTML元素之间存在一个”树型“ ...
- css中的继承、层叠、样式优先级机制
一.继承与层叠:
- HTML+CSS学习笔记(9)- CSS的继承、层叠和特殊性
标签:HTML+CSS 继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代.比如下面代码:如某种颜色应用于p标签,这 ...
- CSS学习摘要-层叠和继承
当有多个选择器作用在一个元素上时,哪个规则最终会应用到元素上? 其实这是通过层叠机制来控制的,这也和样式继承(元素从其父元素那里获得属性值)有关. 元素的最终样式可以在多个地方定义,它们以复杂的形式相 ...
- CSS中的层叠、特殊性、继承、样式表中的@import
CSS中的层叠.特殊性.继承.样式表中的@import 层叠 CSS有一个机制是层叠,层叠可以理解为对样式的覆盖,优先性为: 网站开发者的样式表 用户样式(通过设置浏览器的显示选项) 浏览器默认的样式 ...
- CSS 三大特性 层叠 继承 优先级
css三大特性 层叠性: 如果一个属性通过两个相同选择器设置到同一个元素上,相同的属性就会出现冲突,那么这个时候一个属性就会将另一个属性层叠掉,采用的是就近原则 继承性: 子标签会继承父标签的某些样式 ...
随机推荐
- c/c++指针常见错误
一 #include <bits/stdc++.h> using namespace std; void f(char *str) { char *s = str; str[] = ' / ...
- springboot搭建的2种方式
一.搭建springboot项目有两种方式1.继承springboot项目 <parent> <groupId>org.springframework.boot</gro ...
- Centos系统更改yum源为163
Centos安装好之后,按照网上教程对yum源进行修改,但更新之后发现总是提示更新失败,到163网站上查找资源发现目前大部分网上的教程都写错地址了,呵呵 下面是正确的办法,请参考 1.进入存放源配置的 ...
- jquery MD5
/** * jQuery MD5 hash algorithm function * * <code> * Calculate the md5 hash of a String * Str ...
- php http build query
http_build_query (PHP 5, PHP 7) http_build_query — 生成 URL-encode 之后的请求字符串 说明¶ string http_build_quer ...
- mongdb分布式
搭建高可用mongodb集群(一)——配置mongodb Posted on 17 十一月, 2013 by lanceyan | 21 Replies 在大数据的时代,传统的关系型数据库要能更高的服 ...
- 记录一些js框架用途
accounting.min.js 货币格式化alertify.min.js 提示信息库amd.loader.js 按需动态加载js文件angular-cookies.js 处理cookieangul ...
- 【Keras学习】Sequential模型
序贯(Sequential)模型 序贯模型是多个网络层的线性堆叠,也就是“一条路走到黑”. 可以通过向Sequential模型传递一个layer的list来构造该模型: from keras.mode ...
- C/C++函数中使用可变参数
先说明可变参数是什么,先回顾一下C++里面的函数重载,如果重复给出如下声明: int func(); int func(int); int func(float); int func(int, int ...
- iOS-----使用AddressBook管理联系人
使用AddressBook管理联系人 iPhone手机通常都是自带的Contacts应用,包括所有联系人的性(last name).名(first name).电话.E-mail地址.住址.生日等各种 ...