3.层叠

稍微复杂的样式表中都可能存在两条甚至多条规则同时选择一个元素的情况。CSS通过一种叫作层叠(cascade)的机制来处理这种冲突。

层叠机制的原理是为规则赋予不同的重要程度。最重要的是作者样式表,即由网站开发者所写的样式。其次是用户样式表,用户可以通过浏览器的设置选项,为网页应用自己的样式。排在最后的是浏览器(或用户代码)的默认样式表,它们一般都会被作者样式表覆盖掉。

CSS允许用户使用!important覆盖任何规则。

层叠机制的重要性级别从高到低:

  • 标注为!important的用户样式
  • 标注为!important的作者样式
  • 作者样式
  • 用户样式
  • 浏览器的默认样式

在此基础上,规则再按选择符的特殊性排序。特殊性高的选择符会覆盖特殊性低的选择符。如果两条规则的特殊性相等,则后定义的规则优先。

4.特殊性

为了量化规则的特殊性,每种选择符都对应着一个数值。

一个规则的特殊性就表示为其每个选择符的累加数值。

特殊性由高到低:

  • 行内样式
  • ID选择符的数目
  • 类(class)选择符、伪类选择符及属性选择符的数目
  • 类型(type)选择符和伪元素选择符的数目

如果两条规则拥有相等的特殊性,则优先应用后定义的规则,也就是层叠机制

理解特殊性是写好CSS的关键,而控制特殊性规则是大型网站开发中最难处理的问题。利用特殊性,可以先为公用元素设置默认样式,然后在更特殊的元素上覆盖这些样式。

我们应该简化选择符、降低特殊性。

5.继承

任何直接应用给元素的样式都会覆盖继承的样式,因为继承的样式没有任何特殊性。

继承是很有用的机制,有了它就可以避免给一个元素的所有后代重复应用相同的样式。

6.为文档应用样式

6.1 link与style元素

把样式放在style元素中。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
body {
color: black;
}
</style>
</head>
<body>
<p>A general intro</p>
</body>
</html>

为了让样式表能在多个页面中重用,通常最好把它保存到一个外部文件中。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style> </style>
<link href="base.css" rel="stylesheet"> <!-- 外部文件 -->
</head>
<body>
<p>A general intro</p>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
@import url("base.css"); /* 使用@import加载外部文件 */
</style>
</head>
<body>
<p>A general intro</p>
</body>
</html>

如果为某个元素应用样式时,有两个或更多特殊性相等的规则互相竞争,则后声明的样式胜出。

6.2 性能

选择以什么方式把CSS加载到页面中,决定了浏览器显示页面的速度。

1.减少HTTP请求

2.压缩和缓存内容

3.不让浏览器渲染阻塞JavaScript

如果你在HTML文档的<head>元素中加入了<script>元素,浏览器必须先把它链接的脚本下载下来,然后再向用户显示网页内容。换句话说,这种情况下HTMLCSS解析完全被下载以及执行脚本阻断了,也就是所谓的“渲染阻塞”。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style> </style>
</head>
<body>
<!-- 最后加载JavaScript以避免渲染阻塞 -->
<script src="core.js"></script>
</body>
</html>

参考资料:

  • 《精通CSS》— [英] 安迪·巴德、[瑞典] 埃米尔·比约克隆德

CSS基础知识(下)的更多相关文章

  1. 前端开发:css基础知识之盒模型以及浮动布局。

    前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把 ...

  2. CSS基础知识之float

    前段时间写过一篇CSS基础知识之position,当时对float的理解不太准确,被慕课网多名读者指出(原文已修正,如有误导实在抱歉).现对float进行更深入的学习,在此把学习心得分享给大家. 浮动 ...

  3. (转)第一天 XHTML CSS基础知识 文章出处:标准之路(http://www.aa25.cn/div_css/902.shtml)

    欢迎大家学习<十天学会web标准>,也就是我们常说的DIV+CSS.不过这里的DIV+CSS是一种错误的叫法,建议大家还是称之为web标准. 学习本系列教程需有一定html和css基础,也 ...

  4. CSS基础知识之position

    最近在慕课网学习了 网页布局基础 和 固定层效果 ,都是由声音甜美的 婧享人生 老师所录制,视频详细讲解了CSS中position的用法,在此把学习笔记分享给大家. CSS定位机制 标准文档流(Nor ...

  5. 【CSS】 CSS基础知识 属性和选择

    css基础知识 html的基本标签都是千篇一律的,为了能够个性化外观,就需要进行样式的调整,而css就是专门用来维护,管理样式的一种格式.在html中定义css有三种方法 1. 为标签添加style属 ...

  6. CSS基础知识01

    一.CSS基础知识介绍 1.css是cascading style sheet层叠式样式表的简写 2.css小用法 加粗:font-weight:bold;             正常用:norma ...

  7. 〖前端开发〗HTML/CSS基础知识学习笔记

    经过一天的学习,把慕课网的HTML/CSS基础知识学完了,笔记整理: 1. 文件结构: HTML文件的固定结构: <html> <head>...</head> & ...

  8. Web学习篇之---css基础知识(一)

    css基础知识(一) 1.css样式: 载入css样式有下面四种: 1).外部样式 2).内部样式 3).行内样式 4).导入样式 <link href="layout.css&quo ...

  9. DIV+CSS专题:第一天 XHTML CSS基础知识

    欢迎大家学习<十天学会web标准>,也就是我们常说的DIV+CSS.不过这里的DIV+CSS是一种错误的叫法,建议大家还是称之为web标准.   学习本系列教程需有一定html和css基础 ...

  10. HTML+CSS基础知识(2)选择器的使用、盒子模型的讲解、列表的使用

    文章目录 1.CSS基础知识 2.css样式 2.1.代码: 2.2 测试结果 3.CSS的语法 3.1 代码 4.块元素和行内元素 4.1 代码 4.2 测试结果 5.常用的选择器 5.1 代码块 ...

随机推荐

  1. java 数据结构(七):Collection接口

    1.单列集合框架结构|----Collection接口:单列集合,用来存储一个一个的对象* |----List接口:存储序的.可重复的数据. -->“动态”数组* |----ArrayList. ...

  2. linux专题(六):Vim编辑器

    http://dwz.date/UDf 什么是Vim编辑器 Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是 ...

  3. Tomcat的结构

    Tomcat其实就是一个容器,最顶层的容器叫Server,代表整个服务器,Server中包含至少一个Service,用于具体提供服务.Service主要包含两部分:Connector和Containe ...

  4. HLS的M3U8文件介绍

    HLS的M3U8文件介绍 HLS (HTTP Live Streaming)是Apple的动态码率自适应技术.主要用于PC和Apple终端的音视频服务. 相较于实时传输协议(RTP),HLS可以穿过任 ...

  5. js dom演示

    <body> <div id="div1"> <p name="p1">p1内容</p> <p name= ...

  6. Python | Python初学者的自我修养,找到自己的方向

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第21篇文章,我们继续多线程的话题. 上周的文章当中我们简单介绍了线程和进程的概念,以及在Python当中如何在主线 ...

  7. “git pull” 强制覆盖本地文件

    放弃本地修改,使用服务器代码覆盖本地的Git命令如下: $ git fetch --all $ git reset --hard origin/master $ git pull 使用master分支 ...

  8. echarts 实战 : 图表竖着或横着是怎样判定的?

    这个问题比较简单. echarts 的图表默认是竖着的. 只要 xAxis 和 yAxis 互换,竖着的图就变成了横着的图了. 所以我们可以可以写一个xy轴互换的方法. reverseXYAxis = ...

  9. cropper.js 二次开发:截图并下载图片

    cropper.js 是一个基于jquery的图片截取库. 参考:https://blog.csdn.net/weixin_38023551/article/details/78792400 我的代码 ...

  10. 【JVM之内存与垃圾回收篇】运行时数据区概述及线程

    运行时数据区概述及线程 前言 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 ...