CSS
一、 CSS 基础
1. CSS 简介
CSS 的全称为:层叠样式表 ( Cascading Style Sheets ) 。
CSS 也是一种标记语言,用于给 HTML 结构设置样式,例如:文字大小、颜色、元素宽高等等。
简单理解: CSS 可以美化 HTML , 让 HTML 更漂亮。
核心思想: HTML 搭建结构, CSS 添加样式,实现了:结构与样式的分离。
2. CSS 的编写位置
2.1 行内样式
写在标签的 style 属性中,(又称:内联样式)。
语法:
<h1 style="color:red;font-size:60px;">欢迎来到小站学习</h1> |
注意点:
style 属性的值不能随便写,写要符合 CSS 语法规范,是
名:值;的形式。行内样式表,只能控制当前标签的样式,对其他标签无效。
存在的问题:
书写繁琐、样式不能复用、并且没有体现出: 结构与样式分离 的思想,不推荐大量使用,只 有对当前元素添加简单样式时,才偶尔使用。
2.2 内部样式
写在 html 页面内部,将所有的 CSS 代码提取出来,单独放在
<style>标签中。语法:
<style>
h1 {
color: red;
font-size: 40px;
}
</style>注意点:
标签理论上可以放在HTML文档任意地方,但一般放在标签中。 - 此种写法:样式可以复用、代码结构清晰。
存在的问题:
- 并没有实现:结构与样式 完全分离 。
- 多个 HTML 页面无法复用样式。
2.3 外部样式
写在单独的 .css 文件中,随后在 HTML 文件中引入使用。
语法:
新建一个扩展名为 .css 的样式文件,把所有 CSS 代码都放入此文件中。
h1{
color: red;
font-size: 40px;
}在 HTML 文件中引入 .css 文件。
<link rel="stylesheet" href="./xxx.css">
注意点:
- 标签要写在 标签中。
- 标签属性说明:
href :引入的文档来自于哪里。
rel :( relation :关系)说明引入的文档与当前文档之间的关系。
外部样式的优势:样式可以复用、结构清晰、可触发浏览器的缓存机制,提高访问速 度 ,实现了 结构与样式的完全分离 。
实际开发中, 几乎都使用外部样式 ,这是 最推荐的使用方式!
3. 样式表的优先级
优先级规则: 行内样式 > 内部样式 = 外部样式
- 内部样式、外部样式,这二者的优先级相同,且:后面的 会覆盖 前面的(简记:“后来 者居上”)
- 同一个样式表中,优先级也和编写顺序有关,且:后面的 会覆盖 前面的(简记:“后来 者居上”)。
| 分类 | 优点 | 缺点 | 使用频率 | 作用范围 |
|---|---|---|---|---|
| 行内样式 | 优先级最高 | 1. 结构与样式未分离 2. 代码结构混乱 3. 样式不能复用 | 很低 | 当前标签 |
| 内部样式 | 1. 样式可复用 2. 代码结构清晰 | 1. 结构与样式未彻底分离 2. 样式不能多页面复用 | 一般 | 当前页面 |
| 外部样式 | 1. 样式可多页面复用 2. 代码结构清晰 3. 可触发浏览器的缓存机制 4. 结构与样式彻底分离 | 需要引入才能使用 | 最高 | 多个页面 |
4. CSS 语法规范
组成部分:
选择器(找到要设置样式的元素)
声明块:设置具体样式(是有一个或多个声明组成),声明格式:
属性名:属性值;
最后一个分号可省略,但建议保留
选择器与声明块之间、属性名与属性值之间需保留空格。
注释写法:
/* 注释内容 */(示例如下):/* 给h1元素添加样式 */
h1 {
/* 设置文字颜色为红色 */
color: red;
/* 设置文字大小为40px */
font-size: 40px;
}
5. CSS 代码风格
展开风格:开发时推荐,便于维护和调试。
h1 {
color: red;
font-size: 40px;
}紧凑风格:项目上线时推荐,可减小文件体积。
h1{color:red;font-size:40px;}
备注:
上线前可通过工具将展开风格转换为紧凑风格,节约网络流量。
二、 CSS 选择器
1. CSS基本选择器
1.1 通配选择器
作用:选中所有 HTML 元素。
语法:
* {
属性名: 属性值;
}举例:
* {
color: orange;
font-size: 40px;
}
备注:常用于清除默认样式。
1.2 元素选择器
作用:为页面中同种元素统一设置样式。
语法:
标签名 {
属性名: 属性值;
}举例:
h1 {
color: orange;
font-size: 40px;
}
p {
color: blue;
font-size: 60px;
}
备注:无法实现差异化设置。例如上面的代码中,所有的
p元素效果都一样。
1.3 类选择器
作用:根据元素的 class 值选中特定元素。
语法:
.类名 {
属性名: 属性值;
}举例:
.speak {
color: red;
}
.answer {
color: blue;
}注意点:
- 元素的 class 属性值不带
.,CSS 类选择器需带.。 - class 值建议用英文与数字组合,多单词用
-连接,命名需见名知意。 - 一个元素不能重复写 class 属性,但可写多个值(用空格隔开),如
<h1 class="speak big">你好啊</h1>。
- 元素的 class 属性值不带
1.4 ID 选择器
作用:根据元素的 id 属性值精准选中唯一元素。
语法:
#id值 {
属性名: 属性值;
}举例:
#earthy {
color: red;
font-size: 60px;
}注意点:
- id 属性值由字母、数字、下划线、短杠组成,以字母开头,区分大小写,无空格。
- 一个元素只能有一个 id 属性,多个元素的 id 值不能重复。
- 元素可同时拥有 id 和 class 属性。
1.5 基本选择器总结
| 基本选择器 | 特点 | 用法 |
|---|---|---|
| 通配选择器 | 选中所有标签,一般用于清除样式 | * {color:red} |
| 元素选择器 | 选中所有同种标签,不能差异化选择 | h1 {color:red} |
| 类选择器 | 选中所有特定类名的元素,使用频率高 | .say {color:red} |
| ID 选择器 | 选中特定 id 值的唯一元素 | #earthy {color:red} |
2. CSS 复合选择器
复合选择器基于基本选择器组合而成,可快速精准选中复杂结构中的元素。
2.1 交集选择器
作用:选中同时符合多个条件的元素(即 “既… 又…”)。
语法:选择器 1 选择器 2 选择器 3… 选择器 n {}
举例:
/* 选中类名为beauty的p元素 */
p.beauty {
color: blue;
}
/* 选中类名包含rich和beauty的元素 */
.rich.beauty {
color: green;
}注意点:
- 有标签名时,标签名需写在前面。
- 不建议使用 id 选择器或通配选择器作为交集条件。
- 不能出现两个元素选择器(一个元素不能同时是两种标签)。
- 常用形式:元素选择器 + 类选择器。
2.2 并集选择器
作用:选中多个选择器对应的元素(即 “要么… 要么…”),又称分组选择器。
语法:选择器 1, 选择器 2, 选择器 3, … 选择器 n {}
举例:
#peiqi,
.rich,
.beauty {
font-size: 40px;
background-color: skyblue;
width: 200px;
}注意点:
- 建议竖着书写,便于阅读。
- 任何类型的选择器都可作为并集的一部分。
- 常用于集体声明,缩小样式表体积。
2.3 HTML元素间的关系
父元素:直接包裹某个元素的元素。
子元素:被父元素直接包含的元素。
祖先元素:父元素及父元素的父元素等(父元素属于祖先元素)。
备注:父元素,也算是祖先元素的一种。
例如:张三的父亲,也算是张三的祖先,但一般还是称呼:父亲。
后代元素:子元素及子元素的子元素等(子元素属于后代元素)。
备注:子元素,也算是后代元素的一种。
例如:张三的儿子,也算是张三的后代,但一般还是称呼:儿子。
兄弟元素:具有相同父元素的元素。
2.4 后代选择器
作用:选中指定元素中符合要求的后代元素。
语法:选择器 1 选择器 2 选择器 3 … 选择器 n {}(先写祖先,再写后代,空格表示 “… 中的”)
举例:
/* 选中ul中的所有li */
ul li {
color: red;
}
/* 选中ul中所有li中的a */
ul li a {
color: orange;
}
/* 选中类名为subject元素中的所有li */
.subject li {
color: blue;
}
/* 选中类名为subject元素中的类名为front-end的li */
.subject li.front-end {
color: blue;
}注意点:
- 最终选中的是后代,不是祖先。
- 儿子、孙子、重孙子等都属于后代。
- 需符合 HTML 嵌套规则(如 p 中不能嵌套 h1~h6)。
2.5 子代选择器
作用:选中指定元素中符合要求的子元素(仅儿子元素)。
语法:选择器 1 > 选择器 2 > 选择器 3 > … 选择器 n {}(> 表示 “… 的子代”)
举例:
/* div中的子代a元素 */
div>a {
color: red;
}
/* 类名为persons的元素中的子代a元素 */
.persons>a {
color: red;
}注意点:仅选中直接子元素,不包含孙子、重孙子等后代元素。
2.6 兄弟选择器
相邻兄弟选择器:选中指定元素后紧挨着的下一个兄弟元素。
语法:选择器 1 + 选择器 2 {}
举例:
/*选中 div 后相邻的兄弟 p 元素)*/
div+p {
color:red;
}
通用兄弟选择器:选中指定元素后所有符合条件的兄弟元素。
语法:选择器 1~ 选择器 2 {}
举例:
/*选中 div 后的所有兄弟 p 元素*/
div~p {
color:red;
}
注意点:两种选择器均只选中下方的兄弟元素。
2.7 属性选择器
作用:选中属性值符合要求的元素。
语法及举例:
div[title]{color:red;} /* 选中具有title属性的div元素 */
div[title="atguigu"]{color:red;} /* 选中title属性值为atguigu的div元素 */
div[title^="a"]{color:red;} /* 选中title属性值以a开头的div元素 */
div[title$="u"]{color:red;} /* 选中title属性值以u结尾的div元素 */
div[title*="g"]{color:red;} /* 选中title属性值包含g的div元素 */
2.8 伪类选择器
- 作用:选中元素的特殊状态(“伪” 指不是真实的类,是元素的状态)。
(1)动态伪类
:link:超链接未被访问的状态。:visited:超链接访问过的状态。:hover:鼠标悬停在元素上的状态。:active:元素被激活的状态(按下鼠标不松开)。- 注意点:需遵循 LVHA 顺序(link → visited → hover → active)。
:focus:表单元素获取焦点时的状态(通过点击、触摸或 tab 键选中)。
(2)结构伪类
常用伪类:
:first-child:所有兄弟元素中的第一个。:last-child:所有兄弟元素中的最后一个。:nth-child (n):所有兄弟元素中的第 n 个。:first-of-type:所有同类型兄弟元素中的第一个。:last-of-type:所有同类型兄弟元素中的最后一个。:nth-of-type (n):所有同类型兄弟元素中的第 n 个。n 的取值规则:
- 0 或不写:选不中任何元素。
- n:选中所有子元素。
- 1~ 正整数:选中对应序号的子元素。
- 2n 或 even:选中序号为偶数的子元素。
- 2n+1 或 odd:选中序号为奇数的子元素。
- n+3:选中前 3 个子元素。
了解类伪类:
:nth-last-child (n) 所有兄弟元素中的倒数第 n 个。:nth-last-of-type (n)所有同类型兄弟元素中的 倒数第n个 。:only-child选择没有兄弟的元素(独生子女)。:only-of-type选择没有同类型兄弟的元素。:root 根元素。:empty内容为空元素(空格也算内容)。
(3)否定伪类
:not (选择器):排除满足括号中条件的元素。
(4)UI 伪类
:checked:被选中的复选框或单选按钮。:enable:可用的表单元素(无 disabled 属性)。:disabled:不可用的表单元素(有 disabled 属性)。
(5)其他伪类(了解)
:target:选中锚点指向的元素。:lang ():根据 lang 属性值选择元素。
2.9 伪元素选择器
- 作用:选中元素中的特殊位置。
- 常用伪元素:
::first-letter:选中元素中的第一个文字。::first-line:选中元素中的第一行文字。::selection:选中被鼠标选中的内容。::placeholder:选中输入框的提示文字。::before:在元素最开始位置创建子元素(必须用 content 属性指定内容)。::after:在元素最后位置创建子元素(必须用 content 属性指定内容)。
3. 选择器的优先级(权重)
通过不同的选择器,选中相同的元素 ,并且为相同的样式名设置不同的值时,就发生了样式的冲突。 到底应用哪个样式,此时就需要看优先级了。
简单描述
行内样式 > ID选择器 > 类选择器 > 元素选择器 > 通配选择器。
详细描述:
(1)权重计算方式
权重格式为 (a, b, c):
- a:ID 选择器的个数。
- b:类、伪类、属性选择器的个数。
- c:元素、伪元素选择器的个数。
| 选择器 | 权重 |
|---|---|
| ul>li | (0,0,2) |
| div ul>li p a span | (0,0,6) |
| #atguigu .slogan | (1,1,0) |
| #atguigu .slogan a | (1,1,1) |
| #atguigu .slogan a:hover | (1,2,1) |
(2)比较规则
按从左到右顺序依次比较,当前位数值大则优先级高,后续不再对比。
示例:(1,0,0) > (0,2,2)、(1,1,0) > (1,0,3)、(1,1,3) > (1,1,2)
(3)特殊规则
行内样式权重大于所有选择器。
!important 的权重最高,大于行内样式和所有选择器。
三、CSS三大特性
1. 层叠性
- 概念:样式冲突时,按选择器优先级进行样式覆盖(层叠)。
- 样式冲突:元素同一样式名被设置不同值。
2. 继承性
- 概念:元素会自动继承父元素或祖先元素的某些样式,优先继承离得近的祖先元素。
- 常见可继承属性:text-、font-、line-*、color 等(可通过 MDN 查询属性是否可继承)。
3. 优先级
- 简单规则:!important > 行内样式 > ID 选择器 > 类选择器 > 元素选择器 > 通配选择器 > 继承的样式。
- 注意:并集选择器的权重需分开计算每个部分。
四、CSS常用属性
1. 像素的概念
屏幕由 “像素(px)” 组成,像素点越小,内容越清晰细腻。
注意:电脑缩放设置可能影响测量结果,实际开发参考设计稿设置宽高。
2. 颜色的表示
2.1 颜色名
- 直接使用英文单词(如 red、green、blue),颜色种类有限,使用较少。
- 参考文档:https://developer.mozilla.org/en-US/docs/Web/CSS/named-color
2.2 rgb 或 rgba
基于红、绿、蓝三原色组合,a 表示透明度。
语法:
color: rgb(255, 0, 0); /* 红色 */
color: rgba(255, 0, 0, 0.5); /* 半透明红色 */
color: rgb(100%, 0%, 0%); /* 百分比表示,较少用 */规律:
- 三原色值相同时呈现灰色,值越大灰色越浅。
- rgb (0,0,0) 为黑色,rgb (255,255,255) 为白色。
- rgba 前三位格式需一致(均为 0~255 或百分比)。
2.3 HEX 或 HEXA
原理同 rgb,用 6 位十六进制数(分成 3 组)表示,HEXA 新增透明度。
语法:
color: #ff0000; /* 红色 */
color: #f98; /* 简写,等价于 #ff9988 */
color: #f986; /* 带透明度的简写,等价于 #ff998866 */注意:IE 浏览器不支持 HEXA。
2.4 HSL 或 HSLA
HSL:通过色相(0
360°)、饱和度(0%100%)、亮度(0%~100%)表示颜色。HSLA:在 HSL 基础上添加透明度。
语法:
color: hsl(0, 100%, 50%); /* 红色 */
3. CSS 字体属性
3.1 字体大小(font-size)
作用:控制字体大小。
语法:
div {
font-size: 40px;
}注意点:
- Chrome 浏览器默认字体大小 16px,最小支持 12px,0px 会自动消失。
- 不同浏览器默认字体大小可能不同,建议明确设置。
- 通常给 body 设置 font-size,子元素可继承。
借助控制台看样式:
3.2 字体族(font-family)
作用:控制字体类型。
语法:
div {
font-family: "STCaiyun","Microsoft YaHei",sans-serif;
}注意点:
- 英文名字兼容性更好,可查询字体英文名。
- 字体名含空格时需用引号包裹。
- 可设置多个字体,按顺序查找,最后建议添加 serif(衬线字体)或 sans-serif(非衬线字体)。
3.3 字体风格(font-style)
作用:控制字体是否为斜体。
常用值:
normal:正常(默认值)。italic:斜体(使用字体自带效果,推荐)。oblique:斜体(强制倾斜)。
语法:
div {
font-style: italic;
}
3.4 字体粗细(font-weight)
作用:控制字体粗细。
常用值:
- 关键词:
lighter(细)、normal(正常)、bold(粗)、bolder(很粗,多数字体不支持)。 - 数值:
100~1000(无单位),100~300等价于 lighter,400~500等价于 normal,600+等价于 bold。
- 关键词:
语法:
div {
font-weight: bold;
}
或
div {
font-weight: 600;
}
3.5 字体复合写法(font)
作用:合并字体相关属性。
规则:
- 必须包含字体大小和字体族。
- 字体族在最后,字体大小在倒数第二位。
- 各属性间用空格隔开。
语法:
div {
font: italic bold 40px "Microsoft YaHei";
}
4. CSS 文本属性
4.1 文本颜色(color)
作用:控制文字颜色。
可选值:颜色名、rgb/rgba、HEX/HEXA、HSL/HSLA(开发中常用 rgb/rgba 或 HEX/HEXA)。
语法:
div {
color: rgb(112,45,78);
}
4.2 文本间距
- 字母间距:
letter-spacing(属性值为 px,正负值分别增大 / 缩小间距)。 - 单词间距:
word-spacing(通过空格识别单词,属性值为 px)。
4.3 文本修饰(text-decoration)
作用:控制文本装饰线。
常用值:
none:无装饰线(常用,如清除超链接下划线)。underline:下划线。overline:上划线。line-through:删除线。
可搭配值:
dotted(虚线)、wavy(波浪线)、颜色。语法:
a {
text-decoration: none;
}
4.4 文本缩进(text-indent)
作用:控制文本首字母缩进。
语法:
div {
text-indent: 40px;
}属性值为 CSS 长度单位,如 px。
4.5 文本水平对齐(text-align)
作用:控制文本水平对齐方式。
常用值:
left(左对齐,默认)、right(右对齐)、center(居中对齐)。语法:
div {
text-align: center;
}
4.6 细说 font-size
- 由于字体设计原因,文字最终呈现的大小,并不一定与
font-size的值一致,可能大,也可能小。 - 通常情况下,文字相对字体设计框,并不是垂直居中的,通常都靠下 一些。
4.7行高(line-height)
- 作用:控制一行文字的高度。
- 可选值:
normal:浏览器默认值。px:固定像素值。- 数字:自身
font-size的倍数(常用)。 - 百分比:自身
font-size的百分比。
- 语法:
div { line-height: 60px; }或div { line-height: 1.5; } - 注意点:
- 行高过小可能导致文字重叠,最小值为 0,不能为负数。
- 行高可继承,建议用数字表示。
- 应用场景:多行文字控制行间距;单行文字让 height = line-height 实现垂直居中(非绝对居中,不影响观感)。
4.8文本对齐_垂直
顶部:无需任何属性,在垂直方向上,默认就是顶部对齐。
居中:对于单行文字,让 height = line-height 即可。
问题:多行文字垂直居中怎么办?—— 后面我们用定位去做。
底部:对于单行文字,目前一个临时的方式:
让
l ine-height=( height × 2)-font-size-x。备注:
x是根据字体族,动态决定的一个值。问题:垂直方向上的底部对齐,更好的解决办法是什么?—— 后面我们用定位去做。
4.9 vertical-align
作用:用于指定同一行元素之间,或 表格单元格 内文字的 垂直对齐方式。
常用值:
baseline(默认值):使元素的基线与父元素的基线对齐。top:使元素的顶部与其所在行的顶部对齐。middle:使元素的中部与父元素的基线加上父元素字母x的一半对齐bottom:使元素的底部与其所在行的底部对齐。
特别注意:
vertical-align不能控制块元素。
5. CSS列表属性
列表相关的属性,可以作用在 ul、ol、li 元素上。
| CSS 属性名 | 功能 | 属性值 |
|---|---|---|
list-style-type |
设置列表符号 | none(不显示,常用)、square(实心方块)、disc(圆形)、decimal(数字)、lower-roman(小写罗马字)、upper-roman(大写罗马字)、lower-alpha(小写字母)、upper-alpha(大写字母) |
list-style-position |
设置列表符号的位置 | inside(li 内部)、outside(li 外部) |
list-style-image |
自定义列表符号 | url (图片地址) |
list-style |
复合属性 | 无数量、顺序要求 |
6. CSS表格属性
边框相关属性(其他元素也能用):
CSS 属性名 功能 属性值 border-width 边框宽度 CSS 长度值 border-color 边框颜色 CSS 颜色值 border-style 边框风格 none(默认)、solid(实线)、dashed(虚线)、dotted(点线)、double(双实线) border 复合属性 无数量、顺序要求 注意:
以上4个边框相关的属性,其他元素也可以用,这是我们第一次遇见它们。
在后面的盒子模型中,我们会详细讲解边框相关的知识。
表格都有属性金table可用
CSS 属性名 功能 属性值 table-layout 设置列宽度 auto(自动,默认)、fixed(固定列宽,平均分) border-spacing 单元格间距 CSS 长度值(生效前提:单元格边框不合并) border-collapse 合并单元格边框 collapse(合并)、separate(不合并) empty-cells 隐藏无内容单元格 show(显示,默认)、hide(隐藏)(生效前提:单元格不合并) caption-side 设置表格标题位置 top(上面,默认)、bottom(下面)
7. CSS 背景属性
| CSS 属性名 | 功能 | 属性值 |
|---|---|---|
| background-color | 设置背景颜色 | CSS 颜色值(默认 transparent,透明) |
| background-image | 设置背景图片 | url (图片地址) |
| background-repeat | 设置背景重复方式 | repeat(重复,默认)、repeat-x(水平重复)、repeat-y(垂直重复)、no-repeat(不重复) |
| background-position | 设置背景图位置 | 两个值(水平:left/center/right;垂直:top/center/bottom),仅写一个值时另一个为 center;也可通过坐标(x,y)设置 |
| background | 复合属性 | 无数量、顺序要求 |
8. CSS鼠标属性
| CSS 属性名 | 功能 | 属性值 |
|---|---|---|
| cursor | 设置鼠标光标样式 | pointer(小手)、move(移动图标)、text(文字选择器)、crosshair(十字架)、wait(等待)、help(帮助) |
扩展:自定义鼠标图标
/* 自定义鼠标光标 */
cursor: url("./arrow.png"),pointer;
五、CSS盒子模型
1. CSS 长度单位
px:像素(固定单位)。em:相对元素自身 font-size 的倍数。rem:相对根元素(html 标签)font-size 的倍数。%:相对父元素计算。
注意:CSS 长度必须加单位,否则样式无效。
2. 元素的显示模式
块元素(block)
又称:块级元素
特点:
- 在页面中独占一行,不会与任何元素共用一行,是从上到下排列的。
- 默认宽度:撑满父元素。
- 默认高度:由内容撑开。
- 可以通过 CSS 设置宽高。
行内元素(inline)
又称:内联元素
特点:
- 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列。
- 默认宽度:由内容撑开。
- 默认高度:由内容撑开。
- 无法通过 CSS 设置宽高。
行内块元素(inline-block)
又称:内联块元素
特点:
- 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列。
- 默认宽度:由内容撑开。
- 默认高度:由内容撑开。
- 可以通过 CSS 设置宽高。
注意:元素早期只分为:行内元素、块级元素,区分条件也只有一条:”是否独占一行”,如果按照这种 分类方式,行内块元素应该算作行内元素。
3. 总结各元素的显示模式
块元素(block)
- 主体结构标签:
<html>、<body> - 排版标签:
<h1>~<h6>、<hr>、<p>、<pre>、<div> - 列表标签:
<ul>、<ol>、<li>、<dl>、<dt>、<dd> - 表格相关标签:
<table>、<tbody>、<thead>、<tfoot>、<tr>、<caption> <form>与<option>
- 主体结构标签:
行内元素(inline)
- 文本标签:
<br>、<em>、<strong>、<sup>、<sub>、<del>、<ins> <a>与<label>
- 文本标签:
行内块元素(inline-block)
- 图片:
<img> - 单元格:
<td>、<th> - 表单控件:
<input>、<textarea>、<select>、<button> - 框架标签:
<iframe>
- 图片:
4. 修改元素的显示模式
| 值 | 描述 |
|---|---|
| none | 元素隐藏(不占位置) |
| block | 元素作为块级元素显示 |
| inline | 元素作为行内元素显示 |
| inline-block | 元素作为行内块元素显示 |
5. 盒子模型的组成
CSS 会把所有的HTML元素都看成一个盒子,所有的样式也都是基于这个盒子。
- margin(外边距): 盒子与外界的距离。
- border(边框): 盒子的边框。
- padding(内边距): 紧贴内容的补白区域。
- content(内容):元素中的文本或后代元素都是它的内容。
图示如下:
盒子的大小 = content + 左右 padding+ 左右 border 。
注意:外边距 margin 不会影响盒子的大小,但会影响盒子的位置。
6. 盒子内容区(content)
| CSS 属性名 | 功能 | 属性值 |
|---|---|---|
| width | 设置内容区宽度 | 长度 |
| max-width | 设置内容区最大宽度 | 长度 |
| min-width | 设置内容区最小宽度 | 长度 |
| height | 设置内容区高度 | 长度 |
| max-height | 设置内容区最大高度 | 长度 |
| min-height | 设置内容区最小高度 | 长度 |
注意:
- max-width/min-width 一般不与 width 同用;
- max-height/min-height 一般不与 height 同用。
7. 关于默认宽度
所谓的默认宽度,就是不设置 width 属性时,元素所呈现出来的宽度
总宽度 = 父的 content — 自身的左右 margin 。
内容区的宽度 = 父的 content — 自身的左右 margin — 自身的左右 border — 自身的左右 padding 。
8. 盒子内边距(padding)
| CSS 属性名 | 功能 | 属性值 |
|---|---|---|
| padding-top | 上内边距 | 长度 |
| padding-right | 右内边距 | 长度 |
| padding-bottom | 下内边距 | 长度 |
| padding-left | 左内边距 | 长度 |
| padding | 复合属性 | 1~4 个长度值,规则如下:1 个值:四个方向均为该值2 个值:上下、左右3 个值:上、左右、下4 个值:上、右、下、左 |
9. 盒子边框(border)
| CSS 属性名 | 功能 | 属性值 |
|---|---|---|
| border-style | 边框风格(复合属性) | none(默认)、solid(实线)、dashed(虚线)、dotted(点线)、double(双实线) |
| border-width | 边框宽度(复合属性) | 长度(默认 3px) |
| border-color | 边框颜色(复合属性) | 颜色(默认黑色) |
| border | 复合属性 | 无顺序、数量要求 |
| border-top/border-right/border-bottom/border-left | 单独设置某方向边框 | 同上,可拆分为 border - 方向 - style/width/color |
10. 盒子外边距_margin
| CSS 属性名 | 功能 | 属性值 |
|---|---|---|
| margin-left | 左外边距 | CSS 长度值 |
| margin-right | 右外边距 | CSS 长度值 |
| margin-top | 上外边距 | CSS 长度值 |
| margin-bottom | 下外边距 | CSS 长度值 |
| margin | 复合属性 | 1~4 个长度值,规则同 padding |
10.1 margin 注意事项
- 子元素 margin 参考父元素 content 计算。
- 上、左 margin 影响自身位置;下、右 margin 影响后续兄弟元素位置。
- 块级和行内块元素可完美设置四个方向 margin;行内元素上下 margin 无效。
- 块级元素设置左右 margin 为 auto 可实现水平居中。
- margin 值可为负数。
10.2 margin 塌陷问题
什么是 margin 塌陷?
第一个子元素的上 margin 会作用在父元素上,最后一个子元素的下 margin 会作用在父元素上。
如何解决 margin 塌陷?
- 给父元素设置不为 0 的 padding。
- 给父元素设置宽度不为 0 的 border。
- 给父元素设置 overflow:hidden。
10.3 margin 合并问题
什么是 margin 合并?
上面兄弟元素的下外边距和下面兄弟元素的上外边距会合并,取一个最大的值,而不是相加。
如何解决 margin 塌陷?
无需解决,布局的时候上下的兄弟元素,只给一个设置上下外边距就可以了。
11. 处理内容溢出
| CSS 属性名 | 功能 | 属性值 |
|---|---|---|
| overflow | 处理溢出内容 | visible(显示,默认)、hidden(隐藏)、scroll(显示滚动条)、auto(自动显示滚动条) |
| overflow-x | 水平方向溢出处理 | 同 overflow |
| overflow-y | 垂直方向溢出处理 | 同 overflow |
注意:
- overflow-x 、 overflow-y 不能一个是 hidden ,一个是 visible ,是实验性属性,不 建议使用。
- overflow 常用的值是 hidden 和 auto ,除了能处理溢出的显示方式,还可以解决很多 疑难杂症。
12. 隐藏元素的方式
方式一:visibility
属性 visibility 属性默认值是 show ,如果设置为 hidden ,元素会隐藏。
元素看不见了,还占有原来的位置(元素的大小依然保持)。
方式二: display
属性设置 display:none ,就可以让元素隐藏。
彻底地隐藏,不但看不见,也不占用任何位置,没有大小宽高。
13. 样式的继承
有些样式会继承,元素如果本身设置了某个样式,就使用本身设置的样式;但如果本身没有设置某个样 式,会从父元素开始一级一级继承(优先继承离得近的祖先元素)。
会继承的 css 属性
字体属性、文本属性(除了vertical-align)、文字颜色 等。 |
不会继承的 css 属性
边框、背景、内边距、外边距、宽高、溢出方式 等。 |
一个规律:能继承的属性,都是不影响布局的,简单说:都是和盒子模型没关系的
14. 默认样式
- 常见元素默认样式:a 元素有下划线和默认颜色、h1~h6 有上下 margin 和加粗、p 元素有上下 margin、ul/ol 有左 padding、body 有 8px 外边距等。
- 优先级:元素默认样式 > 继承样式,重置默认样式需直接选中该元素。
15.布局小技巧
16. 元素之间的空白问题
产生的原因:
行内元素、行内块元素,彼此之间的换行会被浏览器解析为一个空白字符。
解决方案:
- 方案一: 去掉换行和空格(不推荐)。
- 方案二: 给父元素设置 font-size:0 ,再给需要显示文字的元素,单独设置字体大小(推 荐)。
17. 行内块的幽灵空白问题
产生原因:
行内块元素与文本的基线对齐,而文本的基线与文本最底端之间是有一定距离的。
解决方案:
- 方案一: 给行行内块设置 vertical ,值不为 baseline 即可,设置为 middel 、 bottom 、 top 均可。
- 方案二: 若父元素中只有一张图片,设置图片为 display:block 。
- 方案三: 给父元素设置 font-size: 0 。如果该行内块内部还有文本,则需单独设置 fontsize 。
六、浮动
1. 浮动的简介
在最初,浮动是用来实现文字环绕图片效果的,现在浮动是主流的页面布局方式之一。
2. 元素浮动后的特点
- 脱离文档流。
- 默认宽高由内容撑开,可设置宽高。
- 不独占一行,可与其他元素共用一行。
- 无 margin 合并和塌陷问题,可完美设置四个方向 margin 和 padding。
- 不会被当作文本处理(无行内块的空白问题)。
3. 浮动小练习
练习1:盒子1右浮动,效果如下
练习2:盒子1左浮动,效果如下
练习3:所有盒子都浮动,效果如下
练习4:所有盒子浮动后,盒子3落下来,效果如下
4. 解决浮动产生的影响
4.1 元素浮动后会有哪些影响
对兄弟元素的影响: 后面的兄弟元素,会占据浮动元素之前的位置,在浮动元素的下面;对前面的兄弟 无影响。
对父元素的影响: 不能撑起父元素的高度,导致父元素高度塌陷;但父元素的宽度依然束缚浮动的元 素。
4.2 解决浮动产生的影响(清除浮动)
给父元素指定高度(简单但不灵活)。
给父元素设置浮动(会带来其他布局问题)。
给父元素设置 overflow: hidden(简单有效)。
在所有浮动元素后添加块级元素,设置 clear: both(额外增加 DOM 元素)。
给父元素添加伪元素(推荐):
.parent::after {
content: "";
display: block;
clear: both;
}
布局中的一个原则:设置浮动的时候,兄弟元素要么全都浮动,要么全都不浮动。
5. 浮动布局小练习
6.浮动相关属性
| CSS 属性 | 功能 | 属性值 |
|---|---|---|
| float | 设置浮动 | left(左浮动)、right(右浮动)、none(不浮动,默认) |
| clear | 清除浮动影响 | left(清除左浮动影响)、right(清除右浮动影响)、both(清除左右浮动影响) |















