CSS教程
一、CSS基础
1.1 CSS简介
CSS全称:层叠样式表(Cascading Style Sheets)
CSS是一种标记语言,用于给HTML结构设置样式

1.2 CSS编写位置
1.2.1 行内样式/内联样式
- 写在HTML标签的
style属性中,只对当前标签有效 - 语法:【名1:值1;名2:值2;】的形式
1 | |
- 未体现出结构与样式分离的思想,不推荐大量使用
1.2.2 内部样式
- 写在HTML页面中,将CSS代码单独放在
style标签中 - 语法:
1 | |
<style>标签理论上可以放在 HTML 文档的任何地方,但一般都放在<head>标签中- 结构与样式未完全分离,多个HTML页面无法复用样式
1.2.3 外部样式
- 写在单独的
.css文件中,在HTML文件中引用 - 语法:
- 在
.css文件中写CSS代码
- 在
1 | |
- 在HTML文件的`<head>`标签中,用`link`标签引入`.css`文件
1 | |
- 结构与样式完全分离,推荐使用
1.2.4 导入式样式
1 | |
若网页加载较慢,会出现html结构,但是没有样式的情况
1.3 样式表的优先级
行内样式 > 内部样式 = 外部样式
- 内部样式和外部样式的优先级相同,后面的会覆盖前面的
- 同一个样式表中,优先级也与编写顺序有关,后面的会覆盖前面的
1.4 CSS语法规范
CSS代码 - 两部分组成:
- 选择器:找到要添加样式的元素
- 声明块:设置具体的样式
- 由一个或多个声明组成
- 声明的格式:
属性名:属性值;

注释的写法:
1 | |
1.5 CSS代码风格
- 展开风格 - 开发时推荐,便于维护和调试
1 | |
- 紧凑风格 - 项目上线时推荐,减小文件体积
1 | |
不区分大小写,推荐小写
二、CSS选择器
2.1 基本选择器
2.1.1 通配选择器
- 作用:选中所有的HTML元素
- 语法:
1 | |
通配符选择效率低,设置的部分公共样式不是所有标签都需要添加
实际上线的网站不允许使用 * 去清除默认内外边距
2.1.2 元素选择器
- 作用:选中HTML页面中的某个元素,统一设置样式
- 语法:
1 | |
2.1.3 类选择器
- 作用:根据元素的
class属性值,选中某些元素 - 语法:
1 | |
- 注意
class类名命名规则- 不要使用纯数字、中文
- 尽量使用数字和英文字母的组合
- 多个单词,使用
-连接 - 见名知意
- 一个元素不能写多个
class属性,但是一个class属可以写多个属性值,用空格隔开
1 | |
实际中:类上样式CSS、ID上行为JS
2.1.4 ID选择器
- 作用:根据元素的
ID属性值,精准的选中某个元素 - 语法:
1 | |
- 注意
ID属性值命名规则- 尽量由字母、数字、下划线、短杠组成
- 最好以字母开头
- 不包含空格,区分大小写
- 一个元素只能拥有一个
ID属性值,多个元素的ID属性值不能相同 - 一个元素可以同时拥有
ID属性和class属性
2.2 CSS复合选择器
复合选择器由多个基础选择器,通过不同方式组合而成
2.2.1 交集选择器
- 作用:选中同时符合多个条件的元素
- 语法:
1 | |
- 注意
- 有标签名,标签名要写在前面
ID选择器、通配选择器 在 交集选择器中几乎不用,没有意义- 交集选择器中 不可能出现 两个元素选择器
- 频率最高的选择器组合是:元素选择器 + 类选择器
2.2.2 并集选择器
- 作用:选中多个选择器对应的元素,又称分组选择器
- 语法:
1 | |
- 注意
- 并集选择器一般是竖排写
- 任何形式的选择器都可以成为并集选择器的一部分
- 并集选择器用于集体声明,可以缩小样式表体积
2.2.3 HTML元素间的关系
父元素:直接包裹某个元素的元素,就是该元素的父元素子元素:被父元素直接包含的元素(简记:儿子元素)祖先元素:父亲的父亲……,一直往外找,都是祖先;父元素也是祖先元素后代元素:儿子的儿子……,一直往里找,都是后代;子元素也是后代元素兄弟元素:具有相同父元素的元素,互为兄弟元素
2.2.4 后代选择器
- 作用:选中指定元素中,符合要求的后代元素
- 语法:
1 | |
- 注意
- 后代选择器,选中的是后代,不选中祖先
2.2.5 子代选择器
- 作用:选中指定元素中,符合要求的子元素
- 语法:
1 | |
- 注意
- 子代选择器,选中的是子代,不选中父亲
2.2.6 兄弟选择器
- 相邻兄弟选择器
- 作用:选中指定元素后,符合条件的相邻兄弟元素
- 语法:
1 | |
- 通用兄弟选择器
- 作用:选中指定元素后,符合条件的所有兄弟元素
- 语法:
1 | |
2.2.7 属性选择器
- 作用:选中属性值符合一定要求的元素
- 语法:
1 | |
2.2.8 伪类选择器
- 作用:选中特殊状态的元素
常用的伪类选择器:
- 动态伪类(巧记:LVHA)
:link超链接未被访问的状态:visited超链接访问过的状态:hover鼠标悬停在元素上的状态:active元素激活的状态(按住鼠标不松开):focus获取焦点的元素(表单类元素才能使用)(点击元素、触摸元素、tab键触发)
- 结构伪类
:first-child所有兄弟元素中的第一个:last-child所有兄弟元素中的最后一个:nth-child(n)所有兄弟元素中的第n个:nth-last-child(n)所有兄弟元素中的倒数第n个:first-of-type所有同类型兄弟元素中的第一个:last-of-type所有同类型兄弟元素中的最后一个:nth-of-type(n)所有同类型兄弟元素中的第n个:nth-last-of-type(n)所有同类型兄弟元素中的 倒数第n个:only-child选择没有兄弟的元素(独生子女):only-of-type选择没有同类型兄弟的元素:root根元素:empty内容为空元素(空格也算内容)
1 | |
关于n的值
n是数字的情况
- 0 / 不写 - 什么元素也选不中
- n - 选中所有子元素
- 1 ~ 正整数 - 选中对应序号的子元素
n是关键字的情况
- 2n / even - 选中序号为偶数的子元素
- 2n+1 / odd - 选中序号为奇数的子元素
n是公式的情况(n从0开始计算)
- -n+3 - 选中的是前3个
- n+4 - 选中的是第四个及以后子元素
- 否定伪类
:not(选择器)排除满足括号中条件的元素
- UI伪类
:checked被选中的复选框或单选按钮。:enable可用的表单元素(没有 disabled 属性):disabled不可用的表单元素(有 disabled 属性)
- 目标伪类
:target选中锚点指向的元素
- 语言伪类
:lang()根据指定的语言选择元素(本质是看 lang 属性的值)
2.2.9 伪元素选择器
- 作用:选中元素中的一些特殊位置
- 常用伪元素
::first-letter选中元素中的第一个文字::first-line选中元素中的第一行文字::selection选中被鼠标选中的内容::placeholder选中输入框的提示文字::before在元素最开始的位置,创建一个子元素(必须用 content 属性指定内容)::after在元素最后的位置,创建一个子元素(必须用 content 属性指定内容)
- 注意事项
- 伪元素只能给双标签添加,不能给单标签添加
- 伪元素的冒号不能有空格
- 伪元素里面必须写
content:"" - before和after创建一个行内元素
- 在DOM中看不到创建的元素
2.3 选择器的优先级
行内样式 > ID选择器 > 类选择器 > 元素选择器 > 通配选择器
2.3.1 选中目标标签
计算方式:每个选择器,都可计算出一组权重,格式为:(a,b,c)
a : ID 选择器的个数
b : 类、伪类、属性 选择器的个数
c : 元素、伪元素 选择器的个数
并集选择器的每一个部分是分开算的
2.3.2 选中目标标签的祖先级
- 第一步:就近原则
- 第二步:如果距离目标一样近,比较选择器权重,权重大的层叠权重小的
- 第三步:如果距离目标一样近,选择器权重一样,比较书写顺序
2.3.3 特殊规则
- 行内样式权重大于所有选择器
!important的权重,大于行内样式,大于所有选择器,权重最高- 格式:
属性:属性值 !important important不能提升选择器的权重,只能提升某个属性的权重到最大- 就近原则中,不需要比较选择器的权重,所有important会失效
- 格式:
三、CSS三大特性
3.1 层叠性
概念:如果发生了样式冲突,那就会根据一定的规则(选择器优先级),进行样式的层叠(覆盖)
- 样式冲突:元素的同一个样式名,被设置了不同的值,这就是冲突
如果选择器权重都相同,需要比较CSS中代码的书写顺序,后写的层叠先写的
3.2 继承性
概念:元素会自动拥有其父元素、或其祖先元素上所设置的某些样式(文字相关样式属性)
规则:优先继承离得近的
常见的可继承属性:text-??,font-??,line-??,color…
3.3 优先级
!important> 行内样式 > ID选择器 > 类选择器 > 元素选择器 >*> 继承的样式
四、CSS常用属性
4.1 像素的概念
概念:我们的电脑屏幕是,是由一个一个“小点”组成的,每个“小点”,就是一个像素(px)
规律:像素点越小,呈现的内容就越清晰、越细腻
4.2 颜色的表示
4.2.1 颜色名
- 红色:
red - 绿色:
green - 蓝色:
blue - 紫色:
purple - 橙色:
orange - 灰色:
gray
4.2.2 RGB / RGBA
- 编写方式:使用红、黄、蓝三种光的三原色进行组合
- r - 红色
- g - 绿色
- b - 蓝色
- a - 透明度
- 规律
- 三种颜色值相同,呈现的是灰色,值越大,灰色越浅
rgb(0,0,0)是黑色,rgb(255,255,255)是白色rgba来说,前三位rgb的形式要保持一致,要么是0~255的数字,要么是百分比
4.2.3 HEX / HEXA
- 编写方式:
#rrggbb- 每一位数字的取值范围是
0 ~ f - 每种光的最小值是
00,最大值是ff - 如果每种光的两位都是相同的,可以简写成
#rgb,透明度也要相应简写
- 每一位数字的取值范围是
- IE浏览器不支持
HEXA,支持HEX
4.2.4 HSL / HSLA
- 编写方式: 色相、饱和度、亮度,来表示一个颜色的,hsl(色相,饱和度,亮度)
- 色相:取值范围是 0~360 度
- 饱和度:取值范围是 0%~100%(向色相中对应颜色中添加灰色,0% 全灰,100% 没有灰)
- 亮度:取值范围是 0%~100%( 0% 无亮度 - 黑色。 100% 全亮度 - 白色)
4.3 CSS字体属性
4.3.1 字体大小 `font-size`
语法:
1 | |
注意事项:
- Chrome 浏览器支持的最小文字为 12px ,默认的文字大小为 16px ,并且 0px 会自动消失
- 不同浏览器默认的字体大小可能不一致,所以最好给一个明确的值,不要用默认大小
- 通常以给 body 设置 font-size 属性,这样 body 中的其他元素就都可以继承了
展开说说:
- 由于字体设计原因,文字最终呈现的大小,并不一定与 font-size 的值一致,可能大,也可能小
- 通常情况下,文字相对字体设计框,并不是垂直居中的,通常都靠下一些

实际应用:
- 网页中最小设置字号必须是12px,如果低于12px会出现兼容问题,现在网页中普通使用14px+
- 尽量使用12px、14px、16px等偶数的数字字号,ie6等老式浏览器奇数字号会有bug
4.3.2 字体族 `font-family`
语法:
1 | |
注意事项:
- 使用字体的英文名字兼容性会更好,具体的英文名可以自行查询,或在电脑的设置里去寻找
- 如果字体名包含空格,必须使用引号包裹起来
- 可以设置多个字体,按照从左到右的顺序逐个查找,找到就用,没有找到就使用后面的,且通常在最后写上 serif (衬线字体)或 sans-serif (非衬线字体)
- windows 系统中,默认的字体就是微软雅黑
常用的中文字体:
- 宋体 SimSun
- 微软雅黑 Microsoft Yahei
常用的英文字体:
- Arial
- consolas
电脑自带字体库:

英文和中文都放一个备用字体,防止用户电脑上没有设置的字体
建议英文字体写在属性值最前面
4.3.3 字体风格 font-style
语法:
1 | |
常用值:
- normal :正常(默认值)
- italic :斜体(使用字体自带的斜体效果)
- oblique :斜体(强制倾斜产生的斜体效果)
4.3.4 字体粗细 font-weight
语法:
1 | |
常用值:
- lighter :细
- normal : 正常
- bold :粗
- bolder :很粗 (多数字体不支持)
数值:
- 100~900 且无单位,数值越大,字体越粗 (或一样粗,具体得看字体设计时的精确程度)
- 100
300 等同于500 等同于lighter, 400normal, 600 及以上等同于bold
4.3.5 字体复合写法 font
编写规则:
- 字体、字号必须都写上,且字号在前,字体在后
- 三个值的写法:
字号/行高 字体 - 加粗和斜体只能写在最前面
- 字体族必须是最后一位、字体大小必须是倒数第二位
- 各个属性间用空格隔开
4.4 CSS文本属性
4.4.1 文本颜色 `color`
语法:
1 | |
可选值:
- .颜色名
- rgb 或 rgba
- HEX 或 HEXA (十六进制)
- HSL 或 HSLA
4.4.2 文本间距
字母间距:letter-spacing
单词间距:word-spacing (通过空格识别词)
属性值:像素px,正值让间距增大,负值让间距缩小。
4.4.3 文本修饰 text-decoration
语法:
1 | |

可选值:
- none : 无装饰线(常用)
- underline :下划线(常用)
- overline : 上划线
- line-through : 删除线
可搭配如下值使用:
- dotted :虚线
- wavy :波浪线
- 也可以指定颜色
4.4.4 文本缩进 text-indent
语法:
1 | |
属性值:CSS的长度单位(正负数代表方向)
px单位:首行缩进多少像素- em单位:首行缩进多少字符
- 百分比:缩进文字所在标签的父标签width属性值的百分比
4.4.5 文本对齐 text-align
语法:
1 | |
常用
- left :左对齐(默认值)
- right :右对齐
- center :居中对齐
4.4.6 行高 line-height
语法:
1 | |

可选值:
- normal :由浏览器根据文字大小决定的一个默认值
- 像素( px )
- 数字:参考自身 font-size 的倍数(很常用)
- 百分比:参考自身 font-size 的百分比
注意事项:
line-height过小,文字会产生重叠,最小值是0,不能为负数line-height可以继承的,且为了能更好的呈现文字,最好写数值- 设置了
height,高度就是height的值 - 未设置
height,高度根据line-height计算
应用场景:
- 多行文字,控制行与行之间的距离
- 单行文字,让
height等于line-height,可以实现文字垂直居中
4.4.7 文本对齐_垂直
顶部:无需任何属性,在垂直方向上,默认就是顶部对齐
居中:单行文字,line-height = height
底部:单行文字,line-height = ( height × 2 ) - font-size - x
4.4.8 vertical-align
语法:
1 | |
作用:用于指定行内元素或表格单元格元素的垂直对齐方式
4.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 | 复合属性 | 没有数量、顺序的要求 |
4.6 CSS表格属性
4.6.1 边框相关属性(其他元素也能用)
| CSS 属性名 | 功能 | 属性值 |
|---|---|---|
| border-width | 边框宽度 | CSS 中可用的长度值 |
| border-color | 边框颜色 | CSS 中可用的颜色值 |
| border-style | 边框样式 | none 默认值 solid 实线 dashed 虚线 dotted 点线 double 双实线 |
| border | 边框复合属性 | 没有数量、顺序的要求 |
4.6.2 表格独有属性(只有table标签才能使用)
| CSS 属性名 | 功能 | 属性值 |
|---|---|---|
| table-layout | 设置列宽度 | auto :自动,列宽根据内容计算(默认值) fixed :固定列宽,平均分 |
| border-spacing | 单元格间距 | CSS 中可用的长度值 生效的前提:单元格边框不能合并 |
| border-collapse | 合并单元格边框 | collapse :合并 separate :不合并 |
| empty-cells | 隐藏没有内容的单元格 | show :显示,默认 hide :隐藏 生效前提:单元格不能合并 |
| caption-side | 设置表格标题位置 | top :上面(默认值) bottom :在表格下面 |
4.7 CSS背景属性

background-position
- 百分比值
- 100% 表示的是父元素宽度减去图片宽度
- 如果设置为50% 50%,则图片在父元素中居中显示
background-attachment
- 参考的位置是浏览器视口
- 属性值:scroll、fixed
4.8 CSS鼠标属性

1 | |
五、CSS盒模型
5.1 CSS长度单位
px:像素em:相对元素 font-size 的倍数rem:相对根字体大小,html标签就是根%:相对父元素计算
:::success
注意:CSS 中设置长度,必须加单位,否则样式无效!
:::
5.2 元素的显示模式
5.2.1 块元素
又称:块级元素
特点:
- 在页面中独占一行,不会与任何元素共用一行,是从上到下排列的
- 默认宽度:撑满父元素
- 默认高度:由内容撑开
- 可以通过 CSS 设置宽高
5.2.2 行内元素
又称:内联元素
特点:
- 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列
- 默认宽度:由内容撑开
- 默认高度:由内容撑开
- 无法通过 CSS 设置宽高
5.2.3 行内块元素
又称:内联块元素
特点:
- 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列
- 默认宽度:由内容撑开
- 默认高度:由内容撑开
- 可以通过 CSS 设置宽高
5.3 各元素的显示模式
- 块元素(block)
1.主体结构标签:<font style="color:rgb(102, 102, 102);"><html>、<body></font>
2.排版标签:<font style="color:rgb(102, 102, 102);"><h1><h6>、<hr>、p>、pre>、<div></font>
3.列表标签:<font style="color:rgb(102, 102, 102);"><ul>、<ol>、<li>、<dl>、<dt>、<dd></font>
4.表格标签:<font style="color:rgb(102, 102, 102);"><table>、<tbody>、<thead>、<tfoot>、<tr>、<caption></font>
5.<font style="color:rgb(102, 102, 102);"><form>与<option></font>
- 行内元素(inline)
1.文本标签:<font style="color:rgb(102, 102, 102);"><br>、<em>、<strong>、<sup>、<sub>、<del>、<ins></font>
2.<font style="color:rgb(102, 102, 102);"><a>与<label></font>
- 行内块元素(inline-block)
1.图片:<font style="color:rgb(102, 102, 102);"><img></font>
2.单元格:<font style="color:rgb(102, 102, 102);"><td>、<th></font>
3.表单控件:<font style="color:rgb(102, 102, 102);"><input>、<textarea>、<select>、<button></font>
4.框架标签:<font style="color:rgb(102, 102, 102);"><iframe></font>
5.4 修改元素的显示模式
修改CSS中的display属性:
| 值 | 描述 |
|---|---|
| none | 元素会被隐藏 |
| block | 元素将作为块级元素显示 |
| inline | 元素将作为内联元素显示 |
| inline-block | 元素将作为行内块元素显示 |
5.5 盒子模型的组成
CSS 会把所有的 HTML 元素都看成一个盒子,所有的样式也都是基于这个盒子
- margin(外边距): 盒子与外界的距离
- border(边框): 盒子的边框
- padding(内边距): 紧贴内容的补白区域
- content(内容):元素中的文本或后代元素都是它的内容

盒子的大小 = content + 左右 padding + 左右 border
:::success
注意:外边距 margin 不会影响盒子的大小,但会影响盒子的位置
:::
5.6 盒子内容区
| CSS 属性名 | 功能 | 属性值 |
|---|---|---|
| width | 设置内容区域宽度 | 长度 |
| max-width | 设置内容区域的最大宽度 | 长度 |
| min-width | 设置内容区域的最小宽度 | 长度 |
| height | 设置内容区域的高度 | 长度 |
| max-height | 设置内容区域的最大高度 | 长度 |
| min-height | 设置内容区域的最小高度 | 长度 |
:::success
注意:
max-width 、 min-width 一般不与 width 一起使用
max-height 、 min-height 一般不与 height 一起使用
5.7 默认宽度
默认宽度:就是不设置 width 属性时,元素所呈现出来的宽度
总宽度 = 父的 content — 自身的左右 margin
内容区的宽度 = 父的 content — 自身的左右 margin — 自身的左右 border — 自身的左右 padding
width属性和height属性的三种值
- auto
- px
- %
5.8 盒子内边距(padding)
| CSS属性名 | 功能 | 属性值 |
|---|---|---|
| padding-top | 上内边距 | 长度 |
| padding-right | 右内边距 | 长度 |
| padding-bottom | 下内边距 | 长度 |
| padding-left | 左内边距 | 长度 |
| padding | 复合属性 | 长度,可以设置1~4个值 |
padding 复合属性的使用规则:
- padding: 10px; 四个方向内边距都是 10px 。
- padding: 10px 20px; 上 10px ,左右 20px 。(上下、左右)
- padding: 10px 20px 30px; 上 10px ,左右 20px ,下 30px 。(上、左右、下)
- padding: 10px 20px 30px 40px; 上 10px ,右 20px ,下 30px ,左 40px 。(上、右、下、左)
:::success
注意:
- padding 的值不能为负数
- 行内元素 的 左右内边距是没问题的,上下内边距不能完美的设置
- 块级元素、行内块元素,四个方向内边距都可以完美设置
:::
5.9 盒子边框(border)
顺序为:宽度、样式、颜色
| CSS属性名 | 功能 | 属性值 |
|---|---|---|
| border-style | 边框线风格 复合了四个方向的边框风格 | none: 默认值 solid : 实线 dashed: 虚线 dotted : 点线 double: 双实线 |
| border-width | 边框线宽度 复合了四个方向的边框宽度 | 长度,默认 3px |
| border-color | 边框线颜色 复合了四个方向的边框颜色 | 颜色,默认黑色 |
| border | 复合属性 | 值 没有顺序和数量要求。 |
| border-left | 分别设置各个方向的边框 | 同上 |
| border-left-style | ||
| border-left-width | ||
| border-left-color | ||
| border-right | ||
| border-right-style | ||
| border-right-width | ||
| border-right-color | ||
| border-top | ||
| border-top-style | ||
| border-top-width | ||
| border-top-color | ||
| border-bottom | ||
| border-bottom-style | ||
| border-bottom-width | ||
| border-bottom-color |
边框相关属性共 20 个
border-style 、 border-width 、 border-color 其实也是复合属性
5.10 盒子外边距(margin)

5.10.1 margin注意事项
:::success
- 子元素的 margin ,是参考父元素的 content 计算的。(因为是父亲的 content 中承装着子元素)
- 上 margin 、左 margin :影响自己的位置;下 margin 、右 margin :影响后面兄弟元素的位置
- 块级元素、行内块元素,均可以完美地设置四个方向的 margin ;但行内元素,左右margin 可以完美设置,上下 margin 设置无效
- margin 的值也可以是 auto ,如果给一个块级元素设置左右 margin 都为 auto ,该块级元素会在父元素中水平居中
- margin 的值可以是负值
:::
5.10.2 margin塌陷问题
什么是margin塌陷?
第一个子元素的上 margin 会作用在父元素上,最后一个子元素的下 margin 会作用在父元素上
如何解决margin塌陷?
- 方案一: 给父元素设置不为 0 的 padding
- 方案二: 给父元素设置宽度不为 0 的 border
- 方案三:给父元素设置 css 样式 overflow:hidden
5.10.3 margin合并问题
什么是margin合并?
上面兄弟元素的下外边距和下面兄弟元素的上外边距会合并,取一个最大的值,而不是相加
如何解决margin合并?
无需解决,布局的时候上下的兄弟元素,只给一个设置上下外边距就可以了
5.11 处理内容溢出

注意:
- overflow-x 、 overflow-y 不能一个是 hidden ,一个是 visible ,是实验性属性,不建议使用
- overflow 常用的值是 hidden 和 auto ,除了能处理溢出的显示方式,还可以解决很多疑难杂症
5.12 隐藏元素的方式
5.12.1 方式一:`visibility` 属性
visibility 属性默认值是 show ,如果设置为 hidden ,元素会隐藏
元素看不见了,还占有原来的位置(元素的大小依然保持)
5.12.2 方式二: `display` 属性
设置 display:none ,就可以让元素隐藏
彻底地隐藏,不但看不见,也不占用任何位置,没有大小宽高
5.13 样式的继承
有些样式会继承,元素如果本身设置了某个样式,就使用本身设置的样式;但如果本身没有设置某个样 式,会从父元素开始一级一级继承(优先继承离得近的祖先元素)
5.13.1 会继承的CSS属性
字体属性、文本属性(除了vertical-align)、文字颜色
5.13.2 不会继承的CSS属性
边框、背景、内边距、外边距、宽高、溢出方式
:::success
一个规律:能继承的属性,都是不影响布局的,简单说:都是和盒子模型没关系的
:::
5.14 默认样式
元素一般都有些默认的样式
优先级:元素的默认样式 > 继承的样式
如果重置该元素的默认样式,选择器要直接选择到该元素
5.15 布局小技巧
- 行内元素、行内块元素,可以父元素当做文本处理
text-align- 水平对齐方式line-heighttext-indent
- 如何让子元素在父元素中水平居中
- 若子元素为块元素,给父元素加上
margin: 0 auto - 若子元素为行内元素、行内块元素,给父元素加上
text-align:center
- 若子元素为块元素,给父元素加上
- 如何让子元素在父元素中垂直居中
- 若子元素为块元素,给子元素加上
margin-top,值为(父元素content - 子元素盒子总高)/ 2 - 若子元素为行内元素、行内块元素,给父元素加上
height=line-height,子元素加上vertical-align:middle- 若想绝对居中,设置父元素的
font-size:0
- 若想绝对居中,设置父元素的
- 若子元素为块元素,给子元素加上
5.16 元素之间的空白问题
产生原因:
行内元素、行内块元素,彼此之间的换行会被浏览器解析为一个空白字符
解决方案:
方案一:去掉换行和空格
方案二:给父元素设置font-size:0,再给需要显示文字的元素,单独设置字体大小(推荐)
5.17 行内块的幽灵空白问题
产生原因:
行内块元素与文本的基线对齐,而文本的基线与文本最底端之间是有一定距离的
解决方案:
- 方案一: 给行内块设置 vertical ,值不为 baseline 即可,设置为 middel 、 bottom 、top 均可
- 方案二: 若父元素中只有一张图片,设置图片为 display:block
- 方案三: 给父元素设置 font-size: 0 。如果该行内块内部还有文本,则需单独设置 font-size·
5.18 盒模型扩展
清除默认样式
- 标签选择器清除默认边距,或者通配符清除
- ul和ol清除列表前缀:list-style
- a标签清除下划线:color和text-decoration
- 清除默认加粗效果:font-weight
六、浮动
6.1 浮动的简介
实现文字环绕图片效果,主流的页面布局方式之一
6.2 元素浮动后的特点
- 脱离文档流
- 不管浮动前是什么元素,浮动后默认的宽与高是由内容撑开的,可以设置宽高
- 不会独占一行,可以与其他元共用一行
- 不会margin合并和margin塌陷,能够完美的设置四个方向的margin和padding
- 不会像行内块一样被当作文本处理(没有行内块的空白问题)
6.3 解决浮动产生的影响
6.3.1 元素浮动后会有哪些影响
对兄弟元素的影响: 后面的兄弟元素,会占据浮动元素之前的位置,在浮动元素的下面;对前面的兄弟无影响
对父元素的影响: 不能撑起父元素的高度,导致父元素高度塌陷;但父元素的宽度依然束缚浮动的元 素
6.3.2 解决浮动产生的影响(清除浮动)
- 方案一: 给父元素指定高度。
- 方案二: 给父元素也设置浮动,带来其他影响。
- 方案三: 给父元素设置 overflow:hidden。
- 方案四: 在所有浮动元素的最后面,添加一个块级元素,并给该块级元素设置 clear:both 。
- 方案五: 给浮动元素的父元素,设置伪元素,通过伪元素清除浮动,原理与方案四相同。(推荐使用)
1 | |
布局中的一个原则:设置浮动的时候,兄弟元素要么全都浮动,要么全都不浮动
6.4 浮动相关属性

6.5 浮动案例

七、定位
7.1 相对定位
7.1.1 如何设置相对定位
- 给元素设置
position:relative即可实现相对定位 - 可以使用
left、right、top、bottom四个属性调整位置
7.1.2 相对定位的参考点在哪里
- 相对自己原来的位置
7.1.3 相对定位的特点
- 不会脱离文档流,元素位置的变化,只是视觉效果上的变化,不会对其他元素产生任何影响
- 定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的
- 默认规则
- 定位元素在普通元素之上
- 都发生定位的两个元素,后写的元素会盖在先写的元素之上
- 默认规则
left和right不能一起设置,top和bottom不能一起设置- 相对定位的元素,也能继续浮动,但不推荐
- 相对定位的元素,也能通过
margin调整位置,但不推荐
:::success
注意:绝大多数情况下,相对定位,会与绝对定位配合使用
7.1.4 案例
1 | |

7.2 绝对定位
7.1.1 如何设置绝对定位
- 给元素设置
position:absolute即可实现相对定位 - 可以使用
left、right、top、bottom四个属性调整位置
7.1.2 绝对定位的参考点在哪里
- 参考它的包含块
什么是包含块?
- 对于没有脱离文档流的元素:包含块就是父元素
- 对于脱离文档流的元素:包含块是第一个拥有定位属性(子绝父相)的祖先元素(如果所有祖先都没定位,那包含块就是整个页面)
7.1.3 绝对定位的特点
- 脱离文档流,会对后面的兄弟元素、父元素有影响
- left 不能和 right 一起设置, top 和 bottom 不能一起设置
- 绝对定位、浮动不能同时设置,如果同时设置,浮动失效,以定位为主
- 绝对定位的元素,也能通过 margin 调整位置,但不推荐这样做
- 无论是什么元素(行内、行内块、块级)设置为绝对定位之后,都变成了定位元素
何为定位元素? —— 默认宽、高都被内容所撑开,且能自由设置宽高
7.1.4 压盖效果
定位元素不区分定位类型,都会去压盖标准流或浮动的元素
如果都是定位元素,后写的会压盖先写的
如何更改压盖顺序?
- 可以设置一个z-index属性(数字)
- 属性值大的会压盖属性值小的。设置z-index属性的会压盖没有设置的
- z-index属性只能设置给定位元素才有效果
- 父子盒模型,如果父子盒都进行了定位,与其他的父子级有压盖的部分:
- 父级盒子:如果不设置z-index,后写的压盖先写的;如果设置了z-index,值大的压盖值小的
- 子级盒子:如果父级没有设置z-index属性,子级z-index大的会压盖小的;如果父级设置z-index值,无论子级值是多少,都是父级值大的子级别压盖父级值小的子级 => 从父效应
7.3 固定定位
7.1.1 如何设置固定定位
- 给元素设置
position:fixed即可实现相对定位 - 可以使用
left、right、top、bottom四个属性调整位置
7.1.2 固定定位的参考点在哪里
- 参考它的视口
什么是视口?—— 对于 PC 浏览器来说,视口就是我们看网页的那扇“窗户
7.1.3固定定位的特点
- 脱离文档流,会对后面的兄弟元素、父元素有影响
- left 不能和 right 一起设置, top 和 bottom 不能一起设置。
- 固定定位和浮动不能同时设置,如果同时设置,浮动失效,以固定定位为主
- 固定定位的元素,也能通过 margin 调整位置,但不推荐这样做
- 无论是什么元素(行内、行内块、块级)设置为固定定位之后,都变成了定位元素
7.4 粘性定位
7.1.1 如何设置粘性定位
- 给元素设置
position:sticky即可实现相对定位 - 可以使用
left、right、top、bottom四个属性调整位置,不过最常用的是top值
7.1.2 粘性定位的参考点在哪里
- 离它最近的一个拥有“滚动机制”的祖先元素,即便这个祖先不是最近的真实可滚动祖先
7.1.3固定定位的特点
- 不会脱离文档流,它是一种专门用于窗口滚动时的新的定位方式
- 最常用的值是 top 值
- 粘性定位和浮动可以同时设置,但不推荐这样做
- 粘性定位的元素,也能通过 margin 调整位置,但不推荐这样做
:::success
粘性定位和相对定位的特点基本一致,不同的是:粘性定位可以在元素到达某个位置时将其固定
:::
7.5 定位层级
- 定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的
- 如果位置发生重叠,默认情况是:后面的元素,会显示在前面元素之上
- 可以通过 css 属性 z-index 调整元素的显示层级
- z-index 的属性值是数字,没有单位,值越大显示层级越高
- 只有定位的元素设置 z-index 才有效
- 如果 z-index 值大的元素,依然没有覆盖掉 z-index 值小的元素,那么请检查其包含块的层级
7.6 定位的特殊应用
:::success
注意:
- 发生固定定位、绝对定位后,元素都变成了定位元素,默认宽高被内容撑开,且依然可以设置宽高
- 发生相对定位后,元素依然是之前的显示模式
- 以下所说的特殊应用,只针对 绝对定位 和 固定定位 的元素,不包括相对定位的元素
:::
让定位元素的宽充满包含块
- 宽度想与包含块一致,可以给定位元素同时设置 left 和 right 为 0
- 高度想与包含块一致, top 和 bottom 设置为 0
让定位元素在包含块中居中
方案一
1 | |
方案二
1 | |
:::success
注意:该定位的元素必须设置宽高!!!
7.7 定位案例
八、布局
8.1 版心
在 PC 端网页中,一般都会有一个固定宽度且水平居中的盒子,来显示网页的主要内容,这是网页的版心
版心的宽度一般是 960 ~ 1200 像素之间
版心可以是一个,也可以是多个
8.2 常用布局名词

8.3 重置默认样式
方式一: 使用全局选择器(实际开发不会使用)
1 | |
方式二:reset.css(选择到具有默认样式的元素,清空其默认的样式)
:::success
经过 reset 后的网页,好似“一张白纸”,开发人员可根据设计稿,精细的去添加具体的样式
:::
方案三: Normalize.css
Normalize.css 是一种最新方案,它在清除默认样式的基础上,保留了一些有价值的默认样式
官网地址:http://necolas.github.io/normalize.css/
相对于 reset.css , Normalize.css 有如下优点:
- 保护了有价值的默认样式,而不是完全去掉它们
- 为大部分HTML元素提供一般化的样式
- 新增对 HTML5 元素的设置
- 对并集选择器的使用比较谨慎,有效避免调试工具杂乱
:::success
Normalize.css 的重置,和 reset.css 相比,更加的温和,开发时可根据实际情况进行选择
:::
九、CSS3简介
9.1 概述
CSS3 在未来会按照模块化的方式去发展:CSS current work & how to participate (w3.org)
CSS3 的新特性如下:
新增了更加实用的选择器,例如:动态伪类选择器、目标伪类选择器、伪元素选择器等等
新增了更好的视觉效果,例如:圆角、阴影、渐变等
新增了丰富的背景效果,例如:支持多个背景图片,同时新增了若干个背景相关的属性
新增了全新的布局方案 —— 弹性盒子
新增了 Web 字体,可以显示用户电脑上没有安装的字体
增强了颜色,例如: HSL 、 HSLA 、 RGBA 几种新的颜色模式,新增 opacity 属性来控制透明度
增加了 2D 和 3D 变换,例如:旋转、扭曲、缩放、位移等
增加动画与过渡效果,让效果的变换更具流线性、平滑性
……
9.2 CSS3私有前缀
9.2.1 什么是私有前缀
-webkit-
9.2.2 为什么要有私有前缀
W3C 标准所提出的某个 CSS 特性,在被浏览器正式支持之前,浏览器厂商会根据浏览器的内核, 使用私有前缀
来测试该 CSS 特性,在浏览器正式支持该 CSS 特性后,就不需要私有前缀了
1 | |
查询 CSS3 兼容性的网站:https://caniuse.com/
9.2.3 常见浏览器私有前缀
Chrome 浏览器: -webkit-
Safari 浏览器: -webkit-
Firefox 浏览器: -moz-
Edge 浏览器: -webkit-
旧 Opera 浏览器: -o-
旧 IE 浏览器: -ms-
十、CSS3基本语法
10.1 CSS3新增长度单位
- rem 根元素字体大小的倍数,只与根元素字体大小有关
- vw 视口宽度的百分之多少 10vw 就是视口宽度的 10%
- vh 视口高度的百分之多少 10vh 就是视口高度的 10%
- vmax 视口宽高中大的那个的百分之多少。(了解即可)
- vmin 视口宽高中小的那个的百分之多少。(了解即可)
10.2 CSS3 新增颜色设置方式
CSS3 新增了三种颜色设置方式,分别是: rgba 、 hsl 、 hsla
10.3 CSS3 新增选择器
CSS3 新增的选择器有:动态伪类、目标伪类、语言伪类、 UI 伪类、结构伪类、否定伪类、伪元素
10.4 CSS3 新增盒模型相关属性
10.4.1 box-sizing 怪异盒模型
使用 box-sizing 属性可以设置盒模型的两种类型

10.4.2 resize 调整盒子大小
使用 resize 属性可以控制是否允许用户调节元素尺寸

10.4.3 box-shadow 盒子阴影
使用 box-shadow 属性为盒子添加阴影
1 | |
各个值的含义:

默认值: box-shadow:none 表示没有阴影
1 | |
多层阴影:先写的阴影会盖在后写的阴影上
10.4.4 opacity 不透明度
opacity 属性能为整个元素添加透明效果,值是 0 到 1 之间的小数, 0是完全透明, 1表示完全不透明
:::success
opacity 与 rgba 的区别?
opacity 是一个属性,设置的是整个元素(包括元素里的内容)的不透明度
rgba 是颜色的设置方式,用于设置颜色,它的透明度,仅仅是调整颜色的透明度
:::
10.5 CSS3 新增背景属性
10.5.1 background-origin
作用:设置背景图的原点
语法
- padding-box :从 padding 区域开始显示背景图像 - 默认值
- border-box : 从 border 区域开始显示背景图像
- content-box : 从 content 区域开始显示背景图像
10.5.2 background-clip
作用:设置背景图的向外裁剪的区域
语法
- border-box : 从 border 区域开始向外裁剪背景 - 默认值
- padding-box : 从 padding 区域开始向外裁剪背景
- content-box : 从 content 区域开始向外裁剪背景
- text :背景图只呈现在文字上
注意:若值为 text ,那么 backgroun-clip 要加上 -webkit- 前缀
10.5.3 background-size
作用:设置背景图的尺寸
语法:
- 用长度值指定背景图片大小,不允许负值
1 | |
- 用百分比指定背景图片大小,不允许负值
1 | |
- auto : 背景图片的真实大小 - 默认值
- contain : 将背景图片等比缩放,使背景图片的宽或高,与容器的宽或高相等,再将完整
背景图片包含在容器内,但要注意:可能会造成容器里部分区域没有背景图片
1 | |
- cover :将背景图片等比缩放,直到完全覆盖容器,图片会尽可能全的显示在元素上,但要
注意:背景图片有可能显示不完整 - 相对比较好的选择
1 | |
10.5.4 backgorund 复合属性
1 | |
注意:
- origin 和 clip 的值如果一样,如果只写一个值,则 origin 和 clip 都设置;如果设置了两个值,前面的是 origin,后面的clip
- size 的值必须写在 position 值的后面,并且用 / 分开
10.5.5 多背景图
CSS3允许元素设置多个背景图片
1 | |
10.5.6 文字隐藏方法
给标签设置背景后,隐藏文字内容
- 设置text-indent属性一个很大的负值,在设置溢出隐藏属性
10.5.7 设置列表选项前的图片样式
由于给li标签设置background,背景也会在padding区域出现
1 | |
10.5.8 精灵图技术
网页中的小背景图片如果频繁的发送网络请求,会降低网页的加载速度
将设计的小背景图合成为一张大图
- 制作的是一张背景透明的png图片
- 利用背景定位技术
注意事项:

10.6 CSS3新增边框属性
10.6.1 边框圆角
在 CSS3 中,使用 border-radius 属性可以将盒子变为圆角
x-radius / y-radius - 椭圆角
radius - 圆角
将元素绘制成圆
border-radius设置成元素宽度与padding和的一半
- 同时设置四个角的圆角:
1 | |
- 分开设置每个角的圆角(几乎不用):

分开设置每个角的圆角,综合写法(几乎不用):
1 | |
10.6.2 边框外轮廓(了解)
- outline-width :外轮廓的宽度
- outline-color :外轮廓的颜色
- outline-style :外轮廓的风格
none : 无轮廓
dotted : 点状轮廓
dashed : 虚线轮廓
solid : 实线轮廓
double : 双线轮廓
- outline-offset:设置外轮廓与边框的距离,正负值都可以设置
:::success
注意: outline-offset 不是 outline 的子属性,是一个独立的属性
:::
- outline 复合属性
1 | |
10.7 CSS3新增文本属性
10.7.1 文本阴影
在 CSS3 中,我们可以使用 text-shadow 属性给文本添加阴影
1 | |

默认值: text-shadow:none 表示没有阴影
单个阴影:
1 | |

多层阴影:
1 | |

10.7.2 文本换行
在 CSS3 中,我们可以使用 white-space 属性设置文本换行方式

10.7.3 文本溢出
在 CSS3 中,我们可以使用 text-overflow 属性设置文本内容溢出时的呈现模式

:::success
注意:
要使 text-overflow 属性生效,块容器必须显式定义 overflow 为非 visible 值, white-space 为 nowrap值
:::
10.7.4 文本修饰
CSS3 升级了 text-decoration 属性,让其变成了复合属性
1 | |
子属性及其含义:
text-decoration-line 设置文本装饰线的位置
none : 指定文字无装饰 (默认值)
underline : 指定文字的装饰是下划线
overline : 指定文字的装饰是上划线
line-through : 指定文字的装饰是贯穿线
text-decoration-style 文本装饰线条的形状
solid : 实线 (默认)
double : 双线
dotted : 点状线条
dashed : 虚线
wavy : 波浪线
text-decoration-color 文本装饰线条的颜色
10.7.5 文本描边
注意:文字描边功能仅 webkit 内核浏览器支持
-webkit-text-stroke-width :设置文字描边的宽度,写长度值
-webkit-text-stroke-color :设置文字描边的颜色,写颜色值
-webkit-text-stroke :复合属性,设置文字描边宽度和颜色
10.8 CSS3 新增渐变
10.8.1线性渐变
- 多个颜色之间的渐变, 默认从上到下渐变

- 使用关键词设置线性渐变的方向

- 使用角度设置线性渐变的方向

- 调整开始渐变的位置

10.8.2 径向渐变
- 多个颜色之间的渐变, 默认从圆心四散。(注意:不一定是正圆,要看容器本身宽高比)

- 使用关键词调整渐变圆的圆心位置

- 使用像素值调整渐变圆的圆心位置

- 调整渐变形状为正圆

- 调整形状的半径

- 调整开始渐变的位置

10.8.3 重复渐变
无论线性渐变,还是径向渐变,在没有发生渐变的位置,继续进行渐变,就为重复渐变。
使用 repeating-linear-gradient 进行重复线性渐变,具体参数同 linear-gradient
使用 repeating-radial-gradient 进行重复径向渐变,具体参数同 radial-gradient
10.9 web字体
10.9.1 基本用法
可以通过 @font-face 指定字体的具体地址,浏览器会自动下载该字体,这样就不依赖用户电脑上的字体了
- 语法(简写形式)
1 | |
- 语法(高兼容性写法)
1 | |
10.9.2 定制字体
中文的字体文件很大,使用完整的字体文件不现实,通常针对某几个文字进行单独定制
可使用阿里 Web 字体定制工具:https://www.iconfont.cn/webfont
10.9.3 字体图标
相比图片更加清晰
灵活性高,更方便改变大小、颜色、风格等
兼容性好, IE 也能支持
:::success
字体图标的具体使用方式,每个平台不尽相同,最好参考平台使用指南,视频中我们是以使用最多 的阿里图标库作为演示
阿里图标官网地址:https://www.iconfont.cn/
:::
10.10 2D变换
:::success
前提:二维坐标系如下图所示
:::

10.10.1 2D位移
2D 位移可以改变元素的位置,具体使用方式如下:
- 先给元素添加 转换属性 transform
- 编写 transform 的具体值,相关可选值如下:

- 注意点
- 位移与相对定位很相似,都不脱离文档流,不会影响到其它元素
- 与相对定位的区别:相对定位的百分比值,参考的是其父元素;定位的百分比值,参考的是
其自身 - 浏览器针对位移有优化,与定位相比,浏览器处理位移的效率更高。
- transform 可以链式编写,例如:

5. 位移对行内元素无效。
6. 位移配合定位,可实现元素水平垂直居中

10.10.2 2D缩放
2D缩放是指: 让元素放大或缩小,具体使用方式如下:
- 先给元素添加 转换属性 transform
- 编写 transform 的具体值,相关可选值如下:

- 注意点
:::success
- scale 的值,是支持写负数的,但几乎不用,因为容易让人产生误解
- 借助缩放,可实现小于 12px 的文字
:::
10.10.3 2D旋转
2D 旋转是指:让元素在二维平面内,顺时针旋转或逆时针旋转,具体使用方式如下:
- 先给元素添加 转换属性 transform
- 编写 transform 的具体值,相关可选值如下:

:::success
注意: rotateZ(20deg) 相当于 rotate(20deg) ,当然到了 3D 变换的时候,还能写: rotate(x,x,x)
:::
10.10.4 2D扭曲(了解)
2D 扭曲是指:让元素在二维平面内被“拉扯”,进而“走形”,实际开发几乎不用,了解即可,具体使用方式如下:
- 先给元素添加 转换属性 transform
- 编写 transform 的具体值,相关可选值如下

10.10.5 多重变换
多个变换,可以同时使用一个 transform 来编写
1 | |
:::success
注意点:多重变换时,建议最后旋转
:::
10.10.6 变换原点
元素变换时,默认的原点是元素的中心,使用 transform-origin 可以设置变换的原点
修改变换原点对位移没有影响, 对旋转和缩放会产生影响
如果提供两个值,第一个用于横坐标,第二个用于纵坐标
如果只提供一个,若是像素值,表示横坐标,纵坐标取 50% ;若是关键词,则另一个坐标取 50%
:::success
- transform-origin: 50% 50% , 变换原点在元素的中心位置,百分比是相对于自身 —— 默认值
- transform-origin: left top ,变换原点在元素的左上角
- transform-origin: 50px 50px , 变换原点距离元素左上角 50px 50px 的位置
- transform-origin: 0 ,只写一个值的时候,第二个值默认为 50%
:::
10.11 3D变换
10.11.1 开启3D空间
重要原则:元素进行 3D 变换的首要操作:父元素必须开启 3D 空间!
使用 transform-style 开启 3D 空间,可选值如下:
flat : 让子元素位于此元素的二维平面内( 2D 空间)—— 默认值
preserve-3d : 让子元素位于此元素的三维空间内( 3D 空间)
10.11.2 设置景深
何为景深?—— 指定观察者与 z=0 平面的距离,能让发生 3D 变换的元素,产生透视效果,看来更加立体
:::success
使用 perspective 设置景深,可选值如下:
none : 不指定透视 ——(默认值)
长度值 : 指定观察者距离 z=0 平面的距离,不允许负值
注意: perspective 设置给发生 3D 变换元素的父元素!
:::
10.11. 3 透视点位置
所谓透视点位置,就是观察者位置;默认的透视点在元素的中心
:::success
使用 perspective-origin 设置观察者位置(透视点的位置),例如:

注意:通常情况下,我们不需要调整透视点位置
:::
10.11.4 3D 位移
3D 位移是在 2D 位移的基础上,可以让元素沿 z 轴位移,具体使用方式如下:
- 先给元素添加 转换属性 transform
- 编写 transform 的具体值, 3D 相关可选值如下:

10.11.5 3D 旋转
3D 旋转是在 2D 旋转的基础上,可以让元素沿 x 轴和 y 轴旋转,具体使用方式如下:
- 先给元素添加 转换属性 transform
- 编写 transform 的具体值, 3D 相关可选值如下:

10.11.6 3D 缩放
3D 缩放是在 2D 缩放的基础上,可以让元素沿 z 轴缩放,具体使用方式如下:
- 先给元素添加 转换属性 transform
- 编写 transform 的具体值, 3D 相关可选值如下:

10.11.7 多重变换
多个变换,可以同时使用一个 transform 来编写
1 | |
:::success
注意点:多重变换时,建议最后旋转
:::
10.11.8 背部可见性
使用 backface-visibility 指定元素背面,在面向用户时是否可见,常用值如下:
visible : 指定元素背面可见,允许显示正面的镜像。—— 默认值
hidden : 指定元素背面不可见
:::success
注意: backface-visibility 需要加在发生 3D 变换元素的自身上
:::
10.12 过渡
过渡可以在不使用 Flash 动画,不使用 JavaScript 的情况下,让元素从一种样式,平滑过渡为另一 种样式
10.12.1 transition-property
作用:定义哪个属性需要过渡,只有在该属性中定义的属性(比如宽、高、颜色等)才会以有过渡 效果
常用值:
- none :不过渡任何属性
- all :过渡所有能过渡的属性
- 具体某个属性名 ,例如: width 、 heigth ,若有多个以逗号分隔
:::success
不是所有的属性都能过渡,值为数字,或者值能转为数字的属性,都支持过渡,否则不支持过渡
常见的支持过渡的属性有:颜色、长度值、百分比、 z-index 、 opacity 、 2D 变换属 性、 3D 变换属性、阴影
:::
10.12.2 transition-duration
作用:设置过渡的持续时间,即:一个状态过渡到另外一个状态耗时多久
常用值:
- 0 :没有任何过渡时间 —— 默认值
- s 或 ms :秒或毫秒
- 列表 :
如果想让所有属性都持续一个时间,那就写一个值
如果想让每个属性持续不同的时间那就写一个时间的列表
10.12.3 transition-delay
作用:指定开始过渡的延迟时间,单位: s 或 ms
10.12.4 transition-timing-function
作用:设置过渡的类型
常用值:
- ease : 平滑过渡 —— 默认值
- linear : 线性过渡
- ease-in : 慢 → 快
- ease-out : 快 → 慢
- ease-in-out : 慢 → 快 → 慢
- step-start : 等同于 steps(1, start)
- step-end : 等同于 steps(1, end)
- steps( integer,?) : 接受两个参数的步进函数。第一个参数必须为正整数,指定函数的
步数。第二个参数取值可以是 start 或 end ,指定每一步的值发生变化的时间点。第二个
参数默认值为 end - cubic-bezie ( number, number, number, number): 特定的贝塞尔曲线类型
在线制作贝赛尔曲线:https://cubic-bezier.com
10.12.5 transition 复合属性
如果设置了一个时间,表示 duration ;如果设置了两个时间,第一是 duration ,第二个是 delay ;其他值没有
顺序要求
1 | |
十一、动画
11.1 什么是帧
一段动画,就是一段时间内连续播放 n 个画面。每一张画面,我们管它叫做“帧”。一定时间内连续快速播放若
干个帧,就成了人眼中所看到的动画。同样时间内,播放的帧数越多,画面看起来越流畅
11.2 什么是关键帧

11.3 动画的基本使用
- 第一步:定义关键帧(定义动画)
- 简单方式定义
1 | |
- 完整方式定义
1 | |
- 第二步:给元素应用动画,用到的属性如下
- animation-name :给元素指定具体的动画(具体的关键帧)
- animation-duration :设置动画所需时间
- animation-delay :设置动画延迟
1 | |
11.4 动画的其他属性
- animation-timing-function,设置动画的类型,常用值如下:
:::success
- ease : 平滑动画 —— 默认值
- linear : 线性过渡
- ease-in : 慢 → 快
- ease-out : 快 → 慢
- ease-in-out : 慢 → 快 → 慢
- step-start : 等同于 steps(1, start)
- step-end : 等同于 steps(1, end)
- steps( integer,?) : 接受两个参数的步进函数。第一个参数必须为正整数,指定函数的步数。第二个参数取值可以是 start 或 end ,指定每一步的值发生变化的时间点。第二个参数默认值为 end
- cubic-bezie ( number, number, number, number): 特定的贝塞尔曲线类型
:::
- animation-iteration-count ,指定动画的播放次数,常用值如下:
:::success
- number :动画循环次数
- infinite : 无限循环
:::
- animation-direction ,指定动画方向,常用值如下:
:::success
- normal : 正常方向 (默认)
- reverse : 反方向运行
- alternate : 动画先正常运行再反方向运行,并持续交替运行
- alternate-reverse : 动画先反运行再正方向运行,并持续交替运行
:::
- animation-fill-mode ,设置动画之外的状态
:::success
- forwards : 设置对象状态为动画结束时的状态
- backwards : 设置对象状态为动画开始时的状态
:::
- animation-play-state ,设置动画的播放状态,常用值如下:
:::success
- running : 运动 (默认)
- paused : 暂停
:::
11.5 动画复合属性
只设置一个时间表示 duration ,设置两个时间分别是: duration 和 delay ,其他属性没有数量和顺序要求。
1 | |
:::success
备注: animation-play-state 一般单独使用
:::
11.6 动画案例
十二、多列布局
作用:专门用于实现类似于报纸的布局
常见属性如下:
column-count :指定列数,值是数字
column-width :指定列宽,值是长度
columns :同时指定列宽和列数,复合属性;值没有数量和顺序要求
column-gap :设置列边距,值是长度
column-rule-style :设置列与列之间边框的风格,值与 border-style 一致
column-rule-width :设置列与列之间边框的宽度,值是长度
column-rule-color :设置列与列之间边框的颜色
coumn-rule :设置列边框,复合属性
column-span 指定是否跨列;值: none 、 all
十三、伸缩盒模型
13.1 伸缩盒模型简介
2009 年, W3C 提出了一种新的盒子模型 —— Flexible Box (伸缩盒模型,又称:弹性盒 子)
它可以轻松的控制:元素分布方式、元素对齐方式、元素视觉顺序 …….
截止目前,除了在部分 IE 浏览器不支持,其他浏览器均已全部支持
伸缩盒模型的出现,逐渐演变出了一套新的布局方案 —— flex 布局
:::success
小贴士:
- 传统布局是指:基于传统盒状模型,主要靠: display 属性 + position 属性 + float属性
- flex 布局目前在移动端应用比较广泛,因为传统布局不能很好的呈现在移动设备上
:::
13.2 伸缩容器、伸缩项目
伸缩容器: 开启了 flex 的元素,就是:伸缩容器
:::success
- 给元素设置: display:flex 或 display:inline-flex ,该元素就变为了伸缩容器
- display:inline-flex 很少使用,因为可以给多个伸缩容器的父容器,也设置为伸缩容器
- 一个元素可以同时是:伸缩容器、伸缩项目
:::
伸缩项目:伸缩容器所有子元素自动成为了:伸缩项目
:::success
- 仅伸缩容器的子元素成为了伸缩项目,孙子元素、重孙子元素等后代,不是伸缩项目
- 无论原来是哪种元素(块、行内块、行内),一旦成为了伸缩项目,全都会“块状化”
:::
13.3 主轴与侧轴
主轴: 伸缩项目沿着主轴排列,主轴默认是水平的,默认方向是:从左到右(左边是起点,右边 是终点)
侧轴: 与主轴垂直的就是侧轴,侧轴默认是垂直的,默认方向是:从上到下(上边是起点,下边 是终点)
13.4 主轴方向
属性名: flex-direction
常用值如下:
- row :主轴方向水平从左到右 —— 默认值
- row-reverse :主轴方向水平从右到左
- column :主轴方向垂直从上到下
- column-reverse :主轴方向垂直从下到上

:::success
注意:改变了主轴的方向,侧轴方向也随之改变
:::
13.5 主轴换行方式
属性名: flex-wrap
常用值如下:
- nowrap :默认值,不换行

- wrap :自动换行,伸缩容器不够自动换行
- wrap-reverse :反向换行

13.6 flex-flow
flex-flow 是一个复合属性,复合了 flex-direction 和 flex-wrap 两个属性。 值没有顺序要求
1 | |
13.7 主轴对齐方式
属性名: justify-content
常用值如下:
- flex-start :主轴起点对齐 —— 默认值
- flex-end :主轴终点对齐
- center :居中对齐
- space-between :均匀分布,两端对齐(最常用)
- space-around :均匀分布,两端距离是中间距离的一半
- space-evenly :均匀分布,两端距离与中间距离一致

13.8 侧轴对齐方式
13.8.1 一行的情况
所需属性: align-items
常用值如下:
- flex-start :侧轴的起点对齐
- flex-end :侧轴的终点对齐
- center :侧轴的中点对齐
- baseline : 伸缩项目的第一行文字的基线对齐
- stretch :如果伸缩项目未设置高度,将占满整个容器的高度。—— (默认值)

13.8.2 多行的情况
所需属性: align-content
常用值如下:
- flex-start :与侧轴的起点对齐
- flex-end :与侧轴的终点对齐
- center :与侧轴的中点对齐
- space-between :与侧轴两端对齐,中间平均分布
- space-around :伸缩项目间的距离相等,比距边缘大一倍
- space-evenly : 在侧轴上完全平分
- stretch :占满整个侧轴。—— 默认值


13.9 flex 实现水平垂直居中
方法一:父容器开启 flex 布局,随后使用 justify-content 和 align-items 实现水平垂直居中
1 | |
方法二:父容器开启 flex 布局,随后子元素 margin: auto
1 | |
13.10 伸缩性
13.10.1 flex-basis
概念: flex-basis 设置的是主轴方向的基准长度,会让宽度或高度失效
备注:主轴横向:宽度失效;主轴纵向:高度失效
作用:浏览器根据这个属性设置的值,计算主轴上是否有多余空间,默认值 auto ,即:伸缩项目 的宽或高
13.10.2 flex-grow(伸)
概念: flex-grow 定义伸缩项目的放大比例,默认为 0 ,即:纵使主轴存在剩余空间,也不拉伸(放大)。
规则:
- 若所有伸缩项目的 flex-grow 值都为 1 ,则:它们将等分剩余空间(如果有空间的话)
- 若三个伸缩项目的 flex-grow 值分别为: 1 、 2 、 3 ,则:分别瓜分到: 1/6 、 2/6 、3/6 的空间
13.10.3 flex-shrink(缩)
概念: flex-shrink 定义了项目的压缩比例,默认为 1 ,即:如果空间不足,该项目将会缩小
收缩项目的计算,略微复杂一点,我们拿一个场景举例:

13.11 flex复合属性
flex 是复合属性,复合了: flex-grow 、 flex-shrink 、 flex-basis 三个属性,默认值为 0 1 auto
如果写 flex:1 1 auto ,则可简写为: flex:auto
如果写 flex:1 1 0 ,则可简写为: flex:1
如果写 flex:0 0 auto ,则可简写为: flex:none
如果写 flex:0 1 auto ,则可简写为: flex:0 auto —— 即 flex 初始值
13.12 项目排序
order 属性定义项目的排列顺序。数值越小,排列越靠前,默认为 0
13.13 单独对齐
通过 align-self 属性,可以单独调整某个伸缩项目的对齐方式 默认值为 auto ,表示继承父元素的 align-items 属性
十四、响应式布局
14.1 媒体查询
14.1.1 媒体类型

:::success
完整列表请参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/@media
:::
14.1.2 媒体特性

:::success
完整列表请参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/@media
:::
14.1.3 运算符

14.1.4 常用阈值
在实际开发中,会将屏幕划分成几个区间,例如:

14.1.5 结合外部样式的用法
用法一:
1 | |
用法二:
1 | |
十五、BFC
15.1 什么是BFC


15.2 开启了BFC能解决什么问题
- 元素开启 BFC 后,其子元素不会再产生 margin 塌陷问题
- 元素开启 BFC 后,自己不会被其他浮动元素所覆盖
- 元素开启 BFC 后,就算其子元素浮动,元素自身高度也不会塌陷
15.3 如何开启BFC

15.4 什么是IFC

15.5 什么是GFC

15.6 什么是FFC

十六、重构和重绘


十七、版心
17.1 版心的概念
版心:网页中主要内容所在的区域,一般在浏览器窗口中水平居中显示,让用户的视线更集中
常见的版心宽度值包括960px、980px、1000px、1200px
制作方法:使用标准流中的margin居中方法
17.2 页面布局流程
- 确定页面的版心(可视区域)
- 分析页面中的行模块,以及每个行模块中的列模块
- 制作HTML页面,CSS文件
- CSS初始化,通过DIV+CSS布局控制网页的各个模块
17.3 网页布局案例
十八、网页开发
18.1 head标签
title标签设置
网站图标设置
1 | |
18.2 CSS分级引入
- 清除默认样式的CSS
- 命名习惯
reset.css - 雅虎 YUI
- 命名习惯
- 网站的公共样式CSS
- 命名习惯
common.css模块名.css
- 命名习惯
- 每个页面自己独有的CSS
- 命名习惯
- 一般文件名与HTML的文件名保持一致
index.css - 可以使用多个单词的拼写
index_banner.css
- 一般文件名与HTML的文件名保持一致
- 命名习惯
https://blog.csdn.net/m0_67401270/article/details/123321807
当 ‘margin属性为四个参数时,分别代表:上、右、下、左外边距
a标签的瞄伪类

1 | |
BFC
- 根元素
- float属性不为none
- position为absolute或fixed
- display为inline-block, table-cell, table-caption, flex, inline-flex
- overflow不为visible
**六、HTML Tips**
**哪些情况触发reflow和repaint**
repaint是某个DOM元素进行重绘;reflow是整个页面进行重排,也就是页面所有DOM元素渲染
style变动造成repaint和reflow。
不涉及任何DOM元素的排版问题的变动为repaint,例如元素的color/text-align/text-decoration等等属性的变动。
除上面所提到的DOM元素style的修改基本为reflow。例如元素的任何涉及长、宽、行高、边框、display等style的修改。
触发repaint:
color的修改,如color=#ddd;
text-align的修改,如text-align=center;
a:hover也会造成重绘。
:hover引起的颜色等不导致页面回流的style变动
触发reflow:
width/height/border/margin/padding的修改,如width=778px;
动画,:hover等伪类引起的元素表现改动,display=none等造成页面回流;
appendChild等DOM元素操作;
font类style的修改;
background的修改,注意着字面上可能以为是重绘,但是浏览器确实回流了,经过浏览器厂家的优化,部分background的修改只触发repaint,当然IE不用考虑;
scroll页面,这个不可避免;
resize页面,桌面版本的进行浏览器大小的缩放,移动端的话,还没玩过能拖动程序,resize程序窗口大小的多窗口操作系统;
读取元素的属性(这个无法理解,但是技术达人是这么说的,那就把它当做定理吧):读取元素的某些属性(offsetLeft、offsetTop、offsetHeight、offsetWidth、scrollTop/Left/Width/Height、clientTop/Left/Width/Height、getComputedStyle()、currentStyle(in IE));
目前没有浏览器支持 box-flex 属性。
Firefox 支持替代的 -moz-box-flex 属性。
Safari、Opera 以及 Chrome 支持替代的 -webkit-box-flex 属性。
- css加载不会阻塞DOM树的解析
- css加载会阻塞DOM树的渲染
- css加载会阻塞后面js语句的执行
