Q:如果多个规则匹配同一个元素,而且部分声明之间有冲突,那么我们如何知道哪个规则胜出呢?
A:用户代理会计算每个规则中选择符的特指度,然后将其依附到规则中的每个声明上。如果两个或多个属性声明有冲突,特指度最高的声明胜出。而为了计算特指度,用户代理必须把规则“打散”成单独的规则
例如:h1 { color: silver; background: black; } 将变成以下形式。二者的特指度都是 0,0,0,1 ,赋予每个声明的值就是它
h1 { color: silver; }
h1 { background: black; }
选择符的特指度由选择符本身的组成部分决定。一个特指度值由四部分构成,例如:0,0,0,0
重要声明 | 行内样式 | ID选择符 | Class | Element | 通用选择符 | |
---|---|---|---|---|---|---|
特指度值 | 优先级最高 | 1,0,0,0 | 0,1,0,0 | 0,0,1,0 | 0,0,0,1 | 0,0,0,0 |
重要声明注意:
重要声明要在声明末尾的分号之前插入 !important 。!important 的位置必须正确,否则声明将失效
带有 !important 的声明对特指度没有影响,但它会与不重要的声明分开处理
所有带 !important 的声明会放在一起,而特指度冲突就在这个范围内解决
非重要的声明作为一个整体,其中的冲突使用特指度解决
当重要声明和非重要声明冲突时,重要声明始终胜出
特指度写法注意:
特指度值是从左向右比较的。特指度 1,0,0,0 比所有以 0 开头的特指度大,不管后面的数字有多大
通用选择符不增加特指度,它的特指度是 0,0,0,0 ,这与没有特指度是不同的
连接符没有特指度,即连零都没有
继承:是指把一个元素的某些属性值传给其后代的机制(某些样式不仅应用到所指元素上,还应用到元素的后代上)
把声明应用到可以继承的元素上后,那个元素将使用声明的样式渲染;这个值继续沿着树状图向下传播到后代元素,直到没有后代为止
属性值绝不向上传播,即元素的样式绝不传给祖辈元素
在html中,向上传播规则有个例外:应用到body元素上的背景样式会传给HTML元素。HTML时文档的根元素,用于定义渲染文档的画布。这一例外仅发生在为body元素设定了背景,而没有为html元素定义背景的情况下
注意事项:
很多属性是不继承的,这通常是为了避免得到意外的结果
继承的值没有特指度,连零都没有
案例:因为通用选择符应用于全部元素,而且特指度为零,所以它声明的颜色gray击败继承的颜色black(由于继承的值没有特指度),因此,em元素渲染为灰色,而不是黑色
* { color: gray; }
h1#page-title { color: black; }
<h1 id="page-title">
Meerkat <em>Central</em>
</h1>
<p>Welcome to the best place on the web for meerkat information!</p>
层叠:是一种样式在文档层次中逐层叠加的过程,目的是让浏览器面对某个标签特定属性值的多个来源,确定最终使用哪个值
CSS层叠规则:
按显示权重排序,以 !important 标记的规则比没有这一标记的权重高
如果两个规则应用到同一个元素上,而其中一个以 !important 标记,那么有此标记的规则胜出
如果显示权重相同,就要考虑规则的来源。声明有三个来源:创作人员、读者、用户代理
读者提供的样式中以 !important 标记的声明
创作人员编写的样式中以 !important 标记的声明
创作人员编写的常规声明
读者提供的常规声明
用户代理的默认声明
如果各声明的显示权重和来源相同,那么应该按特指度排序,特指度高的声明胜出
如果两个规则的显示权重、来源和特指度都相同,那么在样式表中的位置靠后的规则胜出
重要声明:!important
Class:类选择符、属性选择符、伪类选择符
Element:元素选择符、伪元素选择符
本文来自博客园,作者:不二橘子酱,转载请注明原文链接:https://www.cnblogs.com/feeder/p/14979688.html
CSS样式被称为为“层叠样式表”,是一种网页制作做不可或缺的技术,是用于装饰网页,达到设计效果的一种样式语言。
这篇文章整理css如何实现文章分割线的多种方式,分割线在页面中可以起到美化作用,那么就来看看使用css实现分割线样式的多种方法:单个标签实现分隔线、巧用背景色实现分隔线、inline-block实现分隔线、浮动实现分隔线、利用字符实现分隔线
在html中样式分为:浏览器默认样式,引用样式(link外部样式文件,stle标签定义样式)、行间样式(及节点style属性定义的样式)。这篇文章主要讲解使用原生js获取、添加非行间css样式。
css常用样式有哪些?这篇文章整理如下内容:字体属性(font)、 常用字体 (font-family)、背景属性 (background)、区块属性 (Block)、方框属性 (Box)、边框属性 (Border)、列表属性 (List-style)、定位属性 (Position)、CSS文字属性
层叠样式表,用来表现HTML或者XML等文件样式的计算机语言。网页表现与内容分离的样式设计语言,能够对网页中对象排版进行像素级精确控制,几乎支持所有字体字号
许多前端开发人员都在用 Normalize 为他们的网站设计样式。一些人喜欢在 Normalize.css 中添加一些自己偏好的样式,我也一样。在本文中,我会与你分享我自己的 CSS reset 项目(除了 Normalize.css 之外我还使用它们)。
多行截断有好几种方法,可以直接使用float方法,方便自定义样式及监听事件,并且兼容性好,是暂时最完美的解决方案。就是略复杂,不过网上有可以直接拿来用哦~
行内式:该语法中style是标记的属性,实际上任何HTML标记都拥有style属性,用来设置行内式。内嵌式<style>标记一般位于<head>标记中的<title>标记之后,也可以把它放在HTML文档的任何地方。
什么是偏门,就是有些片段很少使用,时间久了就记不起来,但用的时候又要去找,所以这里为大家整理一些少用但又实用的 CSS 样式,input 的 H5 placeholder 属性,很好用,但不能直接改这个文字颜色
需要输出富文本的内容,需要设置里面的图片样式最大宽度100%。可是设置img 100%后没反应,看F12检查元素也没加上去。解决方法有2个:coped属性导致css仅对当前组件生效
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!