目录

CSS样式覆盖规则

CSS三大特性

The cascade

What selectors win out in the cascade depends on three factors(these are listed in order of weight---earlier ones will overrule later ones):

  1. Importance

  2. Specificity

  3. Source order(资源顺序)

Importance

In CSS, there is a special piece of syntax you can use to make sure that a certain rule will win over all others: !important. Adding this to the end of a property value will give it superowers.

Let's look at example:

<p class="better">This is a paragraph.</p>
<p class="better" id="winning">One selector to rule them all!</p>
#winning {
background-color: red;
border: 1px solid black;
} .better {
background-color: gray;
border: none !important;
} p {
background-color: blue;
color: white;
padding: 5px;
}

This produces the following:

This is a paragraph.(backgound: gray;color: white;padding: 5px;border: none;)

One selector to rule them all!(background: red;color: white;padding:5px;border: none;)

Let's walk through this to see what's happening.

  1. You'll see that the third rule's color and padding values have been applied, but the background-color hasn't. why? Really all three should surely apply, because rules later in the source order generally override earlier rules.(因为资源顺序后面的规则通常会继承前面的规则。)

  2. However, The rules above it win, because ID/class selectors have higher specificity than element selectors(You will learn way more about this in the next section.)(ID/class选择器比元素选择器有更高的特异性.)

  3. Both elements have a class of better, but the second one has an id of winning too.Since IDs have an even higher specificity than classes(you can only have one ID on a page, but many classes --- ID selectors are very specific in what they target), the red background color and 1 pixel black border should both be applied to the second element, with first element getting the gray background color, and no border, as specified by the class.(ID选择器比class选择器有更高的特异性。)

  4. The second element does get the red background color, but no border.Why? Because of the !important declaration in the second rule --- including this after border;none means that this declaration will win over the border value in the previous rule, even though the ID has high specifity.(即使ID有更高的特异性,但是因为!important的存在。!important赢了。)

Note: The only way to override this !important declaration would be to include another !important declaration of the same specificity, later in the source order.

We would advertise you to never use !important unless you absolutely have to.

Conflicting declarations will be applied in the following order, with later ones overriding earlier ones:

  1. Declarations in user agent style sheets(e.g. the browser's default styles, used when no other styling is set.)(用户代理样式表声明, 比如浏览器默认样式)

  2. Normal declarations in user style sheets(custom styles set by a user.) (用户样式表普通声明, 用户定制的样式)

  3. Normal declarations in author style sheets(these are the styles set by us, the web developers!)(开发者的普通声明)

  4. Important declarations in author style sheets(开发者的important声明)

  5. Important declarations in user style sheets(用户的important声明)

Specificity

The amount of specificity a selector has is based on something called the selector weight. This has four different values, which can be thought of as thousands, hundreds, tens and ones --- four single digits in four columns.The selector weight is calculated based on the selector types of its sub-parts:

  1. Thousands: One if the matching selector is inside a < style> element or the declaration is inside a style attribute(such declarations do not have selectors, so their specificity is always simple 1000.) Otherwise 0.

  2. Hundreds: One for each ID selector contained inside the overall(全部的) selector.

  3. Tens: One for each class selector, attribute selector or pseudo-class contained inside the overall selector.

  4. Ones: one for each element selector and pseudo-element contained inside the overall selector.

Note: Universal selector( * ), combinators(+, >, ~, '') and nagation pseudo-class(:not) have no effect on specificity.

Source order

As mentioned above, if multiple competing selectors have the same importance and specificity, the third factor that comes into play to help decide which rule wins is source order ---late rules will win over earlier rules.

A note on rule mixing

One thing you should bear in mind when considering all this cascade theroy, and what styles get applied over other styles, is that all this happens at the property level --- properties override other properties, but you don't get entire rules overriding other rules. When several CSS rules match the same element, they are all applied to that element. Only after that are any conflicting properties evaluated to see which individual styles will win over others.(当几个CSS规则匹配同样的元素时,它们都将被用于元素。只有当它们是相互冲突的属性时,它们才会被判断出哪一个单独的样式会将其他的所有样式打败。)

Inheritance

The idea is that some property values applied to an element will be inherited by that element's children, and some won't.

  1. For example, it makes sense for font-family and color to be inherited.

  2. As other example, it makes sense for margin, padding, border and background-image to NOT be inherited.

Controlling inheritance

CSS provides three special values to handle inheritance.

  1. inherite: This value sets the property value applied to a selected element to be the same as that of its parent element.

  2. initial: This value sets the property value applied to a selected element to be the same as the value set for that element in the browser's default style sheet. If no value is set by the browser's default style sheet and the property is naturally, then the property value is set to inherit instead.(属性被设置为浏览器的默认样式,如果浏览器没有默认样式,并且该属性是自然继承的,那么属性值将被设置为inherit)

  3. unset: This value resets the property to its natural value, which means that if the property is natually inherited it acts like inherit, otherwise it acts like initial.(要么是inherite, 要么是initial)

引申:a元素为什么不继承父元素的字体颜色。

阅读MDN文档之层叠与继承(二)的更多相关文章

  1. 阅读MDN文档之CSS选择器介绍(一)

    本文为阅读MDN文档笔记 目录 Different types of Selectors Attribute Selectors Presence and value attribute select ...

  2. 阅读MDN文档之StylingBoxes(五)

    目录 BoxModelRecap Box properties Overflow Background clip Background origin Outline Advanced box prop ...

  3. 阅读MDN文档之布局(四)

    Introducing positioning Static positioning Relative positioning Introducing top, bottom, left and ri ...

  4. 阅读MDN文档之布局(四)

    Introducing positioning Static positioning Relative positioning Introducing top, bottom, left and ri ...

  5. 阅读MDN文档之基本盒模型(三)

    Box properties Margin collapsing Adjacent siblings(相邻兄弟) Parent and first/last child Empty blocks Ac ...

  6. Emacs阅读chm文档

    .title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium ...

  7. 前端开发必备之MDN文档

    想下载MDN文档的看前面的内容就可以了. HTML 源码下载 MDN官方下载地址:https://developer.mozilla.org/media/developer.mozilla.org.t ...

  8. MDN 文档高级操作进阶教程

    MDN 文档高级操作进阶教程 MDN 文档, 如何优雅的使用 MDN 文档上的富文本编辑器 pre & 语法高亮器 code & note box source code 上传附件 i ...

  9. 关于MDN,HTML入门来自MDN文档

    由开发者和作者组成的开源社区:推动web发展, MDN(Mozilla Developer Network) 维基,共同维护做贡献: 需要使用到github账号进行验证,以此再创建MDN账号: HTM ...

随机推荐

  1. .Net Core 2.0 EntityFrameworkCore CodeFirst入门教程

    最近难得有时间闲下来,研究了一下.net core 2.0,总的来说,目前除了一些第三方的库不支持外,基本上可以满足我们的项目需求了! 我们就以一个网站开发为例,搭建一个简单的三层架构,先熟悉一下.n ...

  2. ctrl+z 以后怎么恢复挂起的进程

    (1) CTRL+Z挂起进程并放入后台 (2) jobs 显示当前暂停的进程 (3) bg %N 使第N个任务在后台运行(%前有空格) (4) fg %N 使第N个任务在前台运行 默认bg,fg不带% ...

  3. 51nod 1058 N的阶乘的长度 位数公式

    1058 N的阶乘的长度基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3.Input输入N( ...

  4. 360提供的php防注入代码

    <?php //Code By Safe3 function customError($errno, $errstr, $errfile, $errline) { echo "< ...

  5. Nginx实现https网站配置

    咱们下面以google代理实现的方式来实现https.注意这里的https与google的https无关. 代码如下.有备注/usr/local/nginx/config/vhost/hk.cn331 ...

  6. springmvc对于JSON对象的处理

    1.常见的json    jar包,及其优缺点(开发中可以一起使用) json-lib     缺点:依赖第三方的包 jackson SpringMVC内置的json装换工具,依赖包较少 GSON   ...

  7. python3 爬虫---爬取糗事百科

    这次爬取的网站是糗事百科,网址是:http://www.qiushibaike.com/hot/page/1 分析网址,参数''指的是页数,第二页就是'/page/2',以此类推... 一.分析网页 ...

  8. LintCode-买卖股票的最佳时机

    如果有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多仅仅同意完毕一次交易(比如,一次买卖股票),设计一个算法来找出最大利润. 您在真实的面试中是否遇到过这个题? Yes 例子 给出 ...

  9. 2016.3.17__CSS3动画__第十一天

    CSS3动画 假设您认为这篇文章还不错,能够去H5专题介绍中查看很多其它相关文章. 通过 CSS3,我们能够创建动画,这能够在很多网页中取代动绘图片.Flash 动画以及 JavaScript. 今日 ...

  10. PKI(公钥基础设施)基础知识笔记

    数字签名 数字签名(又称公钥数字签名.电子签章)是一种类似写在纸上的普通的物理签名,可是使用了公钥加密领域的技术实现.用于鉴别数字信息的方法. 一套数字签名通常定义两种互补的运算.一个用于签名,还有一 ...