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,一经查实,立即删除!

相关文章

解读WPF中的Xaml

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

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

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

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…

.NET6之MiniAPI(四):配置

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

.NET 6新特性试用 | PeriodicTimer

前言在.NET中&#xff0c;已经存在了5个Timer类&#xff1a;System.Threading.TimerSystem.Timers.TimerSystem.Web.UI.TimerSystem.Windows.Forms.TimerSystem.Windows.Threading.DispatcherTimer不管以前这样设计的原因&#xff0c;现在.NET 6又为我们增加了一个新Timer&…

ChatForFun 公众号使用说明

使用方法 2016-07-16 DennisMi ChatForFun1&#xff0c;发送 #1 实现登陆&#xff0c;或者退出登陆 2&#xff0c;发送 #2 实现加入聊天&#xff0c;和退出聊天 3&#xff0c;聊天开始后&#xff0c;可以直接发送消息 4&#xff0c;如果需要退出登陆或者退出聊天&#xff0c;…

.NET 6新特性试用 | 总结:我最喜欢的5个特性

前言不知不觉&#xff0c;《.NET 6新特性试用》系列文章已经写了20多篇&#xff0c;而今天终于要告一段落了。如果你还没有看过&#xff0c;详细文章列表在这里&#xff1a;.NET 6新特性试用系列在这么多特性中&#xff0c;我最喜欢如下5个特性&#xff1a;1、最小Web API仅需三…

mikrotikROS系统的几种安装方法

这里简单介绍下几种ROS的安装方法,以及适用于哪些设备,这里我们先提供一个ROS6.0全系列版本的下载链接mikrotik-RouteOS-V6.0正式版下载 或者前往官方下载最新版常见的ROS硬件一般分为:X86架构(也是最常用的)mipsbe(欧米tik,部分RB系列,SXT,Groove等)mipsle(RBC系列,RB100,R…

分布式云+dubbo+zookeeper+Springmvc整合

2019独角兽企业重金招聘Python工程师标准>>> Dubbo采用全Spring配置方式&#xff0c;透明化接入应用&#xff0c;对应用没有任何API侵入&#xff0c;只需用Spring加载Dubbo的配置即可&#xff0c;Dubbo基于Spring的Schema扩展进行加载。 一&#xff1a;单机模式安装…

.Net下你不得不看的分表分库解决方案-多字段分片

介绍本期主角:ShardingCore 一款ef-core下高性能、轻量级针对分表分库读写分离的解决方案&#xff0c;具有零依赖、零学习成本、零业务代码入侵dotnet下唯一一款全自动分表,多字段分表框架,拥有高性能,零依赖、零学习成本、零业务代码入侵,并且支持读写分离动态分表分库,同一种…

知乎高赞:看懂这个颠覆世界观的认知,远比做1000道题更有用!

▲ 点击查看知乎上曾有个提问&#xff1a;“见过世面究竟有多重要&#xff1f;”其中一个点赞过万回答让无数网友产生共鸣&#xff1a;会讲究&#xff0c;能将就&#xff0c;能享受最好的&#xff0c;也能承受最坏的。见过世面的他们自然会在人群中散发不一样的气质&#xff0c…

WebBrowser!

WebBrowser! 原文:WebBrowser!我现在先放一些基础的文章在这里&#xff0c;以后再放别的上来官方范例连接http://www.microsoft.com/china/msdn/library/langtool/vcsharp/OvervwWebBrowExp.mspxQ&A 2005年5月21日 0:14:19 Q: 新键入的地址不能在新建好的窗口里打开:A:每…

Android USB Host与HID通讯(二)

2019独角兽企业重金招聘Python工程师标准>>> 原文出处&#xff1a;http://han21912.lofter.com/post/c3919_51401d 接上一篇&#xff1a;Android USB Host与HID通讯 (一) 从上篇已经可以枚举到HID设备&#xff0c;接下来看看寻找设备的接口和通信端点&#xff0c;…

CentOS7安装PHP5.6.23

为什么80%的码农都做不了架构师&#xff1f;>>> 美国时间2014年11月13日&#xff0c;PHP开发团队&#xff0c;在「PHP 5.6.3 is available&#xff5c;PHP: Hypertext Preprocessor」上公布了PHP5.6系的最新版本「PHP 5.6.3」。 在最新的版本5.6.3不仅修改了多个Bu…

为什么接吻需要闭眼睛?

1 你用上5G了吗&#xff1f;它已经用上了▼2 戴口罩的好处又增加了▼3 原来如此...▼4 哈哈哈哈▼5 露脐装的正确打开方式&#xff08;素材源于网络&#xff0c;侵删&#xff09;▼6 火鸡面到底有多辣▼7 孩子你要完了&#xff08;素材来源网络&#xff0c;侵删&#xff0…