层叠
声明冲突:同一个样式,多次应用到同一个元素
层叠:解决声明冲突的过程,浏览器自动处理(权重计算)
1. 比较重要性
重要性从高到底:
作者样式表:开发者书写的样式
1)作者样式表中的 !important 样式
2)作者样式表中的普通样式
3)浏览器默认样式表中的样式
2. 比较特殊性
看选择器
总体规则:选择器选中的范围越窄,越特殊
具体规则:通过选择器,计算出一个4位数(x x x x)
3. 比较源次序
代码书写靠后的胜出
test1:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
p {
color: lightcoral;
}
.container p.test2 {
color: purple;
}
p:nth-child(3) {
color: lightblue;
}
p#demo1 {
color: lightgray;
}
div p.test2 {
color: lightseagreen;
}
style>
head>
<body>
<main>
<div class="container">
<p>Lorem ipsum dolor sit amet.p>
<a href="https://www.baidu.com/">这是一个超链接a>
<p style="color:navy" class="test2" id="demo1">Saepe ipsa eum provident corrupti?p>
<p id="demo2" class="test1">Optio blanditi isquidem suscipit deserunt!p>
<div>
<span>HTMLspan>+<span>CSSspan>+<span>JavaScriptspan>编程
<p>下面是一条水平线
<hr>
p>
div>
div>
<p>分隔段落p>
main>
body>
html>
test2:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
main div.container a {
color: lightgoldenrodyellow;
}
.container span a[href] {
color: lightcoral;
}
a:first-child#demo {
color: lightseagreen;
}
span.box a.test {
color: lightslategray
}
style>
head>
<body>
<main>
<div class="container">
<a>百度a>
<span class="box">
点击可跳转:<a href="https://www.google.cn/" class="test" id="demo">谷歌a>
span>
<div>
<img src="planet.ico">
<a href="https://baike.baidu.com/item/%E6%98%9F%E7%90%83/18584?fr=aladdin">星球百度百科a>
div>
div>
<p>You can reach Michael at:p>
<ul>
<li><a href="https://example.com">Websitea>li>
<li><a href="mailto:m.bluth@example.com">Emaila>li>
<li><a href="tel:+123456789">Phonea>li>
ul>
main>
body>
html>
test3:在重要性和特殊性相同的情况下,比较源次序,代码越靠后的胜出!(如左图)
在作者样式表中加!important则表示最重要,但不到万不得已的情况,建议不要使用该方法(如右图)。
子元素会继承父元素的某些CSS属性
通常,跟文字内容相关的属性都能被继承
一个元素一个元素依次渲染,顺序按照页面文档的树形目录结构进行
渲染每个元素的前提条件:该元素的所有CSS属性必须有值
一个元素,从所有属性都没有值,到所有的属性都有值,这个计算过程,叫做属性值计算过程
特殊的两个CSS取值:
box:盒子,每个元素在页面中都会生成一个矩形区域(盒子)
盒子类型:
行盒在页面中不换行、块盒独占一行(display默认值为inline)
无论是行盒、还是块盒,都由下面几个部分组成,从内到外分别是:
padding:length;
默认情况下,width和height设置的是内容盒宽高。
衡量设计稿尺寸的时候,往往使用的是边框盒,但设置width和height,则设置的是内容盒
默认情况下,背景覆盖边框盒
可以通过background-clip进行修改(background-clip:content-box / border-box / padding-box)
溢出处理
overflow,控制内容溢出边框盒后的处理方式
overflow:auto / visible / scroll / hidden
overflow是 overflow-x 和overflow-y的简写属性
断词规则
word-break,会影响文字在什么位置被截断换行
换行符 | 空格和制表符 | 文字换行 | 行尾空格 | |
---|---|---|---|---|
normal | 合并 | 合并 | 换行 | 删除 |
nowrap | 合并 | 合并 | 不换行 | 删除 |
pre | 保留 | 保留 | 不换行 | 保留 |
pre-wrap | 保留 | 保留 | 换行 | 挂起 |
pre-line | 保留 | 合并 | 换行 | 删除 |
break-spaces | 保留 | 保留 | 换行 | 换行 |
常见的行盒:包含具体内容的元素
span、strong、em、i、img、video、audio
空白折叠
空白折叠,发生在行盒(行块盒)内部 或 行盒(行块盒)之间
可替换元素 和 非可替换元素
大部分元素,页面上显示的结果,取决于元素内容,称为非可替换元素
少部分元素,页面上显示的结果,取决于元素属性,称为可替换元素
可替换元素:img、video、audio
绝大部分可替换元素均为行盒。
可替换元素类似于行块盒,盒模型中所有尺寸都有效。
object-fit:指定可替换元素的内容应该如何适应到其使用的高度和宽度确定的框