CSS 特殊性、继承与层叠

一、特殊性规则

选择器的特殊性由选择器本身的组件确定;特殊性由四个部分组成,其初始值为0,0,0,0。

1.    对于选择器中的每一个id,记0,1,0,0;

2.    对于选择器中的每一个类、伪类、属性,记0,0,1,0;

3.    对于选择器中的每一个元素、伪元素,记0,0,0,1;

4.    结合符与通配符对于选择器的特殊性没有任何贡献。

 

注意:

1.    0,0,1,0的特殊性比0,0,0,13的特殊性更高。

2.    通配符 * 的特殊性为0,0,0,0,它是有特殊性的;结合符(比如h1+p中的“+”)根本没有特殊性;继承而来的样式也没有特殊性。

请看如下代码:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6         <style>
 7             * {
 8                 color:red;
 9             }
10 
11             body {
12                 color:cyan;
13             }
14         </style>
15     </head>
16     <body>
17         <p>What kind of color this para will be?</p>
18     </body>
19 </html>
View Code

页面显示如下:

此例中,<p>元素从<body>元素中继承了cyan颜色,然而继承来的规则根本没有特殊性,其优先级低于 * 的0特殊性,所以<p>元素采用了 * 的规则,颜色为red。

关于通配符 * :由于 * 适用于所有元素,而且有0特殊性,往往会在不经意间造成继承无法实现的情况,应该尽量避免使用 * 选择器。

 

3.    指定id属性的属性选择器与id选择器有本质区别,比如:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6         <style>
 7             div[id="test"] p {
 8                 color:red;
 9             }
10             
11             #test p {
12                 color:cyan;
13             }
14         </style>
15     </head>
16     <body>
17         <div id="test">
18             <p>What kind of color this para will be?</p>
19         </div>
20     </body>
21 </html>
View Code

页面效果:

此例中,div[id="test"] p 的特殊性为0,0,1,2;而 #test p 的特殊性为0,1,0,1;#test p 这个选择器胜出,所以字体颜色为cyan。

 

4.    行内样式的特殊性最高,为1,0,0,0。

5.    标记为!important的声明被称为重要声明,它没有特殊性,不过要与非重要声明分开考虑。

具体而言:非重要声明分为一组,它们之间的冲突使用特殊性解决;重要声明分为一组,它们之间的冲突内部解决;重要声明总是比非重要声明优先。

 

二、继承

1.    继承没有任何特殊性,记住这一点往往能明白很多问题。

请看如下代码:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6         <style>
 7             p {
 8                 color:red;
 9             }
10         </style>
11     </head>
12     <body>
13         <p>What kind of color this <a href="#">link</a> will be?</p>
14     </body>
15 </html>
View Code

页面效果:

为什么设置了<p>元素的颜色为红色,<a>元素的颜色却是蓝色?

这并不是因为<a>元素不继承父元素的颜色(原谅我之前就是这么认为的),而是因为<a>元素继承了<p>元素的颜色,但是这个继承来的样式根本没有特殊性,然而浏览器默认样式中对<a>元素设置了样式,很明显浏览器默认样式的特殊性更高,于是<a>元素就按照浏览器默认样式显示。

 

2.    CSS中有一个关键字是所有属性共有的,inherit,它使一个属性的值与其父元素相同。

在大多数情况下,不必指定继承,因为大多数属性会自动继承;不过,自动继承的属性没有特殊性,很容易被其它样式覆盖;当需要显式地指定一个元素的样式与其父元素一致时,使用inherit会更方便。

 

三、层叠

层叠规则:

1.    按权重排序;读者重要声明>作者重要声明>作者一般声明>读者一般声明>用户代理声明。

2.    权重相同的情况下,按照特殊性排序,特殊性越高的胜出。

3.    特殊性相同的情况下,按照样式表中的顺序排序,后出现的胜出。

btw,正是因为这个规则,才会使用LoVe-HA的顺序声明链接样式(LoVe-HA 依次为 :link;  :visited;  :hover;  :active)。

 

关于 外部样式<内部样式<行内样式 的说明:

这种说法来源于上述第3条规则。一般而言,在html的<head>元素下,我们习惯将外部样式表的<link>标签放在内部样式<style>之前,这就导致了内部样式的顺序在外部样式的顺序之后,所以内部样式优先级高;但是如果将<style>标签与<link>标签调换位置,比如这样:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6         <style>
 7             p {
 8                 color:red;
 9             }
10         </style>
11         <link rel="stylesheet" type="text/css" href="1.css">
12     </head>
13     <body>
14         <p>What kind of color this para will be?</p>
15     </body>
16 </html>
View Code

此例中,外部样式表包含 P {color:cyan;} 这样一条规则,它的特殊性与内部样式表一样,都为0,0,0,1,但由于外部样式表在内部样式之后,所以外部样式胜出,页面显示如下:

所以,

外部样式<内部样式 这只是一种习惯上的说法,关键还是要看它们出现的顺序,顺序越靠后的优先级更高。

当然,行内样式总是最靠后的,所以它的优先级高于外部样式和内部样式,这是毋庸置疑的。

转载于:https://www.cnblogs.com/cc156676/p/5670993.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 之6.0 双向通话自动录音

可以先参考下这篇博客&#xff0c;讲得比较详细 http://www.jizhuomi.com/android/example/354.html 然后我看到这篇博客很叼&#xff0c;其它的文章质量也非常不错&#xff0c;http://blog.csdn.net/gyhgx/article/details/51669892 项目中需要实现基于Android 6.0 的双向通…

void 类型的指针

void指针是空类型的指针&#xff0c;也称为无类型的指针&#xff0c;它不指向任何类型&#xff0c;即它仅仅是个地址。因此void指针不能进行指针运算&#xff0c;也不能取其所指向的数据的值 只有将void指针跟其他类型的指针相关联&#xff0c;才能使用他&#xff0c;可以将其他…

sas数据导入终极汇总-之二

从FTP读入数据read raw data via FTP in SAS?SAS has the ability to read raw data directly from FTP servers. Normally, you would use FTP to download the data to your local computer and then use SAS to read the data stored on your local computer. SAS allows y…

解读WPF中的Xaml

1.Overview这篇文章主要分享从源代码角度解读wpf中xaml。由于源码查看起来错综复杂“随便找一个对象按下F12就是一个新的世界”&#xff0c;看源码的感觉就是在盗梦空间里来回穿梭&#xff1b;所以也是耗费很长的时间去阅读源码然后根据自己的理解编写文章和贴出部分关键源码。…

用心疗眼

训练眼睛的核心绝招——用心&#xff01;——致所有要求具体方法的网友不断有人找我&#xff0c;说自己多少度近视&#xff0c;该如何去训练。针对这样的问题&#xff0c;我总不知如何来回答&#xff0c;因为不同的人应该用不同的训练方法&#xff0c;我所提出的&#xff0c;只…

ubuntu之Unable to lock the administration directory(/var/lib/dpkg/), are you root?13 Permission denie

apt-get install subversion E: 无法打开锁文件 /var/lib/dpkg/lock - open (13 Permission denied) E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?Permission denied 出现这个提示就说明你没有足够的权力去读写这个文件夹的内容,你需要取…

.NET 也有 Husky 了

熟悉前端开发的同学应该知道&#xff0c;前端工程化工作流中有一个很常用的工具&#xff1a;Husky。Husky 方便我们在项目中添加 git hooks&#xff0c;比如配合 lint-staged 在代码提交前进行自动检查编码规范&#xff0c;再比如配合 commitlint 对提交时填写的 message 内容进…

POJ3751 时间日期格式转换【日期计算】

时间日期格式转换Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8306 Accepted: 3829Description 世界各地有多种格式来表示日期和时间。对于日期的常用格式&#xff0c;在中国常采用格式的是“年年年年/月月/日日”或写为英语缩略表示的”yyyy/mm/dd”&#xff…

sas数据导入终极汇总-之一

将数据文件读入SAS ——DATA Step / PROC IMPORT1.将SAS文件读入SAS——data sasuser.saslin;set "F:\sas1.sas7bdat";run;proc contents datasasuser.saslin;run;2.将其他形式文件导入成SAS ——PROC IMPORT / 直接读入其他形式文件proc import datafile "c:\…

寒门博士分享读博经历成“抖音网红”惹争议,博士该这么“不正经”吗?

全世界只有3.14 % 的人关注了爆炸吧知识最近在抖音上&#xff0c;一个名叫“相宜”的主播火了。短短几个月时间内&#xff0c;她就涨粉940万。而和一般网红不同的是&#xff0c;相宜是一位刚毕业的博士。带火她的视频&#xff0c;是她自述博士毕业后的感想&#xff0c;目前已经…

event.x,event.clientX,event.offsetX区别

x:设置或者是得到鼠标相对于目标事件的父元素的外边界在x坐标上的位置。 clientX:相对于客户区域的x坐标位置&#xff0c;不包括滚动条&#xff0c;就是正文区域。 offsetx&#xff1a;设置或者是得到鼠标相对于目标事件的父元素的内边界在x坐标上的位置。 screenX:相对于用户屏…

.bash_profile和.bashrc说明

/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:  为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取. ~/.bash_profile: 每个用户都可使用…

Android Nine-patch

做了好多客户端软件了&#xff0c;突然发现里面有好多图片都是重复的&#xff0c;个别只是大小不一样&#xff0c;每次都使用大量图片&#xff0c;导致软件过大&#xff0c;项目总结的时候才发现Android已经提供了一种解决方案了&#xff0c;这就是NinePatchDrawable&#xff0…

稍微成型点的用WEBSOCKET实现的实时日志LOG输出

难的是还是就地用JS显示出来相关的发布进度。 还好&#xff0c;花了一下午实现了。 可以移植到项目中去罗。。。 websocket.py&#xff1a; import tornado.ioloop import tornado.web import tornado.websocket from tornado.ioloop import IOLoop from datetime import timed…

一些常用的SAS命令

一些常用的SAS命令 1. 转换文本数据文件的数据步的一般形式为&#xff1a; data 数据集名&#xff1b;infile 文件名&#xff1b; input 变量输入设定&#xff1b; run&#xff1b; 2. 指定逻辑文件名语句的一般形式为&#xff1a;filename 逻辑文件名 ‘文件位置’&#xff…

.NET6之MiniAPI(四):配置

配置文件&#xff0c;是一个每个应用服务程序常用的功能&#xff0c;从原来的终端应用时代&#xff0c;到现在的元宇宙时代&#xff0c;配置都是很悠然自得的存在。asp.net core提供了强大的配置文件访问机制&#xff0c;不管是MVC API还是MiniAPI&#xff0c;使用方式都是相同…

LeetCode:Sudoku Solver Valid Sudouku

其实数独还是我挺喜欢的一个游戏。原来有本数独的书。 其实Sudoku是基于Valid Sudouku.其实一开始有点想太多。基于平常玩数独的经验&#xff0c;有很多解数独的规则。貌似这个人为判断因素比较多。 而且一开始理解的valid是有解无解&#xff0c;其实这里要求的是给定的board里…

Ubuntu之SVN客户端安装+使用

下载SVN 我们先使用sudo apt-get source sudo apt-get update 然后下载svn sudo apt-get install subversion 一步继续一步,每次y 安装成功之后 svn --version查看。 使用 2、 新建一个目录,cd 到新建目录下,将文件 checkout 到本地目录:svn checkout svn://192.168.1…