每个合法的文档都会生成一个结构树,有了结构树元素的祖先、属性兄弟元素等等创建选择器来选择元素,这是CSS继承的核心。继承是从一个元素向后代元素传递属性值所采用的机制。面向一个元素使用哪些值时,用户代理不仅要考虑继承,还要考虑特殊性,另外需要考虑声明本身的来源,这个过程就叫层叠。

本文讨论3种机制之间的关联:特殊性、继承和层叠。

特殊性

同一元素可以使用不同的方法来选择元素。但是每个规则,用户代理会计算选择器的特殊性,并将这个特殊性附加到规则的个个声明。如果一个元素有两个或多个冲突的属性声明,那么最高特殊性的声明会胜出。

特殊性计算规则:

1)对于选择器中给定的各个ID属性值,加0100

2)对于选择器中给定的各个类属性值,属性选择或伪类,加0010

3)对于选择器中给定的各个元素和伪元素,加0001

4)结合符和通配选择器对特殊性没有任何贡献

对于重叠的选择,如果符合多种规则,这些规则将累加计算。0011特殊性优于0001,0100优于0022。这是因为值从左向右排序。

题目:下列选择器同指向同一元素,容器的颜色应该为什么颜色?

div.container  div.bright{background: #996699;}
div.bright{background: #99CCCC;}
div#id216{background: #FFFF66;}
#id216{background: #CC3333;}
div.container div#id216{background: #333399;}

考察特殊性,答案#333399;特殊性分别为:0022,0011,0101,0100,0112

注意:特殊性不是解决冲突的全部,实际上,所有样式冲突的解决都由层叠来处理。

到目前为止,我们只见过以0开头的特殊性。一般地,第一个0是为内联样式声明保留的,他比所有其他声明的特殊性都高。

<div class ="bright" id ="id216" style="background:#003300"></div>

有时候某个声明可能非常重要,超过了所有其他声明,并允许在这些声明的结束分号之前插入!important来标志。

#id216{ background: #990033 !important;}

当样式表增设!important时,内联冲突样式将会失效,以important为准。

继承

基于继承机制,样式不仅应用到指定的元素,还会应用到它的后代元素。

一般地,大多数框模型属性(包括外边距、内边距、背景和边框)都不能继承,其原因是因为如果这些属性被继承,文档将会变得更加混乱。

继承的值根本没有特殊性,甚至连0特殊性都没有。(0特殊性比无特殊性要强)

不加区别地使用通配选择器可能存在的问题之一,由于他能匹配任何袁术,所以通配选择器往往有一种短路继承的效果。

层叠

如果特殊性相等的两个规则相同同时应用到同一个元素,浏览器会通过层叠解决这个冲突。

css所基于的方法就是让样式层叠在一切,这是通过结合继承和特殊性做到的。层叠的规则:

1)找出所有相关的规则,这些规则都包含与一个给定元素匹配的选择器。

2)按显式权重对应用到该元素的所有声明排序。标志!important的规则的权重要高于没有 !important标志的规则。声明权重考虑5级:(权重有大到小顺序依次为)

    1.读者的重要声明

    2.创作人员的重要声明

    3.创作人员的正常声明

    4.读者的正常声明

    5.用户代理声明

3)按特殊性对应用到给定元素的所有声明排序。有较高特殊性的元素权重要大于有较低特殊性的元素。

4)按出现顺序对应用到给定元素的所有声明顺序。一个声明在样式表或文档中越后出现,他的权重就越大。。如果样式表中有导入的样式表,一般认为出现在导入样式表中的声明在前,在主样式表中的所有声明在后。

注意:多类选择符,以空格分割不同的类名,但是根据层叠的规则,元素中的类的顺序无关,而是与样式表声明的位置有关。

<div class = "box red blue yellow"></div>

red和blue和yellow设置冲突的背景颜色属性,但是,box最终显示的颜色和html中这三个类顺序无关。声明样式表如下:

.red{background: red;}
.yellow{background: yellow;}
.blue{background: blue;}

box最终显示的颜色以声明的顺序有关,最终显示为blue背景颜色。

css细节复习笔记——结构与层叠的更多相关文章

  1. css细节复习笔记——浮动

    CSS除了能够改变字体.背景和所有其他属性,还能够完成基本布局任务. div+css通过浮动和定位.盒子模型等技术应用,是最常用的布局方式. 定位的基本思想很简单,它允许定义元素框相对于其正常位置应该 ...

  2. css细节复习笔记——基本视觉格式化

    css包含如此开放.如此强大的一个模型,对于这样一个模型,可以有无数种方法结合应用各种属性,可以得到的效果数不胜数. 基本框 css假定每个元素都会生成一个或多个矩形框,这称为元素框.各元素中心有一个 ...

  3. css细节复习笔记——内边距、边框和外边距

    一个元素的内边距.边框和外边距属性会影响着整个文档如何布局,更重要的是,它们会严重影响给定元素的外观. 高度和宽度 这两个属性不能应用到行内非替换元素,其高度和宽度由链接的内容确定,而不是由创作人员确 ...

  4. CSS基础知识—【结构、层叠、视觉格式化】

    结构和层叠 选择器的优先级顺序: style[内联元素]选择器>Id选择器>类选择器 属性选择器>元素选择器>通配器选择器 重要性:@important 有这个标记的属性值,优 ...

  5. [读书笔记] CSS权威指南2: 结构和层叠

    层叠样式表中最基本的一个方面可能就是层叠——冲突的声明要通过这个层叠过程排序,并由此确定最终的文档表示.这个过程的核心是选择器及其相关声明的特殊性,以及继承机制. 特殊性 对于每个规则,用户代理会计算 ...

  6. Angular复习笔记5-指令

    Angular复习笔记5-指令 在Angular中,指令是一个重要的概念,它作用在特定的DOM元素上,可以扩展这个元素的功能,为元素增加新的行为.本质上,组件可以被理解为一种带有视图的指令.组件继承自 ...

  7. angular复习笔记4-模板

    Angular复习笔记4-模板 简介 模板是一种自定义的标准化页面,通过模板和模板中的数据结合,可以生成各种各样的网页.在Angular中,模板的默认语言是HTML,几乎所有的HTML语法在模板中都是 ...

  8. css权威指南--笔记

    第1章 css和文档 1,元素:替换元素(img input),非替换元素(大多数span). 2,link:rel(代表关系:stylesheet,候选样式表:alternate styleshee ...

  9. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

随机推荐

  1. leetcode69

    public class Solution { public int MySqrt(int x) { long r = x; while (r * r > x) r = (r + x / r) ...

  2. 实用 Linux 命令行使用技巧集锦

    最近在Quora上看到一个问答题目,关于在高效率Linux用户节省时间Tips.将该题目的回答进行学习总结,加上自己的一些经验,记录如下,方便自己和大家参考. 下面介绍的都是一些命令行工具,这些工具在 ...

  3. 读取Excel里面的内容转为DataTable

    using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using Sy ...

  4. ubuntu 安装google输入法

    第五步:通常情况下,IBus图标(一个小键盘)会出现在桌面右上角的任务栏中.有时候这个图标会自行消失,可使用以下命令,找回消失的IBus图标: ibus-daemon -drx   不建议用googl ...

  5. Linux系统下使用ckfinder上传中文名的图片无法正常预览

    问题描述:使用ckfinder上传带有中文名称的图片后在Windows本地可以正常预览,部署在Linux系统后,带有中文名的图片不能正常显示 解决办法:找到Tomcat的根目录 --> conf ...

  6. Android提交自己的作品到GitHub上

    最近在做一个期待上架的我个人写的App,我打算将它开源出去,托管到GitHub上.看了一下网上的教程,其实五花八门,我照着做了,还是没法提交到GitHub上.自己研究了一下,其实非常的简单.这里决定介 ...

  7. ADF控件ID变化引发JS无法定位控件的解决方法

    原文地址:ADF控件ID变化引发JS无法定位控件的解决方法作者:Nicholas JSFF定义的控件ID到了客户端时往往会改变.例如在JSFF中的一个的ID为"ot1",但是当这个 ...

  8. Linux grub命令

    一.简介 GNU GRUB(GRand Unified Bootloader简称"GRUB")是一个来自GNU项目的多操作系统启动程序.GRUB是多启动规范的实现,它允许用户可以在 ...

  9. Linux中bash编程

    bash编程也叫shell编程 预定义变量         $? 最后一次执行的命令的返回状态.如果这个变量的值为0,证明上一个命令正确的执行:如果这个变量返回的值非0(具体是那个数,有命令自己来决定 ...

  10. Monokai风格的EditPlus配色方案

    EditPlus的配置文件editplus_u.ini,该文件默认在:系统盘:\Users\用户名\AppData\Roaming\EditPlus目录中.将其中的内容替换为如下即可: [Option ...