目录

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. nginx反向代理node.js获取客户端IP

    使用Nginx做node.js程序的反向代理,会有这么一个问题:在程序中获取的客户端IP永远是127.0.0.1 如果想要拿到真实的客户端IP改怎么办呢? 一.首先配置Nginx的反向代理 proxy ...

  2. JavaScript内置的预定义函数

    javascript引擎中有一组可供随时调用的内建函数.这些内建函数包括 parseInt()  将收到的任何输入值转换成整数类型输出,如果转换失败,返回NaN parseFloat() 功能基本与p ...

  3. 04.redis集群+SSM整合使用

    redis集群+SSM整合使用 首先是创建redis-cluster文件夹: 因为redis最少需要6个节点(三主三从),为了更好的理解,我这里创建了两台虚拟机(192.168.0.109 192.1 ...

  4. 数据结构与算法(C/C++版)【栈与队列】

    第三章<栈与队列> (一)栈简介  栈(Stack):只允许在一端进行插入或删除操作的线性表.首先栈是一种线性表,但是限定这种线性表只能在某一端进行插入和删除操作栈顶(top):线性表允许 ...

  5. PostgreSQL启动main函数都干了什么(一)

    DB Version:9.5.3 环境:CentOS7.x 调试工具:GDB source:src/backend/main/main.c 56 /* 57 * Any Postgres server ...

  6. 一道看似dp实则暴力的题 Zombie's Treasure Chest

     Zombie's Treasure Chest 本题题意:有一个给定容量的大箱子,此箱子只能装蓝宝石和绿宝石,假设蓝绿宝石的数量无限,给定蓝绿宝石的大小和价值,要求是获得最大的价值 题解:本题看似是 ...

  7. svn文件回滚到某个历史版本号

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/50819642 本文出自[我是干勾鱼的博客] 有时候想要将svn中的某个文件回滚到 ...

  8. Javascript 进阶 面向对象编程 继承的一个样例

    Javascript的难点就是面向对象编程,上一篇介绍了Javascript的两种继承方式:Javascript 进阶 继承.这篇使用一个样例来展示js怎样面向对象编程.以及怎样基于类实现继承. 1. ...

  9. 【SqlServer系列】表达式(expression)

    1   概述 本篇这文章主要概述SqlServer表达式. 2   具体内容 2.1  使用范围 SQL Server(2008开始) :Azure SQL数据库:Azure  SQL数据仓库:并行数 ...

  10. CentOS 7 安装.NET Core 2.0

    一.添加dotnet产品Feed 在安装.NET Core之前,您需要注册Microsoft产品Feed. 这只需要做一次. 首先,注册Microsoft签名密钥,然后添加Microsoft产品Fee ...