CSS教程

一、CSS基础

1.1 CSS简介

CSS全称:层叠样式表(Cascading Style Sheets)

CSS是一种标记语言,用于给HTML结构设置样式

1.2 CSS编写位置

1.2.1 行内样式/内联样式

  • 写在HTML标签的style属性中,只对当前标签有效
  • 语法:【名1:值1;名2:值2;】的形式
1
<h1 style="color:red;font-size:60px;">欢迎来到尚硅谷学习</h1>
  • 未体现出结构与样式分离的思想,不推荐大量使用

1.2.2 内部样式

  • 写在HTML页面中,将CSS代码单独放在style标签中
  • 语法:
1
2
3
4
5
6
<style>
h1 {
color: red;
font-size: 40px;
}
</style>
  • <style>标签理论上可以放在 HTML 文档的任何地方,但一般都放在<head>标签中
  • 结构与样式未完全分离,多个HTML页面无法复用样式

1.2.3 外部样式

  • 写在单独的.css文件中,在HTML文件中引用
  • 语法:
    • .css文件中写CSS代码
1
2
3
4
h1{
color: red;
font-size: 40px;
}
- 在HTML文件的`<head>`标签中,用`link`标签引入`.css`文件
1
<link rel="stylesheet" href="./xxx.css">
  • 结构与样式完全分离,推荐使用

1.2.4 导入式样式

1
2
3
<style>
@import(01.css)
</style>

若网页加载较慢,会出现html结构,但是没有样式的情况

1.3 样式表的优先级

行内样式 > 内部样式 = 外部样式

  • 内部样式和外部样式的优先级相同,后面的会覆盖前面的
  • 同一个样式表中,优先级也与编写顺序有关,后面的会覆盖前面的

1.4 CSS语法规范

CSS代码 - 两部分组成:

  • 选择器:找到要添加样式的元素
  • 声明块:设置具体的样式
    • 由一个或多个声明组成
    • 声明的格式:属性名:属性值;

注释的写法:

1
2
3
4
5
6
7
/* 给h1元素添加样式 */
h1 {
/* 设置文字颜色为红色 */
color: red;
/* 设置文字大小为40px */
font-size: 40px
}

1.5 CSS代码风格

  • 展开风格 - 开发时推荐,便于维护和调试
1
2
3
4
h1 {
color: red;
font-size: 40px;
}
  • 紧凑风格 - 项目上线时推荐,减小文件体积
1
h1{color:red;font-size:40px;}

不区分大小写,推荐小写

二、CSS选择器

2.1 基本选择器

2.1.1 通配选择器

  • 作用:选中所有的HTML元素
  • 语法:
1
2
3
* {
属性名: 属性值;
}

通配符选择效率低,设置的部分公共样式不是所有标签都需要添加

实际上线的网站不允许使用 * 去清除默认内外边距

2.1.2 元素选择器

  • 作用:选中HTML页面中的某个元素,统一设置样式
  • 语法:
1
2
3
标签名 {
属性名: 属性值;
}

2.1.3 类选择器

  • 作用:根据元素的class属性值,选中某些元素
  • 语法:
1
2
3
.类名 {
属性名: 属性值;
}
  • 注意
    • class类名命名规则
      • 不要使用纯数字、中文
      • 尽量使用数字和英文字母的组合
      • 多个单词,使用-连接
      • 见名知意
    • 一个元素不能写多个class属性,但是一个class属可以写多个属性值,用空格隔开
1
2
3
4
<!-- 该写法错误,元素的属性不能重复,后写的会失效 -->
<h1 class="speak" class="big">你好啊</h1>
<!-- 该写法正确,class属性,能写多个值 -->
<h1 class="speak big">你好啊</h1>

实际中:类上样式CSS、ID上行为JS

2.1.4 ID选择器

  • 作用:根据元素的ID属性值,精准的选中某个元素
  • 语法:
1
2
3
#id值 {
属性名: 属性值;
}
  • 注意
    • ID属性值命名规则
      • 尽量由字母、数字、下划线、短杠组成
      • 最好以字母开头
      • 不包含空格,区分大小写
    • 一个元素只能拥有一个ID属性值,多个元素的ID属性值不能相同
    • 一个元素可以同时拥有ID属性和class属性

2.2 CSS复合选择器

复合选择器由多个基础选择器,通过不同方式组合而成

2.2.1 交集选择器

  • 作用:选中同时符合多个条件的元素
  • 语法:
1
2
3
选择器1选择器2选择器3...选择器n {

}
  • 注意
    • 有标签名,标签名要写在前面
    • ID选择器、通配选择器 在 交集选择器中几乎不用,没有意义
    • 交集选择器中 不可能出现 两个元素选择器
    • 频率最高的选择器组合是:元素选择器 + 类选择器

2.2.2 并集选择器

  • 作用:选中多个选择器对应的元素,又称分组选择器
  • 语法:
1
2
3
4
5
6
7
选择器1, 
选择器2,
选择器3,
...
选择器n {

}
  • 注意
    • 并集选择器一般是竖排写
    • 任何形式的选择器都可以成为并集选择器的一部分
    • 并集选择器用于集体声明,可以缩小样式表体积

2.2.3 HTML元素间的关系

  • 父元素:直接包裹某个元素的元素,就是该元素的父元素
  • 子元素:被父元素直接包含的元素(简记:儿子元素)
  • 祖先元素:父亲的父亲……,一直往外找,都是祖先;父元素也是祖先元素
  • 后代元素:儿子的儿子……,一直往里找,都是后代;子元素也是后代元素
  • 兄弟元素:具有相同父元素的元素,互为兄弟元素

2.2.4 后代选择器

  • 作用:选中指定元素中,符合要求的后代元素
  • 语法:
1
2
3
选择器1 选择器2 选择器3 ...... 选择器n {

}
  • 注意
    • 后代选择器,选中的是后代,不选中祖先

2.2.5 子代选择器

  • 作用:选中指定元素中,符合要求的子元素
  • 语法:
1
2
3
选择器1 > 选择器2 > 选择器3 > ...... 选择器n {

}
  • 注意
    • 子代选择器,选中的是子代,不选中父亲

2.2.6 兄弟选择器

  • 相邻兄弟选择器
    • 作用:选中指定元素后,符合条件的相邻兄弟元素
    • 语法:
1
2
3
选择器1+选择器2 {

}
  • 通用兄弟选择器
    • 作用:选中指定元素后,符合条件的所有兄弟元素
    • 语法:
1
2
3
选择器1~选择器2 {

}

2.2.7 属性选择器

  • 作用:选中属性值符合一定要求的元素
  • 语法:
1
2
3
4
5
1. [属性名]       选中具有某个属性的元素。
2. [属性名="值"] 选中包含某个属性,且属性值等于指定值的元素。
3. [属性名^="值"] 选中包含某个属性,且属性值以指定的值开头的元素。
4. [属性名$="值"] 选中包含某个属性,且属性值以指定的值结尾的元素。
5. [属性名*="值"] 选择包含某个属性,属性值包含指定值的元素。’

2.2.8 伪类选择器

  • 作用:选中特殊状态的元素

常用的伪类选择器:

  1. 动态伪类(巧记:LVHA)
    1. :link超链接未被访问的状态
    2. :visited超链接访问过的状态
    3. :hover鼠标悬停在元素上的状态
    4. :active元素激活的状态(按住鼠标不松开)
    5. :focus获取焦点的元素(表单类元素才能使用)(点击元素、触摸元素、tab键触发)
  2. 结构伪类
    1. :first-child 所有兄弟元素中的第一个
    2. :last-child 所有兄弟元素中的最后一个
    3. :nth-child(n) 所有兄弟元素中的第n个
    4. :nth-last-child(n) 所有兄弟元素中的倒数第n个
    5. :first-of-type 所有同类型兄弟元素中的第一个
    6. :last-of-type 所有同类型兄弟元素中的最后一个
    7. :nth-of-type(n) 所有同类型兄弟元素中的第n个
    8. :nth-last-of-type(n) 所有同类型兄弟元素中的 倒数第n个
    9. :only-child 选择没有兄弟的元素(独生子女)
    10. :only-of-type 选择没有同类型兄弟的元素
    11. :root 根元素
    12. :empty 内容为空元素(空格也算内容)
1
2
3
4
5
6
7
8
9
# 选中的是box类的第一个子元素,并且这个元素是p元素 
# 不是选中box类中的第一个p元素哦
.box p:first-child {

}

.box :first-child {

}

关于n的值

n是数字的情况
- 0 / 不写 - 什么元素也选不中
- n - 选中所有子元素
- 1 ~ 正整数 - 选中对应序号的子元素
n是关键字的情况
- 2n / even - 选中序号为偶数的子元素
- 2n+1 / odd - 选中序号为奇数的子元素
n是公式的情况(n从0开始计算)
- -n+3 - 选中的是前3个
- n+4 - 选中的是第四个及以后子元素
  1. 否定伪类
    1. :not(选择器) 排除满足括号中条件的元素
  2. UI伪类
    1. :checked 被选中的复选框或单选按钮。
    2. :enable 可用的表单元素(没有 disabled 属性)
    3. :disabled 不可用的表单元素(有 disabled 属性)
  3. 目标伪类
    1. :target 选中锚点指向的元素
  4. 语言伪类
    1. :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
2
3
div {
font-size: 40px;
}

注意事项:

  1. Chrome 浏览器支持的最小文字为 12px ,默认的文字大小为 16px ,并且 0px 会自动消失
  2. 不同浏览器默认的字体大小可能不一致,所以最好给一个明确的值,不要用默认大小
  3. 通常以给 body 设置 font-size 属性,这样 body 中的其他元素就都可以继承了

展开说说:

  • 由于字体设计原因,文字最终呈现的大小,并不一定与 font-size 的值一致,可能大,也可能小
  • 通常情况下,文字相对字体设计框,并不是垂直居中的,通常都靠下一些

实际应用:

  • 网页中最小设置字号必须是12px,如果低于12px会出现兼容问题,现在网页中普通使用14px+
  • 尽量使用12px、14px、16px等偶数的数字字号,ie6等老式浏览器奇数字号会有bug

4.3.2 字体族 `font-family`

语法:

1
2
3
div {
font-family: "STCaiyun","Microsoft YaHei",sans-serif
}

注意事项:

  1. 使用字体的英文名字兼容性会更好,具体的英文名可以自行查询,或在电脑的设置里去寻找
  2. 如果字体名包含空格,必须使用引号包裹起来
  3. 可以设置多个字体,按照从左到右的顺序逐个查找,找到就用,没有找到就使用后面的,且通常在最后写上 serif (衬线字体)或 sans-serif (非衬线字体)
  4. windows 系统中,默认的字体就是微软雅黑

常用的中文字体:

  • 宋体 SimSun
  • 微软雅黑 Microsoft Yahei

常用的英文字体:

  • Arial
  • consolas

电脑自带字体库:

英文和中文都放一个备用字体,防止用户电脑上没有设置的字体

建议英文字体写在属性值最前面

4.3.3 字体风格 font-style

语法:

1
2
3
div {
font-style: italic;
}

常用值:

  • normal :正常(默认值)
  • italic :斜体(使用字体自带的斜体效果)
  • oblique :斜体(强制倾斜产生的斜体效果)

4.3.4 字体粗细 font-weight

语法:

1
2
3
4
5
6
div {
font-weight: bold;
}
div {
font-weight: 600;
}

常用值:

  • lighter :细
  • normal : 正常
  • bold :粗
  • bolder :很粗 (多数字体不支持)

数值:

  • 100~900 且无单位,数值越大,字体越粗 (或一样粗,具体得看字体设计时的精确程度)
  • 100300 等同于 lighter , 400500 等同于 normal , 600 及以上等同于 bold

4.3.5 字体复合写法 font

编写规则:

  • 字体、字号必须都写上,且字号在前,字体在后
  • 三个值的写法:字号/行高 字体
  • 加粗和斜体只能写在最前面
  • 字体族必须是最后一位、字体大小必须是倒数第二位
  • 各个属性间用空格隔开

4.4 CSS文本属性

4.4.1 文本颜色 `color`

语法:

1
2
3
div {
color: rgb(112,45,78);
}

可选值:

  • .颜色名
  • rgb 或 rgba
  • HEX 或 HEXA (十六进制)
  • HSL 或 HSLA

4.4.2 文本间距

字母间距:letter-spacing

单词间距:word-spacing (通过空格识别词)

属性值:像素px,正值让间距增大,负值让间距缩小。

4.4.3 文本修饰 text-decoration

语法:

1
2
3
p {
text-decoration: underline dotted red;
}

可选值:

  1. none : 无装饰线(常用)
  2. underline :下划线(常用)
  3. overline : 上划线
  4. line-through : 删除线

可搭配如下值使用:

  1. dotted :虚线
  2. wavy :波浪线
  3. 也可以指定颜色

4.4.4 文本缩进 text-indent

语法:

1
2
3
div {
text-indent:40px;
}

属性值:CSS的长度单位(正负数代表方向)

  • px单位:首行缩进多少像素
  • em单位:首行缩进多少字符
  • 百分比:缩进文字所在标签的父标签width属性值的百分比

4.4.5 文本对齐 text-align

语法:

1
2
3
div {
text-align: center;
}

常用

  1. left :左对齐(默认值)
  2. right :右对齐
  3. center :居中对齐

4.4.6 行高 line-height

语法:

1
2
3
4
5
div {
line-height: 60px;
line-height: 1.5;
line-height: 150%;
}

可选值:

  1. normal :由浏览器根据文字大小决定的一个默认值
  2. 像素( px )
  3. 数字:参考自身 font-size 的倍数(很常用)
  4. 百分比:参考自身 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
2
3
4
5
6
7
8
9
vertical-align: baseline; //基线
vertical-align: middle;
vertical-align: top;
vertical-align: bottom;

vertical-align: sub; //下标基线
vertical-align: super; //上标基线
vertical-align: text-top; //字体顶部对齐
vertical-align: text-bottom; //字体底部对齐

作用:用于指定行内元素或表格单元格元素的垂直对齐方式

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
2
/* 自定义鼠标光标 */
cursor: url("./arrow.png"),pointer;

五、CSS盒模型

5.1 CSS长度单位

  1. px :像素
  2. em :相对元素 font-size 的倍数
  3. rem :相对根字体大小,html标签就是根
  4. % :相对父元素计算

:::success
注意:CSS 中设置长度,必须加单位,否则样式无效!

:::

5.2 元素的显示模式

5.2.1 块元素

又称:块级元素
特点:

  1. 在页面中独占一行,不会与任何元素共用一行,是从上到下排列的
  2. 默认宽度:撑满父元素
  3. 默认高度:由内容撑开
  4. 可以通过 CSS 设置宽高

5.2.2 行内元素

又称:内联元素
特点:

  1. 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列
  2. 默认宽度:由内容撑开
  3. 默认高度:由内容撑开
  4. 无法通过 CSS 设置宽高

5.2.3 行内块元素

又称:内联块元素
特点:

  1. 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列
  2. 默认宽度:由内容撑开
  3. 默认高度:由内容撑开
  4. 可以通过 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 元素都看成一个盒子,所有的样式也都是基于这个盒子

  1. margin(外边距): 盒子与外界的距离
  2. border(边框): 盒子的边框
  3. padding(内边距): 紧贴内容的补白区域
  4. 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 复合属性的使用规则:

  1. padding: 10px; 四个方向内边距都是 10px 。
  2. padding: 10px 20px; 上 10px ,左右 20px 。(上下、左右)
  3. padding: 10px 20px 30px; 上 10px ,左右 20px ,下 30px 。(上、左右、下)
  4. padding: 10px 20px 30px 40px; 上 10px ,右 20px ,下 30px ,左 40px 。(上、右、下、左)

:::success
注意:

  1. padding 的值不能为负数
  2. 行内元素 的 左右内边距是没问题的,上下内边距不能完美的设置
  3. 块级元素、行内块元素,四个方向内边距都可以完美设置

:::

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

  1. 子元素的 margin ,是参考父元素的 content 计算的。(因为是父亲的 content 中承装着子元素)
  2. 上 margin 、左 margin :影响自己的位置;下 margin 、右 margin :影响后面兄弟元素的位置
  3. 块级元素、行内块元素,均可以完美地设置四个方向的 margin ;但行内元素,左右margin 可以完美设置,上下 margin 设置无效
  4. margin 的值也可以是 auto ,如果给一个块级元素设置左右 margin 都为 auto ,该块级元素会在父元素中水平居中
  5. margin 的值可以是负值

:::

5.10.2 margin塌陷问题

什么是margin塌陷?

第一个子元素的上 margin 会作用在父元素上,最后一个子元素的下 margin 会作用在父元素上

如何解决margin塌陷?

  • 方案一: 给父元素设置不为 0 的 padding
  • 方案二: 给父元素设置宽度不为 0 的 border
  • 方案三:给父元素设置 css 样式 overflow:hidden

5.10.3 margin合并问题

什么是margin合并?

上面兄弟元素的下外边距和下面兄弟元素的上外边距会合并,取一个最大的值,而不是相加

如何解决margin合并?

无需解决,布局的时候上下的兄弟元素,只给一个设置上下外边距就可以了

5.11 处理内容溢出


注意:

  1. overflow-x 、 overflow-y 不能一个是 hidden ,一个是 visible ,是实验性属性,不建议使用
  2. 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 布局小技巧

  1. 行内元素、行内块元素,可以父元素当做文本处理
    1. text-align - 水平对齐方式
    2. line-height
    3. text-indent
  2. 如何让子元素在父元素中水平居中
    1. 若子元素为块元素,给父元素加上margin: 0 auto
    2. 若子元素为行内元素、行内块元素,给父元素加上text-align:center
  3. 如何让子元素在父元素中垂直居中
    1. 若子元素为块元素,给子元素加上margin-top,值为(父元素content - 子元素盒子总高)/ 2
    2. 若子元素为行内元素、行内块元素,给父元素加上height=line-height,子元素加上vertical-align:middle
      1. 若想绝对居中,设置父元素的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 元素浮动后的特点

  1. 脱离文档流
  2. 不管浮动前是什么元素,浮动后默认的宽与高是由内容撑开的,可以设置宽高
  3. 不会独占一行,可以与其他元共用一行
  4. 不会margin合并和margin塌陷,能够完美的设置四个方向的margin和padding
  5. 不会像行内块一样被当作文本处理(没有行内块的空白问题)

6.3 解决浮动产生的影响

6.3.1 元素浮动后会有哪些影响

对兄弟元素的影响: 后面的兄弟元素,会占据浮动元素之前的位置,在浮动元素的下面;对前面的兄弟无影响

对父元素的影响: 不能撑起父元素的高度,导致父元素高度塌陷;但父元素的宽度依然束缚浮动的元 素

6.3.2 解决浮动产生的影响(清除浮动)

  1. 方案一: 给父元素指定高度。
  2. 方案二: 给父元素也设置浮动,带来其他影响。
  3. 方案三: 给父元素设置 overflow:hidden。
  4. 方案四: 在所有浮动元素的最后面,添加一个块级元素,并给该块级元素设置 clear:both 。
  5. 方案五: 给浮动元素的父元素,设置伪元素,通过伪元素清除浮动,原理与方案四相同。(推荐使用)
1
2
3
4
5
6
7
.parent::after {
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}

布局中的一个原则:设置浮动的时候,兄弟元素要么全都浮动,要么全都不浮动

6.4 浮动相关属性

6.5 浮动案例

image-20240929134529407

七、定位

7.1 相对定位

7.1.1 如何设置相对定位

  • 给元素设置position:relative即可实现相对定位
  • 可以使用leftrighttopbottom四个属性调整位置

7.1.2 相对定位的参考点在哪里

  • 相对自己原来的位置

7.1.3 相对定位的特点

  1. 不会脱离文档流,元素位置的变化,只是视觉效果上的变化,不会对其他元素产生任何影响
  2. 定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的
    1. 默认规则
      1. 定位元素在普通元素之上
      2. 都发生定位的两个元素,后写的元素会盖在先写的元素之上
  3. leftright不能一起设置,topbottom不能一起设置
  4. 相对定位的元素,也能继续浮动,但不推荐
  5. 相对定位的元素,也能通过margin调整位置,但不推荐

:::success
注意:绝大多数情况下,相对定位,会与绝对定位配合使用

7.1.4 案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.nav {
width: 1000px;
height: 50px;
background-color: lightblue;
margin: 100px auto;
list-style: none;
font: 18px/50px skyblue;
padding: 0px;
}

.nav li {
width: 200px;
height: 50px;
float: left;
text-align: center;
}

.nav li a {
text-decoration: none;
}

.nav li:hover {
border-top: 4px solid orange;
position: relative;
top: -4px;
}
</style>
</head>
<body>
<ul class="nav">
<li><a href="xxx">首页</a></li>
<li><a href="xxx">首页</a></li>
<li><a href="xxx">首页</a></li>
<li><a href="xxx">首页</a></li>
<li><a href="xxx">首页</a></li>
</ul>
</body>
</html>

image-20240929192749865

7.2 绝对定位

7.1.1 如何设置绝对定位

  • 给元素设置position:absolute即可实现相对定位
  • 可以使用leftrighttopbottom四个属性调整位置

7.1.2 绝对定位的参考点在哪里

  • 参考它的包含块

什么是包含块?

  1. 对于没有脱离文档流的元素:包含块就是父元素
  2. 对于脱离文档流的元素:包含块是第一个拥有定位属性(子绝父相)的祖先元素(如果所有祖先都没定位,那包含块就是整个页面)

7.1.3 绝对定位的特点

  1. 脱离文档流,会对后面的兄弟元素、父元素有影响
  2. left 不能和 right 一起设置, top 和 bottom 不能一起设置
  3. 绝对定位、浮动不能同时设置,如果同时设置,浮动失效,以定位为主
  4. 绝对定位的元素,也能通过 margin 调整位置,但不推荐这样做
  5. 无论是什么元素(行内、行内块、块级)设置为绝对定位之后,都变成了定位元素

何为定位元素? —— 默认宽、高都被内容所撑开,且能自由设置宽高

7.1.4 压盖效果

image-20240929194115161

定位元素不区分定位类型,都会去压盖标准流或浮动的元素

如果都是定位元素,后写的会压盖先写的

如何更改压盖顺序?

  • 可以设置一个z-index属性(数字)
    • 属性值大的会压盖属性值小的。设置z-index属性的会压盖没有设置的
    • z-index属性只能设置给定位元素才有效果
    • 父子盒模型,如果父子盒都进行了定位,与其他的父子级有压盖的部分:
      • 父级盒子:如果不设置z-index,后写的压盖先写的;如果设置了z-index,值大的压盖值小的
      • 子级盒子:如果父级没有设置z-index属性,子级z-index大的会压盖小的;如果父级设置z-index值,无论子级值是多少,都是父级值大的子级别压盖父级值小的子级 => 从父效应

7.3 固定定位

7.1.1 如何设置固定定位

  • 给元素设置position:fixed即可实现相对定位
  • 可以使用leftrighttopbottom四个属性调整位置

7.1.2 固定定位的参考点在哪里

  • 参考它的视口

什么是视口?—— 对于 PC 浏览器来说,视口就是我们看网页的那扇“窗户

7.1.3固定定位的特点

  1. 脱离文档流,会对后面的兄弟元素、父元素有影响
  2. left 不能和 right 一起设置, top 和 bottom 不能一起设置。
  3. 固定定位和浮动不能同时设置,如果同时设置,浮动失效,以固定定位为主
  4. 固定定位的元素,也能通过 margin 调整位置,但不推荐这样做
  5. 无论是什么元素(行内、行内块、块级)设置为固定定位之后,都变成了定位元素

7.4 粘性定位

7.1.1 如何设置粘性定位

  • 给元素设置position:sticky即可实现相对定位
  • 可以使用leftrighttopbottom四个属性调整位置,不过最常用的是 top

7.1.2 粘性定位的参考点在哪里

  • 离它最近的一个拥有“滚动机制”的祖先元素,即便这个祖先不是最近的真实可滚动祖先

7.1.3固定定位的特点

  • 不会脱离文档流,它是一种专门用于窗口滚动时的新的定位方式
  • 最常用的值是 top 值
  • 粘性定位和浮动可以同时设置,但不推荐这样做
  • 粘性定位的元素,也能通过 margin 调整位置,但不推荐这样做

:::success
粘性定位和相对定位的特点基本一致,不同的是:粘性定位可以在元素到达某个位置时将其固定

:::

7.5 定位层级

  1. 定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的
  2. 如果位置发生重叠,默认情况是:后面的元素,会显示在前面元素之上
  3. 可以通过 css 属性 z-index 调整元素的显示层级
  4. z-index 的属性值是数字,没有单位,值越大显示层级越高
  5. 只有定位的元素设置 z-index 才有效
  6. 如果 z-index 值大的元素,依然没有覆盖掉 z-index 值小的元素,那么请检查其包含块的层级

7.6 定位的特殊应用

:::success
注意:

  1. 发生固定定位、绝对定位后,元素都变成了定位元素,默认宽高被内容撑开,且依然可以设置宽高
  2. 发生相对定位后,元素依然是之前的显示模式
  3. 以下所说的特殊应用,只针对 绝对定位 和 固定定位 的元素,不包括相对定位的元素

:::

让定位元素的宽充满包含块

  1. 宽度想与包含块一致,可以给定位元素同时设置 left 和 right 为 0
  2. 高度想与包含块一致, top 和 bottom 设置为 0

让定位元素在包含块中居中

方案一

1
2
3
4
5
left:0; 
right:0;
top:0;
bottom:0;
margin:auto;

方案二

1
2
3
4
left: 50%;
top: 50%;
margin-left: 负的宽度一半;
margin-top: 负的高度一半;

:::success
注意:该定位的元素必须设置宽高!!!

7.7 定位案例

image-20240930102943023

八、布局

8.1 版心

在 PC 端网页中,一般都会有一个固定宽度且水平居中的盒子,来显示网页的主要内容,这是网页的版心

版心的宽度一般是 960 ~ 1200 像素之间

版心可以是一个,也可以是多个

8.2 常用布局名词

8.3 重置默认样式

方式一: 使用全局选择器(实际开发不会使用)

1
2
3
4
5
* {
margin: 0;
padding: 0;
......
}

方式二:reset.css(选择到具有默认样式的元素,清空其默认的样式)

:::success
经过 reset 后的网页,好似“一张白纸”,开发人员可根据设计稿,精细的去添加具体的样式

:::

方案三: Normalize.css

Normalize.css 是一种最新方案,它在清除默认样式的基础上,保留了一些有价值的默认样式

官网地址:http://necolas.github.io/normalize.css/

相对于 reset.css , Normalize.css 有如下优点:

  1. 保护了有价值的默认样式,而不是完全去掉它们
  2. 为大部分HTML元素提供一般化的样式
  3. 新增对 HTML5 元素的设置
  4. 对并集选择器的使用比较谨慎,有效避免调试工具杂乱

:::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
2
3
4
5
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
-ms-border-radius: 20px;
-o-border-radius: 20px;
border-radius: 20px;

查询 CSS3 兼容性的网站:https://caniuse.com/

9.2.3 常见浏览器私有前缀

Chrome 浏览器: -webkit-

Safari 浏览器: -webkit-

Firefox 浏览器: -moz-

Edge 浏览器: -webkit-

旧 Opera 浏览器: -o-

旧 IE 浏览器: -ms-

十、CSS3基本语法

10.1 CSS3新增长度单位

  1. rem 根元素字体大小的倍数,只与根元素字体大小有关
  2. vw 视口宽度的百分之多少 10vw 就是视口宽度的 10%
  3. vh 视口高度的百分之多少 10vh 就是视口高度的 10%
  4. vmax 视口宽高中大的那个的百分之多少。(了解即可)
  5. 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: h-shadow v-shadow blur spread color inset;

各个值的含义:

默认值: box-shadow:none 表示没有阴影

1
2
3
4
5
6
7
8
9
10
11
12
/* 写两个值,含义:水平位置、垂直位置 */
box-shadow: 10px 10px;
/* 写三个值,含义:水平位置、垂直位置、颜色 */
box-shadow: 10px 10px red;
/* 写三个值,含义:水平位置、垂直位置、模糊值 */
box-shadow: 10px 10px 10px;
/* 写四个值,含义:水平位置、垂直位置、模糊值、颜色 */
box-shadow: 10px 10px 10px red;
/* 写五个值,含义:水平位置、垂直位置、模糊值、外延值、颜色 */
box-shadow: 10px 10px 10px 10px blue;
/* 写六个值,含义:水平位置、垂直位置、模糊值、外延值、颜色、内阴影 */
box-shadow: 10px 10px 20px 3px blue inset;

多层阴影:先写的阴影会盖在后写的阴影上

10.4.4 opacity 不透明度

opacity 属性能为整个元素添加透明效果,值是 0 到 1 之间的小数, 0是完全透明, 1表示完全不透明

:::success
opacity 与 rgba 的区别?

opacity 是一个属性,设置的是整个元素(包括元素里的内容)的不透明度

rgba 是颜色的设置方式,用于设置颜色,它的透明度,仅仅是调整颜色的透明度

:::

10.5 CSS3 新增背景属性

10.5.1 background-origin

作用:设置背景图的原点
语法

  1. padding-box :从 padding 区域开始显示背景图像 - 默认值
  2. border-box : 从 border 区域开始显示背景图像
  3. content-box : 从 content 区域开始显示背景图像

10.5.2 background-clip

作用:设置背景图的向外裁剪的区域
语法

  1. border-box : 从 border 区域开始向外裁剪背景 - 默认值
  2. padding-box : 从 padding 区域开始向外裁剪背景
  3. content-box : 从 content 区域开始向外裁剪背景
  4. text :背景图只呈现在文字上

注意:若值为 text ,那么 backgroun-clip 要加上 -webkit- 前缀

10.5.3 background-size

作用:设置背景图的尺寸
语法:

  1. 用长度值指定背景图片大小,不允许负值
1
background-size: 300px 200px;
  1. 用百分比指定背景图片大小,不允许负值
1
background-size: 100% 100%;
  1. auto : 背景图片的真实大小 - 默认值
  2. contain : 将背景图片等比缩放,使背景图片的宽或高,与容器的宽或高相等,再将完整
    背景图片包含在容器内,但要注意:可能会造成容器里部分区域没有背景图片
1
background-size: contain;
  1. cover :将背景图片等比缩放,直到完全覆盖容器,图片会尽可能全的显示在元素上,但要
    注意:背景图片有可能显示不完整 - 相对比较好的选择
1
background-size: cover;

10.5.4 backgorund 复合属性

1
background: color url repeat position / size origin clip

注意:

  1. origin 和 clip 的值如果一样,如果只写一个值,则 origin 和 clip 都设置;如果设置了两个值,前面的是 origin,后面的clip
  2. size 的值必须写在 position 值的后面,并且用 / 分开

10.5.5 多背景图

CSS3允许元素设置多个背景图片

1
2
3
4
5
/* 添加多个背景图 */
background: url(../images/bg-lt.png) no-repeat,
url(../images/bg-rt.png) no-repeat right top,
url(../images/bg-lb.png) no-repeat left bottom,
url(../images/bg-rb.png) no-repeat right bottom;

10.5.6 文字隐藏方法

给标签设置背景后,隐藏文字内容

  • 设置text-indent属性一个很大的负值,在设置溢出隐藏属性

10.5.7 设置列表选项前的图片样式

由于给li标签设置background,背景也会在padding区域出现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.list {
width: 200px;
border: 2px solid black;
margin: 20px;
list-style: none;
padding-left: 5px;
}

.list li {
background: url(../list_image.png) no-repeat left center / 15px 15px;
padding-left: 20px;
}
</style>
</head>

<body>
<ul class="list">
<li>这是一个子项</li>
<li>这是一个子项</li>
<li>这是一个子项</li>
<li>这是一个子项</li>
<li>这是一个子项</li>
<li>这是一个子项</li>
</ul>
</body>
</html>
image-20240929190228467

10.5.8 精灵图技术

网页中的小背景图片如果频繁的发送网络请求,会降低网页的加载速度

将设计的小背景图合成为一张大图

  • 制作的是一张背景透明的png图片
  • 利用背景定位技术

注意事项:

image-20240929190615282

10.6 CSS3新增边框属性

10.6.1 边框圆角

  • 在 CSS3 中,使用 border-radius 属性可以将盒子变为圆角

    • x-radius / y-radius - 椭圆角

    • radius - 圆角

  • 将元素绘制成圆

border-radius设置成元素宽度与padding和的一半

  • 同时设置四个角的圆角:
1
border-radius:10px;
  • 分开设置每个角的圆角(几乎不用):

分开设置每个角的圆角,综合写法(几乎不用):

1
border-raidus: 左上角x 右上角x 右下角x 左下角x / 左上y 右上y 右下y 左下y

10.6.2 边框外轮廓(了解)

  • outline-width :外轮廓的宽度
  • outline-color :外轮廓的颜色
  • outline-style :外轮廓的风格

none : 无轮廓

dotted : 点状轮廓

dashed : 虚线轮廓

solid : 实线轮廓

double : 双线轮廓

  • outline-offset:设置外轮廓与边框的距离,正负值都可以设置

:::success
注意: outline-offset 不是 outline 的子属性,是一个独立的属性

:::

  • outline 复合属性
1
outline:50px solid blue;

10.7 CSS3新增文本属性

10.7.1 文本阴影

在 CSS3 中,我们可以使用 text-shadow 属性给文本添加阴影

1
text-shadow: h-shadow v-shadow blur color;

默认值: text-shadow:none 表示没有阴影

单个阴影:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.word {
margin: 50px;
font: bold 30px/60px "微软雅黑";
text-shadow: 3px 3px 5px #f00;
}
</style>
</head>

<body>
<p class="word">文字阴影效果</p>
</body>

</html>

image-20240930150733273

多层阴影:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.word {
margin: 50px;
font: bold 30px/60px "微软雅黑";
text-shadow: 3px 3px 5px #f00,
6px 6px 3px #0f0,
9px 9px 3px #00f;
}
</style>
</head>

<body>
<p class="word">文字阴影效果</p>
</body>

</html>

image-20240930150905340

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: text-decoration-line || text-decoration-style || text-decoration-color

子属性及其含义:

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
2
3
4
@font-face {
font-family: "情书字体";
src: url('./方正手迹.ttf');
}
  • 语法(高兼容性写法)
1
2
3
4
5
6
7
8
9
10
11
@font-face {
font-family: "atguigu";
font-display: swap;
src: url('webfont.eot'); /* IE9 */
src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('webfont.woff2') format('woff2'),
url('webfont.woff') format('woff'), /* chrome、firefox */
url('webfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari,
Android*/
url('webfont.svg#webfont') format('svg'); /* iOS 4.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 位移可以改变元素的位置,具体使用方式如下:

  1. 先给元素添加 转换属性 transform
  2. 编写 transform 的具体值,相关可选值如下:

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

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

10.10.2 2D缩放

2D缩放是指: 让元素放大或缩小,具体使用方式如下:

  1. 先给元素添加 转换属性 transform
  2. 编写 transform 的具体值,相关可选值如下:
  3. 注意点

:::success

  1. scale 的值,是支持写负数的,但几乎不用,因为容易让人产生误解
  2. 借助缩放,可实现小于 12px 的文字

:::

10.10.3 2D旋转

2D 旋转是指:让元素在二维平面内,顺时针旋转或逆时针旋转,具体使用方式如下:

  1. 先给元素添加 转换属性 transform
  2. 编写 transform 的具体值,相关可选值如下:

:::success
注意: rotateZ(20deg) 相当于 rotate(20deg) ,当然到了 3D 变换的时候,还能写: rotate(x,x,x)

:::

10.10.4 2D扭曲(了解)

2D 扭曲是指:让元素在二维平面内被“拉扯”,进而“走形”,实际开发几乎不用,了解即可,具体使用方式如下:

  1. 先给元素添加 转换属性 transform
  2. 编写 transform 的具体值,相关可选值如下

10.10.5 多重变换

多个变换,可以同时使用一个 transform 来编写

1
transform: translate(-50%, -50%) rotate(45deg);

:::success
注意点:多重变换时,建议最后旋转

:::

10.10.6 变换原点

元素变换时,默认的原点是元素的中心,使用 transform-origin 可以设置变换的原点

修改变换原点对位移没有影响, 对旋转和缩放会产生影响

如果提供两个值,第一个用于横坐标,第二个用于纵坐标

如果只提供一个,若是像素值,表示横坐标,纵坐标取 50% ;若是关键词,则另一个坐标取 50%

:::success

  1. transform-origin: 50% 50% , 变换原点在元素的中心位置,百分比是相对于自身 —— 默认值
  2. transform-origin: left top ,变换原点在元素的左上角
  3. transform-origin: 50px 50px , 变换原点距离元素左上角 50px 50px 的位置
  4. 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 轴位移,具体使用方式如下:

  1. 先给元素添加 转换属性 transform
  2. 编写 transform 的具体值, 3D 相关可选值如下:

10.11.5 3D 旋转

3D 旋转是在 2D 旋转的基础上,可以让元素沿 x 轴和 y 轴旋转,具体使用方式如下:

  1. 先给元素添加 转换属性 transform
  2. 编写 transform 的具体值, 3D 相关可选值如下:

10.11.6 3D 缩放

3D 缩放是在 2D 缩放的基础上,可以让元素沿 z 轴缩放,具体使用方式如下:

  1. 先给元素添加 转换属性 transform
  2. 编写 transform 的具体值, 3D 相关可选值如下:

10.11.7 多重变换

多个变换,可以同时使用一个 transform 来编写

1
transform: translateZ(100px) scaleZ(3) rotateY(40deg);

:::success
注意点:多重变换时,建议最后旋转

:::

10.11.8 背部可见性

使用 backface-visibility 指定元素背面,在面向用户时是否可见,常用值如下:

visible : 指定元素背面可见,允许显示正面的镜像。—— 默认值

hidden : 指定元素背面不可见

:::success
注意: backface-visibility 需要加在发生 3D 变换元素的自身上

:::

10.12 过渡

过渡可以在不使用 Flash 动画,不使用 JavaScript 的情况下,让元素从一种样式,平滑过渡为另一 种样式

10.12.1 transition-property

作用:定义哪个属性需要过渡,只有在该属性中定义的属性(比如宽、高、颜色等)才会以有过渡 效果

常用值:

  1. none :不过渡任何属性
  2. all :过渡所有能过渡的属性
  3. 具体某个属性名 ,例如: width 、 heigth ,若有多个以逗号分隔

:::success
不是所有的属性都能过渡,值为数字,或者值能转为数字的属性,都支持过渡,否则不支持过渡

常见的支持过渡的属性有:颜色、长度值、百分比、 z-index 、 opacity 、 2D 变换属 性、 3D 变换属性、阴影

:::

10.12.2 transition-duration

作用:设置过渡的持续时间,即:一个状态过渡到另外一个状态耗时多久

常用值:

  1. 0 :没有任何过渡时间 —— 默认值
  2. s 或 ms :秒或毫秒
  3. 列表 :
    如果想让所有属性都持续一个时间,那就写一个值
    如果想让每个属性持续不同的时间那就写一个时间的列表

10.12.3 transition-delay

作用:指定开始过渡的延迟时间,单位: s 或 ms

10.12.4 transition-timing-function

作用:设置过渡的类型

常用值:

  1. ease : 平滑过渡 —— 默认值
  2. linear : 线性过渡
  3. ease-in : 慢 → 快
  4. ease-out : 快 → 慢
  5. ease-in-out : 慢 → 快 → 慢
  6. step-start : 等同于 steps(1, start)
  7. step-end : 等同于 steps(1, end)
  8. steps( integer,?) : 接受两个参数的步进函数。第一个参数必须为正整数,指定函数的
    步数。第二个参数取值可以是 start 或 end ,指定每一步的值发生变化的时间点。第二个
    参数默认值为 end
  9. cubic-bezie ( number, number, number, number): 特定的贝塞尔曲线类型

在线制作贝赛尔曲线:https://cubic-bezier.com

10.12.5 transition 复合属性

如果设置了一个时间,表示 duration ;如果设置了两个时间,第一是 duration ,第二个是 delay ;其他值没有

顺序要求

1
transition:1s 1s linear all;

十一、动画

11.1 什么是帧

一段动画,就是一段时间内连续播放 n 个画面。每一张画面,我们管它叫做“帧”。一定时间内连续快速播放若

干个帧,就成了人眼中所看到的动画。同样时间内,播放的帧数越多,画面看起来越流畅

11.2 什么是关键帧

11.3 动画的基本使用

  • 第一步:定义关键帧(定义动画)
    • 简单方式定义
1
2
3
4
5
6
7
8
9
10
/*写法一*/
@keyframes 动画名 {
from {
/*property1:value1*/
/*property2:value2*/
}
to {
/*property1:value1*/
}
}
-  完整方式定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@keyframes 动画名 {
0% {
/*property1:value1*/
}
20% {
/*property1:value1*/
}
40% {
/*property1:value1*/
}
60% {
/*property1:value1*/
}
80% {
/*property1:value1*/
}
100% {
/*property1:value1*/
}
}
  • 第二步:给元素应用动画,用到的属性如下
    • animation-name :给元素指定具体的动画(具体的关键帧)
    • animation-duration :设置动画所需时间
    • animation-delay :设置动画延迟
1
2
3
4
5
6
7
8
9
.box {
/* 指定动画 */
animation-name: testKey;
/* 设置动画所需时间 */
animation-duration: 5s;
/* 设置动画延迟 */
animation-delay: 0.5s;
}

11.4 动画的其他属性

  • animation-timing-function,设置动画的类型,常用值如下:

:::success

  1. ease : 平滑动画 —— 默认值
  2. linear : 线性过渡
  3. ease-in : 慢 → 快
  4. ease-out : 快 → 慢
  5. ease-in-out : 慢 → 快 → 慢
  6. step-start : 等同于 steps(1, start)
  7. step-end : 等同于 steps(1, end)
  8. steps( integer,?) : 接受两个参数的步进函数。第一个参数必须为正整数,指定函数的步数。第二个参数取值可以是 start 或 end ,指定每一步的值发生变化的时间点。第二个参数默认值为 end
  9. cubic-bezie ( number, number, number, number): 特定的贝塞尔曲线类型

:::

  • animation-iteration-count ,指定动画的播放次数,常用值如下:

:::success

  1. number :动画循环次数
  2. infinite : 无限循环

:::

  • animation-direction ,指定动画方向,常用值如下:

:::success

  1. normal : 正常方向 (默认)
  2. reverse : 反方向运行
  3. alternate : 动画先正常运行再反方向运行,并持续交替运行
  4. alternate-reverse : 动画先反运行再正方向运行,并持续交替运行

:::

  • animation-fill-mode ,设置动画之外的状态

:::success

  1. forwards : 设置对象状态为动画结束时的状态
  2. backwards : 设置对象状态为动画开始时的状态

:::

  • animation-play-state ,设置动画的播放状态,常用值如下:

:::success

  1. running : 运动 (默认)
  2. paused : 暂停

:::

11.5 动画复合属性

只设置一个时间表示 duration ,设置两个时间分别是: duration 和 delay ,其他属性没有数量和顺序要求。

1
2
3
.inner {
animation: atguigu 3s 0.5s linear 2 alternate-reverse forwards;
}

:::success
备注: animation-play-state 一般单独使用

:::

11.6 动画案例

image-20240930214906419

十二、多列布局

作用:专门用于实现类似于报纸的布局

常见属性如下:

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
小贴士:

  1. 传统布局是指:基于传统盒状模型,主要靠: display 属性 + position 属性 + float属性
  2. flex 布局目前在移动端应用比较广泛,因为传统布局不能很好的呈现在移动设备上

:::

13.2 伸缩容器、伸缩项目

伸缩容器: 开启了 flex 的元素,就是:伸缩容器

:::success

  1. 给元素设置: display:flex 或 display:inline-flex ,该元素就变为了伸缩容器
  2. display:inline-flex 很少使用,因为可以给多个伸缩容器的父容器,也设置为伸缩容器
  3. 一个元素可以同时是:伸缩容器、伸缩项目

:::

伸缩项目:伸缩容器所有子元素自动成为了:伸缩项目

:::success

  1. 仅伸缩容器的子元素成为了伸缩项目,孙子元素、重孙子元素等后代,不是伸缩项目
  2. 无论原来是哪种元素(块、行内块、行内),一旦成为了伸缩项目,全都会“块状化”

:::

13.3 主轴与侧轴

主轴: 伸缩项目沿着主轴排列,主轴默认是水平的,默认方向是:从左到右(左边是起点,右边 是终点)

侧轴: 与主轴垂直的就是侧轴,侧轴默认是垂直的,默认方向是:从上到下(上边是起点,下边 是终点)

13.4 主轴方向

属性名: flex-direction
常用值如下:

  1. row :主轴方向水平从左到右 —— 默认值
  2. row-reverse :主轴方向水平从右到左
  3. column :主轴方向垂直从上到下
  4. column-reverse :主轴方向垂直从下到上

:::success
注意:改变了主轴的方向,侧轴方向也随之改变

:::

13.5 主轴换行方式

属性名: flex-wrap
常用值如下:

  1. nowrap :默认值,不换行

  1. wrap :自动换行,伸缩容器不够自动换行

  1. wrap-reverse :反向换行

13.6 flex-flow

flex-flow 是一个复合属性,复合了 flex-direction 和 flex-wrap 两个属性。 值没有顺序要求

1
flex-flow: row wrap;

13.7 主轴对齐方式

属性名: justify-content
常用值如下:

  1. flex-start :主轴起点对齐 —— 默认值
  2. flex-end :主轴终点对齐
  3. center :居中对齐
  4. space-between :均匀分布,两端对齐(最常用)
  5. space-around :均匀分布,两端距离是中间距离的一半
  6. space-evenly :均匀分布,两端距离与中间距离一致

13.8 侧轴对齐方式

13.8.1 一行的情况

所需属性: align-items
常用值如下:

  1. flex-start :侧轴的起点对齐
  2. flex-end :侧轴的终点对齐
  3. center :侧轴的中点对齐
  4. baseline : 伸缩项目的第一行文字的基线对齐
  5. stretch :如果伸缩项目未设置高度,将占满整个容器的高度。—— (默认值)

13.8.2 多行的情况

所需属性: align-content
常用值如下:

  1. flex-start :与侧轴的起点对齐
  2. flex-end :与侧轴的终点对齐
  3. center :与侧轴的中点对齐
  4. space-between :与侧轴两端对齐,中间平均分布
  5. space-around :伸缩项目间的距离相等,比距边缘大一倍
  6. space-evenly : 在侧轴上完全平分
  7. stretch :占满整个侧轴。—— 默认值

13.9 flex 实现水平垂直居中

方法一:父容器开启 flex 布局,随后使用 justify-content 和 align-items 实现水平垂直居中

1
2
3
4
5
6
7
8
9
10
11
12
13
.outer {
width: 400px;
height: 400px;
background-color: #888;
display: flex;
justify-content: center;
align-items: center;
}
.inner {
width: 100px;
height: 100px;
background-color: orange;
}

方法二:父容器开启 flex 布局,随后子元素 margin: auto

1
2
3
4
5
6
7
8
9
10
11
12
.outer {
width: 400px;
height: 400px;
background-color: #888;
display: flex;
}
.inner {
width: 100px;
height: 100px;
background-color: orange;
margin: auto;
}

13.10 伸缩性

13.10.1 flex-basis

概念: flex-basis 设置的是主轴方向的基准长度,会让宽度或高度失效

备注:主轴横向:宽度失效;主轴纵向:高度失效

作用:浏览器根据这个属性设置的值,计算主轴上是否有多余空间,默认值 auto ,即:伸缩项目 的宽或高

13.10.2 flex-grow(伸)

概念: flex-grow 定义伸缩项目的放大比例,默认为 0 ,即:纵使主轴存在剩余空间,也不拉伸(放大)。
规则:

  1. 若所有伸缩项目的 flex-grow 值都为 1 ,则:它们将等分剩余空间(如果有空间的话)
  2. 若三个伸缩项目的 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
<link rel="stylesheet" media="具体的媒体查询" href="mystylesheet.css">

用法二:

1
2
3
4
5
6
@media screen and (max-width:768px) {
/*CSS-Code;*/
}
@media screen and (min-width:768px) and (max-width:1200px) {
/*CSS-Code;*/
}

十五、BFC

15.1 什么是BFC

image-20240930204742694

15.2 开启了BFC能解决什么问题

  1. 元素开启 BFC 后,其子元素不会再产生 margin 塌陷问题
  2. 元素开启 BFC 后,自己不会被其他浮动元素所覆盖
  3. 元素开启 BFC 后,就算其子元素浮动,元素自身高度也不会塌陷

15.3 如何开启BFC

15.4 什么是IFC

image-20240930205302640

15.5 什么是GFC

image-20240930205818507

15.6 什么是FFC

image-20240930205858873

十六、重构和重绘

image-20240930210011225

image-20240930210118308

十七、版心

17.1 版心的概念

版心:网页中主要内容所在的区域,一般在浏览器窗口中水平居中显示,让用户的视线更集中

常见的版心宽度值包括960px、980px、1000px、1200px

制作方法:使用标准流中的margin居中方法

17.2 页面布局流程

  1. 确定页面的版心(可视区域)
  2. 分析页面中的行模块,以及每个行模块中的列模块
  3. 制作HTML页面,CSS文件
  4. CSS初始化,通过DIV+CSS布局控制网页的各个模块

17.3 网页布局案例

image-20241001091036217 image-20241001091048246 image-20241001091101807

十八、网页开发

18.1 head标签

title标签设置

网站图标设置

1
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">

18.2 CSS分级引入

  • 清除默认样式的CSS
    • 命名习惯 reset.css
    • 雅虎 YUI
  • 网站的公共样式CSS
    • 命名习惯 common.css 模块名.css
  • 每个页面自己独有的CSS
    • 命名习惯
      • 一般文件名与HTML的文件名保持一致 index.css
      • 可以使用多个单词的拼写 index_banner.css

https://blog.csdn.net/m0_67401270/article/details/123321807

当 ‘margin属性为四个参数时,分别代表:上、右、下、左外边距

a标签的瞄伪类

1
2
3
4
a:link /* 未访问的链接 */
a:visited /* 已访问的链接 */
a:hover /* 鼠标移动到链接上 */
a:active /* 选定的链接 */

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 属性。

  1. css加载不会阻塞DOM树的解析
  2. css加载会阻塞DOM树的渲染
  3. css加载会阻塞后面js语句的执行


CSS教程
http://example.com/2024/09/28/前端入门/CSS教程/
作者
王承磊
发布于
2024年9月28日
许可协议