HTML5 & CSS3知识回顾
本文最后更新于 2024-12-10,文章内容可能已经过时。
HTML5 部分
HTML5是新一代标准,新增一些语义化和多媒体标签,侧重于seo优化!
兼容性
HTML5必须是IE9以上版本才兼容,且兼容HTML5部分内容!
Chrome(谷歌) Safari Opera Firefox(火狐)等主流浏览器支持!
新增布局标签
| 标签名 | 描述 |
|---|---|
header |
页面头部信息 |
footer |
页面页脚信息 |
nav |
导航标签 |
article |
文章内容标签 贴子 新闻 博客 评论等! |
aside |
侧边栏标签 |
section |
页面中的某段文字 里面的文字通常会包含标题! |
关于
article和section
article中可有多个section
section是主要强调分段和分块,如果想把一段文字分成多段,可以通过section进行分块!
article在内容中更强调独立,一块完整的内容,文章区,评论区,新闻区等!
新增的状态标签
meter
状态标签,
meter,表示数值区间的一个状态表示!
手机电池: <meter value="10" max="100" min="0" low="20" high="80" optimum="90"></meter>
| 属性值 | 描述 |
|---|---|
value |
当前值 |
max |
最大值 |
min |
最小值 |
low |
最低值 |
high |
最高值 |
optimum |
最优值 |
optimum当前值如果大于等于该属性值时,则显示绿色, 若低于 high 最高值时 且大于 low 最低值时,显示黄色,若低于最低值,则显示红色!
progress
显示
进度的一个标签!
当前进度: progress: <progress value="50" max="100"></progress>
value是当前值,max是进度最大值!
新增的列表标签
datalist
列表展示,可以配合input 带有 list 属性来过滤搜索数据!
<input type="text" list="names"/> <button>搜索</button>
<datalist id="names">
<option value="马冬梅"></option>
<option value="周杰伦"></option>
<option value="周星驰"></option>
<option value="张大仙"></option>
</datalist> 
details
类似于
collapse折叠框,点击标题问题后展示问题的答案内容!
<details>
<summary>如何一夜暴富?</summary>
<p>1. 找一个靠谱的工作</p>
<p>2. 养成早起的习惯</p>
</details>新增的文本标签
ruby 注音标签
可以给一段文字,加入
注音!
<ruby>
<span>魑魅魍魉</span>
<rt>chī mèi wǎng liǎng </rt>
</ruby>mark 文字标记
可以在一段文字中,
标记某个关键字,被标记的关键字,会显示高亮色!
<p>我是一段<mark>文字</mark></p>表单控件相关
新增的属性
| 属性 | 描述 |
|---|---|
placeholder |
文字占位符,可在输入框内使用该属性,文本输入 密码框 多文本框! |
required |
表示该表单控件为必选项! |
autofocus |
自动获取焦点 |
autocomplate |
自动完成,开始在输入框内输入信息的时候,下次输入时会自动提示之前输入的内容,需要浏览器开启该保存功能! 可选值on/off,密码和多行输入框没作用 |
pattern |
正则表达式 多行文本框没有作用! |
novalidate |
不处理校验,是form标签上的一个属性! |
新增的type属性值
| 属性值 | 描述 |
|---|---|
email |
邮箱,表示该input内只能输入邮箱格式,提交表单时会做email格式校验! |
number |
数字,表示input内只能输入数字,提交时会做数字格式校验! 另外还有step和max以及min属性搭配使用! |
url |
url路径,表示input内只能输入url路径,提交时会做url格式校验! |
search |
搜索, 当在input中输入内容时,右侧会出现 x 清除功能! |
tel |
电话,该属性在移动端使用,表示触发input时,键盘只能输入数字! |
range |
选择范围,在最小值,和最大值之间范围选择! 默认为0 - 100,可以配合 max 和 min 属性来控制最大和最小值! |
color |
颜色选择器,可以在色盘上选择颜色,并返回一个16进制的颜色值! |
date |
日期选择器 |
month |
月份选择器 |
week |
周选择器 |
time |
时间选择器 |
datetime-local |
日期选择器 + 时间选择器 |
新增的视频标签
视频标签
video,可以在浏览器中嵌入视频连接,进行视频播放!
属性值
| 属性 | 描述 |
|---|---|
controls |
该属性用来显示视频播放控件,如果没有该属性,则视频不会显示控制按键功能! 播放 快进等功能! |
muted |
静音,播放视频时,会静音播放! |
autoplay |
自动播放,需要配合muted属性使用,否则没有作用,除非,该视频播放参与度次数极高,才可以自动播放! |
loop |
循环播放 |
poster |
设置视频封面! 属性值为图片的url地址! |
preload |
视频预加载! 可选值 auto(下载整个视频)/metedata(预先获取视频元数据)/none! |
<video src = "./xxx.mp4" controls muted autoplay loop poster = "./xxx.png" preload = "auto"></video>新增的音频标签
视频标签
audio,可以在浏览器中嵌入音频连接,进行音频播放!
audio标签属性于video属性类似!
<audio src = "./xxx.mp4" controls muted autoplay loop preload = "auto"></audio>注意:
autoplay 属性为自动播放,但可能会因为浏览器媒体限制的问题,导致无法自动播放问题!
新增的全局属性
| 属性 | 描述 | 可选值 |
|---|---|---|
contenteditable |
该属性可以控制某元素中的内容是否可编辑! |
true/false |
draggable |
该属性可以控制某元素是否可以拖拽! |
true/false |
hidden |
该属性可以控制某元素进行隐藏! |
- |
spellcheck |
控制元素内容是否进行语法检查! |
true/false |
contentmenu |
规定元素上下文菜单,右击元素可查看菜单选项! | - |
data-* |
用于存储页面元素私有数据! |
- |
兼容性
html5shiv
在
小于 ie9的浏览器,HTML5标签是不支持,可以使用html5shiv.js插件来帮我们解决HTML5标签兼容问题!
<!-–[if lt IE 9]-->
<script src="./js/html5shiv.js "></script >
<!--[endif]–- >
!-–[if lt IE 9]-- 这种语法,只有在ie浏览器下认识,意思只有ie需要兼容的浏览器,才会加载 html5shiv.js 模块!
lt 是 < < 小于的符号!
meta
<meta http-equiv="X-UA-Compatible" content="ie=edge">如果是
ie浏览器,则使用最优渲染模式(edge)!
<meta name="render" content="webkit" />
国产浏览器,大部分都是双核模式,以上配置,则让浏览器优先使用chrome和Safari去渲染!
CSS3 部分

CSS前缀
前缀就是各大浏览器厂商内核所代表的前缀,前缀主要用来测试w3c新出的一些特性,如果该特性被广泛使用时,则浏览器各大厂商新版本中可能就不需要加入前缀了!
| 前缀 | 描述 | 浏览器 |
|---|---|---|
-webkit- |
chrome / safari / edge |
谷歌 和 mac浏览器 |
-moz- |
Firefox |
火狐 |
-o- |
Opera |
Opera 旧 |
-ms- |
MicroSoft |
微软浏览器 ie 旧 |
can i use以上链接可以查询某些属性的兼容性,是否需要加前缀的一个网址!
新增的长度单位
| 单位 | 描述 |
|---|---|
rem |
相对单位,相对于根元素html的字体大小的倍数! |
vw |
相对单位,相对于视口的宽度,20vw 相当于视口宽度的百分之20的宽度; |
vh |
相对单位,相对于视口的高度,20vh 相当于视口高度的百分之20的高度; |
新增的颜色设置
| 设置函数 | 使用方式 | 描述 |
|---|---|---|
rgba() |
rgba(0,0,0,0.5) |
红,绿,蓝,透明度0-1! |
hsl() |
hsl(120, 100%, 50%) |
色相,饱和度,明亮度! |
hsla() |
hsl(120, 100%, 50%,) |
色相,饱和度,明亮度,透明度! |
色相就是颜色值,会在一个颜色圆盘上以度数为取值范围。0 - 360°为红色!
新增的盒子属性
| 属性 | 描述 | 可选值 |
|---|---|---|
box-sizing |
设置盒模型的计算方式 |
默认content-box(内容盒) boder-box(边框盒) padding-box(填充盒) |
resize |
可以通过鼠标拖动来调整盒子大小 |
both(水平和垂直都可以) horizontal(仅水平) vertical(仅垂直) none!需要配合overflow属性! |
box-shadow |
设置盒子阴影 |
水平,垂直,阴影模糊程度,阴影颜色,inset内阴影; |
opacity |
设置元素透明度 |
0(完全透明) - 1(完全显示)! |
opacity与rgba
opacity:设置整个元素的不透明度!
rgba:设置颜色的不透明度!
新增的背景属性
background-origin: 设置背景图的原点位置,默认盒子内部以左上角padding-box点开始计算!padding-box: 设置图片原点位置为填充盒作为起点位置!content-box: 设置图片原点位置为内容盒作为起点位置!border-box: 设置图片原点位置为边框盒作为起点位置!
background-clip: 图片裁剪不仅会
裁剪背景图片,并且对背景颜色也会裁剪!padding-box: 超出内边距外的图片会被裁剪掉!content-box: 超出内容外的图片会被裁剪掉!border-box: 超出边框外的图片会被裁剪掉!text: 设置图片作为文字背景! 前提文字颜色需要设置为透明颜色``transparent,其次需要加入前缀!-webkit-background-clip: text;
background-size: 设置图片背景大小!/* 使用 固定长度 设置图片宽高,不允许负值! */ background-size: 100px 100px; /* 使用 百分比 长度设置图片宽高,不允许负值! */ background-size: 100px 100px; /* 使用 contain 属性值,使图片等比例缩放,并在包含块儿内完全呈现,空间不足的地方,会使用repeat属性来重铺图片! */ background-size: contain /* 使用 cover 属性值,使图片等比例缩放,直到图片的宽高比例正好填满包含块儿为止! */ background-size: cover;背景的复合属性: 复合属性,就是将上述相关背景属性,组合在一起的一种写法!background:背景颜色url(./x.png)是否重复背景位置 / 背景大小原点裁剪方式!background: #f00 url('./x.png') no-repeat 50px 50px / cover padding-box content-box;size的值必须写在position后面并且中间必须用 /;
多背景设置:background: url("./x.png") no-repeat, url("./c.png") no-repeat, url("./v.png") no-repeatbackground-attachment: 决定背景图像的位置是在视口内固定,或者随着包含它的区块滚动。fixed: 此关键属性值表示背景相对于视口固定。即使一个元素拥有滚动机制,背景也不会随着元素的内容滚动。local: 此关键属性值表示背景相对于元素的内容固定。如果一个元素拥有滚动机制,背景将会随着元素的内容滚动,并且背景的绘制区域和定位区域是相对于可滚动的区域而不是包含他们的边框。scroll: 此关键属性值表示背景相对于元素本身固定,而不是随着它的内容滚动(对元素边框是有效的)。
新增的边框属性
border-radius: 边框圆角!border-radius: 50%; /* 设置包含块宽高的一半,如果包含块为正方形,则最后显示为圆形! */ /* 左上 右上 右下 左下 */ border-radius: 10px 10px 10px 10px;outline: 外轮廓!外轮廓
不占位!outline-width: 20px; outline-color: #ff0; outline-style: solid; outline-offset: 30px; /* 偏移量 是独立的属性 不是outline的子属性,不能作为复合属性! */ outline: 20px solid #ff0;
新增的文本属性
| 属性 | 使用 | 描述 |
|---|---|---|
text-shadow |
text-shadow: 0px, 0px, 10px, #ff0; |
文本阴影,与盒子阴影用法类似! |
white-space |
white-space: nowrap; |
文本换行方式,此处为不换行! |
text-overflow |
text-overflow: ellipsis; |
文本内容溢出显示方式,此处超出文本显示为省略号! |
text-stroke |
-webkit-text-stroke: 2px red; |
文本描边! |
text-overflow 使用时。前提必须设置元素 overflow 的值不为 visbile!div{ overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } /* 超出的文本内容显示省略号 */
- 文本修饰:
text-decoration:line || style || color;
- 子属性:
text-decoration-line:undeline: 下划线overline: 上划线line-throuth: 贯穿线none
text-decoration-style:solid: 实线double: 双线datted: 点状线dashed: 虚线wavy: 波浪线
text-decoration-color:
新增渐变属性
渐变的本质上也属于背景图片!
线性渐变
线性渐变使用linear-gradient()函数来实现!
设置渐变,默认
从上到下的位置进行过度!background-image: linear-gradient(red, yellow, blue);设置渐变,使用
关键字来指定渐变过度的方向!- 渐变
从左到右进行过度!
background-image: linear-gradient(to right, red, yellow, blue); background-image: linear-gradient(to right top, red, yellow, blue); background-image: linear-gradient(to left top, red, yellow, blue);- 渐变
设置渐变,使用
角度单位,来指定渐变过度方向!background-image: linear-gradient(20deg, red, yellow, blue);设置渐变,给每一层颜色设置
过度范围,例如红色从 0 - 100 这个范围显示红色!background-image: linear-gradient(20deg, red 20px, yellow 50px, blue 80px);
径向渐变
径向渐变使用radial-gradient()函数来实现,表现方式,颜色由中间向四处散射!
设置渐变,默认从圆心四散!(不一定为正圆,看元素的宽度和高度是否为正方形!)
background-image: radial-gradient(red,yellow,blue);设置渐变,通过
关键字来调整,圆心径向点的位置!background-image: radial-gradient(at right top, red, yellow, blue); background-image: radial-gradient(at left bottom, red, yellow, blue);设置渐变,通过
像素值来调整圆心径向点位置!background-image: radial-gradient(at 100px 50px, red, yellow, blue); /* 50px 20px 设置半径大小 at 100px 50px 设置圆心点的位置*/ background-image: radial-gradient(50px 20px at 100px 50px, red, yellow, blue);设置渐变,在元素宽高
不为正方形时,则圆心显示不为正圆,调整正圆,可以使用关键字(circle),或者像素值调整!background-image: radial-gradient(circle, red, yellow, blue); /* 100px 100px 设置半径大小 */ background-image: radial-gradient(100px 100px, red, yellow, blue);设置渐变,调整每一个
颜色的范围大小!background-image: radial-gradient(red 50px, yellow 80px, blue 120px);
重复渐变
repeating-linear-gradient和repeating-radial-gradient可以帮我们实现重复渐变,
重复渐变只有,设置颜色范围区域时,并且某区域的颜色值,没有过度颜色时,才会生效!

案例
稿纸
.box1{
width: 400px;
height: 600px;
padding: 20px;
border: 1px solid #000;
margin: 0 auto;
background-clip: padding-box;
background-image: repeating-linear-gradient(transparent 0px, transparent 29px, gray 30px);
}
实体球
.box2{
width: 200px;
height: 200px;
border-radius: 50%;
background-image: radial-gradient(at 80px 80px, white, gray);
}
web字体和字体图标
web字体
在
css中使用字体是通过font-family属性来设置的,该属性设置的字体前提必须在本地电脑上有安装相关字体才可以使用,如果
其他用户在使用网站时,且没有安装类似字体,则就会无法正常显示,那么就需要使用web字体来处理该问题!
以上链接是用来自定义字体的,可以针对某类文字来定制字体格式
@font-face {
font-family: "iconfont";
src: url("./font/xxx.ttf");
}
font-face是用来引入自定义字体的,font-family是字体使用的名称,src则是引入字体的路径!
定制字体有个好处,就是只需要关注部分字体需要格式即可,通常比较全面的字体文件,其文件大小都是比较大的,对页面加载影响还是比较吃不消的!
阿里
在线定制字体后,下载到本地,在demo.html文件中打开,会有使用案例!@font-face { font-family: 'webfont'; 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, iOS 4.2+*/ url('webfont.svg#webfont') format('svg'); /* iOS 4.1- */ }每个
浏览器对字体文件格式识别不一致,所以ttf woff等后缀格式都是用来兼容对应各大浏览器的!
然后通过
font-family属性直接引入即可font-family: 'webfont'
字体图标
以字体的形式显示的小型图标,放大不失真,不会影响清晰度!
以上链接,可以
下载想要的字体图标,下载后可以根据demo.html来查看具体如何使用!
2D变换
变换,就是对元素的移动,扭曲,旋转,缩放等一系列操作!
transform变换属性,根据这个属性可以实现2d和3d等一系列有关变换的操作!
transform只能针对块级元素使用,行内元素无效!
| 函数 | 描述 | 使用 |
|---|---|---|
translate() |
位移 |
translate(x, y),可以是像素值,也可以是百分比! |
rotate() |
旋转 |
rotate(30deg),接受一个度数数值! |
scale() |
缩放 |
scale(1), 1 为默认值,大于1 则放大,小于1 则缩小,等于0时,该元素被隐藏,可接受负值! |
位移
translate() css函数,配合transform可以实现元素的位移!
水平方向上位移元素,也就是x轴!
translateX(): 可以接受像素值,或者是百分比,也可以是负值!/* 向右偏移50像素 */ transform: translateX(50px); /* 向左偏移50像素 需要给负值*/ transform: translateX(-50px);
垂直方向上位移元素,也就是y轴!
translateY(): 可以接受像素值,或者是百分比,也可以是负值!/* 向 下 偏移50像素 */ transform: translateY(50px); /* 向 上 偏移50像素 需要给负值*/ transform: translateY(-50px);
水平 和 垂直方向同时位移!
translate(): 接受两个值,第一个为水平(x),第二个值为垂直(y)
/* 向 右下 进行偏移 */ transform: translate(50px, 50px);
1. 位移与相对定位类似,都不会脱离文档流,同时也不会影响其他元素!
2. 位移效率比定位来说,位移的效率更高!
3. 位移:不会改变元素在文档流中的位置,而是通过GPU加速来移动元素。这使得它在视觉上看起来像是元素被移动了,但实际上元素在文档流中的位置没有变化。
4. 定位:会改变元素在文档流中的位置来实现移动。relative定位会保持元素在文档流中的空间,而absolute和fixed会将元素从文档流中移除。
5. 定位通常会出发重绘与重排,对性能方面是有影响的!
配合绝对定位实现居中效果
.parent{
width: 200px;
height: 200px;
background-color: #ff0;
position: relative;
}
.sub{
width: 50px;
height: 50px;
background-color: #f00;
position: absolute;
top: 50%;
left: 50%;
/* -50% 相对于 parent 宽高度的一半 */
transform: tranlate(-50%, -50%);
}缩放
通过
scale()函数可以实现缩放效果!
当值为1代表不缩放,且默认,小于1缩小,大于1则放大,可以为小数点!
| 缩放函数 | 描述 |
|---|---|
scale() |
对元素整体缩放 |
scaleX() |
水平方向缩放 |
scaleY() |
垂直方向缩放 |
借助缩放可以实现小于12px字体大小,在常规浏览器中,且支持最小字体为12px!
t旋转
通过
rotate()函数可以实现旋转效果!
transform: rotate(30deg); /* 沿着元素中心点 顺时针旋转30° */倾斜
通过
skew()函数可以实现倾斜效果! 对应的还有skewX()以及skewY();
transform: skew(30deg, 30deg); /* x y 方向倾斜角度 */多重变换
多重变换,就是将位移 旋转 缩放组合一起使用!
transform: scale(1.2) translate(10px, 10px); /* 放大 0.2倍 然后 x位移10px y位移10px */transform: rotate(30deg) translate(10px, 10px); /* 旋转 30° 然后 x位移10px y位移10px */旋转
rotate会改变元素的坐标值,影响位移的位置!位移时,会沿着
x和y的方向进行位移!
注意: 最好
将破坏性的值(rotate)放到后面表示,破坏性会破坏 坐标轴的表示,影响其它属性效果展示!transform: translate(10px, 10px) rotate(30deg); /* 旋转 30° 然后 x位移10px y位移10px */
变换原点
变换原点,就是改变变换的中心点,如rotate旋转时,会默认元素中心点进行旋转,但是我们可以控制原点的位置,不在绕着中心点旋转!
变换对 rotate 旋转 和 scale是有影响的!
rotate会沿着原点进行旋转,而scale 放大和缩小都会随着原点过去!

transform-origin: left top; /* 中心点改为 左上角 */使用
像素值 和 百分比来控制原点位置!
transform-origin: 50px 50px; /* x 50px y 50px */
transform-origin: 25% 25%; /* x 25% y 25% */
如果
origin只有一个值的时候,比如left,原点则会选择左侧 y 轴的中心点来作为原点!transform-origin: left;

3D变换

3D景深
在使用
3D变换前,需要了解下3D景深,只有开启景深效果后,才能对3D变换有明显的变化!
1. transform-style设置变换风格 开启3d空间,有两个参考值一种是,flat(扁平的2维)还有一种是preserve-3d(以3d的空间形式保持)!
2. perspective设置透视效果,近大远小,值可为像素值,值越小就越离着近! 不能为负值,需要给父元素添加!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>3d变换</title>
<style>
.parent{
width: 200px;
height: 200px;
margin: 15px auto;
border: 2px solid black;
transform-style: preserve-3d;
perspective: 60px;
}
.sub{
width: 200px;
height: 200px;
background-color: aquamarine;
transform: rotateX(30deg);
}
</style>
</head>
<body>
<div class="parent">
<div class="sub"></div>
</div>
</body>
</html>
透视点的位置
透视点,就是我们所观察的地方,默认是父元素(开启3d空间的元素)交叉的中心点,我们可以通过perspective-origin属性来设置透视点的位置!
perspective-origin: 100px 100px; /* x 和 y */
x和y方向各自偏移100像素!
通俗的说,就是靠右边蹲下进行观察!
位移
translate()
3d 位移就是在2d的基础上,在z轴上进行位移!
| 参考值 | 描述 |
|---|---|
translate3d() |
分别有三个参数,第一个为 x 轴,第二个为 y 轴, 第三个为 z 轴! |
translateZ() |
设置z轴的移动长度,正值屏幕外延伸,负值屏幕里延伸,不能写百分比,只能写像素值! |
transform: translateZ(100px);旋转
rotate()
| 参考值 | 描述 |
|---|---|
rotateX() |
x轴方向旋转,正值顺时针旋转,负值逆时针旋转! |
rotateY() |
y轴方向旋转,正值顺时针旋转,负值逆时针旋转! |
rotate3d() |
有四个值,x, y, z, 角度, xyz三个值为0和1,0为不旋转,1为旋转,第四个值,为旋转的角度,30deg! |
transform: rotate3d(1,1,1, 30deg); x y z 同时旋转 30deg缩放
| 参考值 | 描述 |
|---|---|
scaleZ() |
沿着z轴进行缩放! |
scale3d() |
有三个参数,x, y, z! |
过度
过度,就是一个元素特性在变化的逐渐过程! 比如元素的宽度或者高度在从原始值变化为新的值时,一个变化通过时间描述的过程!
transition 该属性可以帮我们完成过度效果!
注意: 只有
属性值带有数字特性的属性值,都可以过度,或者是可以转换为数值的属性也具有过度的特性!
backgrond-color: yellow;也可以过度,原因是该颜色值可以转换为特有的数值(16进制)来表达,因此具有过度因素!
基本属性
transition-property:- 描述一个可以过度的属性
可选值:all代表所有可以过度的属性!- 可以
选择性将部分可过度属性来作为值!
/* all 代表所有具有过度特性的属性 */ transition-property: all; /* 选择性可过度属性作为值来填写,以下内容 宽度 高度 透明度三个值才会发生过度效果! */ transition-property: width, height, opacity;transition-duration:- 描述
过度的时间,单位ms(毫秒)或者s(秒)!
transition-duration: 1s; /* 过度时间 1秒 */- 描述
高级使用
transition-delay: 设置动画延迟时间!- 单位为
毫秒(ms)和秒(s);
transition-delay: 1s; /* 延迟 1 秒执行*/- 单位为
transition-timing-function: 设置动画运行速度方式!- 默认的方式就是
ease(平滑运动) linear(匀速运动 运动度不会变化)ease-in(慢 快)ease-out(快 慢)ease-in-out( 慢 快 慢)steps(10, end/start) 设置步长,分成10等分儿运行!cubic-bezier() 贝塞尔曲线函数
- 默认的方式就是
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>过度</title>
<style>
.parent{
width: 90vw;
border: 1px solid #000;
}
.parent:hover .box{
width: 90vw;
}
.box{
width: 200px;
height: 100px;
text-align: center;
padding-top: 15px;
/* line-height: 1; */
font-size: 16px;
color: #fff;
font-weight: bold;
transition-property: all;
transition-duration: 1s;
/* 延迟 1 秒钟后执行过度*/
/* transition-delay: 1s; */
}
.box1{
background-color: #f00;
transition-timing-function: ease;
}
.box2{
background-color: #0f0;
transition-timing-function: linear;
}
.box3{
background-color: #00f;
transition-timing-function: ease-in;
}
.box4{
background-color: #fed;
transition-timing-function: ease-out;
}
.box5{
background-color: #f0f;
transition-timing-function: ease-in-out;
}
.box6{
background-color: #0ff;
transition-timing-function: steps(10, end);
}
.box7{
background-color: #f00;
transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
</style>
</head>
<body>
<div class="parent">
<div class="box box1">ease(默认效果 平滑过度 慢 快 慢)</div>
<div class="box box2">linear( 匀速 速度保持不变 )</div>
<div class="box box3">ease-in( 慢 快 )</div>
<div class="box box4">ease-out( 快 慢 )</div>
<div class="box box5">ease-in-out( 慢 快 慢 )</div>
<div class="box box6">steps(10) 步长函数</div>
<div class="box box7">cubic-bezier() 贝塞尔曲线函数</div>
</div>
</body>
</html>复合属性
复合属性,就是将以上属性组合在一起使用,顺序如下,只需要关注延迟时长和动画执行时长顺序即可!
transition-duration: 过度的持续时间!transition-property: 过度的属性值!transition-delay: 过度的延迟时间!transition-timing-function: 过度的方式!
transition: 1s height .5s linear; /* 持续时间 过度的属性 延迟的时间 过度的方式*/动画
1. 帧: 动画是一系列帧数的集合,人的视觉观察到的动画流畅度,一般为1秒钟24帧,则帧数越高且越流畅!
2. 关键帧: 关键帧就是动画中帧数的关键的部分!
基本属性
| 属性 | 描述 |
|---|---|
animation-name: |
动画关键帧的名称,配合 @keyframes 语法使用! |
animation-duration: |
动画运行的持续时间! |
animation-delay: |
动画运行的延迟时间! |
animation-timing-function: |
动画运行的方式,与 transition-timing-function 属性一样! |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>动画</title>
<style>
.parent{
width: 1000px;
height: 100px;
border: 1px solid #000;
}
.sub{
width: 100px;
height: 100px;
background-color: cadetblue;
/* 动画的名称 */
animation-name: move;
/* 动画的运行时长 */
animation-duration: 1s;
/* 动画的延迟时间 */
animation-delay: .6s;
}
@keyframes move{
from{
transform: translateX(0);
}
to{
transform: translateX(899px) rotate(45deg);
background-color: palevioletred;
border-radius: 50%;
}
}
</style>
</head>
<body>
<div class="parent">
<div class="sub"></div>
</div>
</body>
</html>关键帧
@keyframes用来定义一组关键帧,语法@keyframes name { ... },配合animation-name使用!
关键帧的名称不能重复,且唯一!
from...to方式
@keyframes move{
from{
transform: translateX(0);
}
to{
transform: translateX(899px) rotate(45deg);
background-color: palevioletred;
border-radius: 50%;
}
}百分比方式
@keyframes move{
0%{
transform: translateX(0);
}
50%{
...
}
100%{
transform: translateX(899px) rotate(45deg);
background-color: palevioletred;
border-radius: 50%;
}
}
move是@keyframes定义的关键帧名称!
animation-name: move;
其他属性
| 属性 | 描述 | 可选值 |
|---|---|---|
animation-iteration-count |
动画的执行次数 |
number/infinte(无限) |
animation-direction |
动画的执行方向 |
normal / reverse / alternate / alternate-reverse |
animation-fill-mode |
动画执行结果 |
forwards / backwards / both |
animation-play-state |
动画的播放状态 |
running / paused |
1. animation-direction
动画运行的方向,默认从0% - 100%,可以通过reverse属性值来进行动画反转!
alternate 该属性是对动画进行一个交替运行,反复运动!
2. animation-fill-mode
动画执行完毕时的一个状态,比如动画执行完毕后,停留在最后一帧的位置!
1. forwards 动画运行结束后 停留在最后一帧!
2. backwards 动画开始运行时
反复运动的情况下,使用无效,该属性只有处理在运行结束后的一个状态!

复合属性
将以上
多种动画属性组合一起使用, 使用顺序如下!
/* 动画名称 duration delay 运行的方式, 动画执行次数, 运行的方向, 执行结束动画后的状态, 播放状态 */
animation: animation-name 1s .5s linear infinte reverse forwards play;以上属性只有
duration和delay有先后顺序之外,其他属性可随便写!如果
只有一个时间表示时,则这个时间表示duration!
动画和过度区别
transiton: 过度动画需要触发条件,需要 hover 或者 click 等触发后,才能产生过度动画!
animation: 动画不需要出发条件,会自动出发动画运行效果! 而且 动画 可以通过关键帧来实现精确帧数控制动画运行的效果!
多列布局 column
一般实现报纸类的布局!
常用的属性
| 属性 | 可选值 | 描述 |
|---|---|---|
column-count |
number |
指定列数,值为数字 |
column-width |
像素值 |
指定列的宽度,通过列的宽度来计算多少列! |
columns |
两个值,列数,列宽 |
复合属性! |
column-gap |
像素值 |
设置列之间的间隙! |
column-span |
none / all |
是否跨列,默认为 none, all则跨列全部! |
列边框属性
| 属性 | 可选值 | 描述 |
|---|---|---|
column-rule-width |
像素值 |
边框的width |
column-rule-style |
solid / dashed / datted |
边框的样式,虚线,点线,实线! |
columns-rule-color |
颜色值 |
边框的颜色 |
column-rule |
1px solid red |
复合属性! |
案例
文章案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>column</title>
<style>
.container{
width: 1000px;
border: 1px solid black;
padding: 10px;
column-count: 3;
column-rule: 2px dashed red;
column-gap: 20px;
}
.container h1{
column-span: all;
text-align: center;
}
</style>
</head>
<body>
<div class="container">
<h1>Column</h1>
<p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptate ut voluptatibus quia a facilis nostrum deleniti iure? Quis tempore laborum ut, error sit reiciendis deleniti ullam qui atque unde cum?</p>
<p>Ex culpa voluptate quia enim harum expedita voluptatibus nemo illum saepe illo! Laudantium eveniet reprehenderit distinctio! Atque, aperiam repudiandae libero provident repellat ab omnis quos quas non veniam quisquam mollitia.</p>
<p>Beatae sint voluptatibus libero facere! Minima, quam quos voluptas nihil eligendi quibusdam perspiciatis possimus quaerat inventore repudiandae cupiditate tenetur cum repellat aspernatur quia velit distinctio, voluptates blanditiis natus voluptate magni!</p>
<p>Vitae illum minima quod deleniti maiores beatae alias dolores! Iusto aliquam nostrum, veniam quidem ut quae, quaerat aliquid vero excepturi error sed fugiat, a odit quas sapiente voluptatum illum quia.</p>
<p>Perferendis magnam nostrum, neque fugiat dolor aliquam placeat eligendi optio, porro modi maiores voluptas beatae animi officia id assumenda et officiis earum ipsam saepe! Quis beatae tenetur rerum nostrum. Aliquid!</p>
</div>
</body>
</html>图片多列布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>column</title>
<style>
.outer{
column-count: 5;
}
img{
width: 100%;
}
</style>
</head>
<body>
<div class="outer">
<img src="../images/img1.jpg" alt="image">
<img src="../images/img2.jpg" alt="image">
<img src="../images/img3.jpg" alt="image">
<img src="../images/img4.jpg" alt="image">
<img src="../images/img5.jpg" alt="image">
<img src="../images/img6.jpg" alt="image">
<img src="../images/img7.jpg" alt="image">
<img src="../images/img8.jpg" alt="image">
<img src="../images/img9.jpg" alt="image">
<img src="../images/img10.jpg" alt="image">
</div>
</body>
</html>伸缩盒模型
伸缩容器
如果某一个元素
开启了 flex 或者是 inline-flex 属性,那么该元素被称为伸缩容器!display: flex; /* inline-flex */
伸缩项目
伸缩容器里的,子项都可称为,伸缩项目,只有子集的元素才会是伸缩项目,孙子或者是祖孙级的项目不在是伸缩项目!无论原来的盒子是
块级儿还是 行级,一旦成为了伸缩项目,都会变为块级!
<div class="parent">
<div class="sub"></div>
<div class="sub"></div>
<div class="sub"></div>
</div>.parent{
display: flex;
}
parent开启伸缩容器,其sub为伸缩项目!
主轴和侧轴
主轴:伸缩项目,默认是沿着主轴方向排列,从左到右(左边是起点,右边是终点)!
侧轴: 与主轴交叉,是垂直的,默认方向是从上倒下!
主轴方向
flex-direction: 可以修改主轴的方向,例如反转排列,从右到左排列方式,也可以从上倒下排列!
| 属性值 | 描述 |
|---|---|
row |
默认值,从左到右排列! |
row-reverse |
反转排列,从右到左排列! |
column |
从上倒下排列! |
column-reverse |
从下到上排列! |

主轴换行

主轴对齐方式
使用
justify-content可以实现主轴方向内容对齐方式!

以上是
可选值,以及对比效果!
侧轴对齐方式
注意:其中有一个
strech属性值是默认侧轴选项值,且会在侧轴上进行拉伸,若伸缩项目都有高度值的情况下,则该元素无法被拉伸,若想看到效果,各个伸缩项,就不要给高度就行!
align-items
仅适用
1 行的对齐方式使用
align-items可以实现1 行上的对齐方式!

align-content
适用
多行的对齐方式使用
align-content可以实现多行上的对齐方式!

居中方式
主轴+侧轴
.parent{
display: flex;
jusitify-content: center;
align-items: center;
}伸缩容器+margin
,parent{
display: flex;
}
,parent .sub{
margin: auto;
}flex-basis
flex-basis 是基准长度,主要给子集伸缩项设置,取值是像素值!
设置该值后,如果是row主轴方向,则宽度失效(基准长度会替代宽度),如果是侧轴方向,则高度失效(基准长度会替代高度)!
浏览器会根据这个值,来获取主轴方向的剩余空间,默认为auto(元素自身的宽高!);
伸缩性
flex-grow(拉伸)
定义伸缩项的 "放大" 比例,默认为0!即使主轴存在剩余空间,也不放大!
规则:
flex-grow: 1;则主轴方向的剩余空间,会对伸缩项进行平分!
伸缩项分别为1 , 2 , 3,则分别瓜分1/6 2/6 3/6, 6则是一行伸缩项元素的个数!
flex-shrink(收缩)
定义伸缩项的 "收缩" 比例,默认为1!如果空间不足,则伸缩项也会最多收缩到能够保持内容的呈现!


flex 复合属性

排序和单独对齐
排序:通过order属性实现,可选值可以为正值和负值,数值越小越靠前,默认为0,需要给子项设置该属性值!
单独对齐:通过align-self属性来实现,可选值为flex-start flex-end center!
响应式布局
响应式布局,就是在不同分辨率屏幕下展示最佳的页面布局!
媒体类型
媒体查询可以根据媒体类型来匹配当前屏幕情况,可以匹配打印界面,以及屏幕设备等信息!
| 类型 | 描述 |
|---|---|
all |
检测所有的设备。 |
screen |
检测屏幕设备 pc 手机 平板等。 |
print |
检测打印界面。 |
@media print{
/* 匹配 打印界面 并设置 css 样式 */
}@media screen{
/* 匹配 屏幕界面 并设置 css 样式 */
}媒体特性
媒体特性,根据指定宽高范围,来匹配视口的宽高,最终在不同视口下展示不同样式!
| 语法 | 描述 |
|---|---|
(width:800px) |
页面的视口 宽度 = 800px |
(max-width: 900px) |
页面视口 宽度 <= 900px |
(min-width: 700px) |
页面视口 宽度 >= 700px |
(height:800px) |
页面的视口 高度 = 800px |
(max-height: 900px) |
页面视口 高度 <= 900px |
(min-height: 700px) |
页面视口 高度 >= 700px |
(device-width: 1200) |
设备的宽度,电脑屏幕的 宽度 = 1200px |
(max-device-width: 1200) |
设备的宽度,电脑屏幕的 宽度 <= 1200px |
(min-device-width: 1200) |
设备的宽度,电脑屏幕的 宽度 >= 1200px |
orientation |
检测设备的方向 |
@media (max-width: 700px){
/* css 样式 视口宽度小于 700px */
}运算符
并且运算符
并且运算符使用and关键字来表示
@media (max-width: 1920px) and (min-width: 1024px){
/* 大于 1024 像素 小于 1920 像素 在 1024 和 1920像素区间 的样式生效*/
}也可以配合
媒体类型来使用
@media screen and (max-width: 1920px) and (min-width: 1024px){
/* 只有设备屏幕 才会生效 大于 1024 像素 小于 1920 像素 */
}这里
排除打印界面,只能设备屏幕才会生效!
或运算符
或运算符可以使用逗号间隔,也可以使用 or 关键字!
@media screen and (max-width: 1920px) , (min-width: 1024px){
/* 只有设备屏幕 才会生效 大于 1024 像素 小于 1920 像素 >=1024px <=1920px */
}使用
or关键字
@media screen and (max-width: 1920px) or (min-width: 1024px){
/* 只有设备屏幕 才会生效 大于 1024 像素 或者 小于 1920 像素 >=1024px <=1920px */
}否定运算符
否定运算符使用not关键字表示
@media not print{
/* 不是 打印界面 的样式生效 ! */
}肯定运算符
肯定运算符使用only关键字表示,作用不大,一般用来兼容 IE,因为IE 不支持媒体特性,使用only时,IE会忽略样式定义!
@media only screen and (max-width: 1920px){
}
and (max-width: 1920px)媒体特性ie 不支持,only ie匹配时 无法正常匹配,所以内部样式会被忽略!
案例
| 媒体阈值 | 描述 |
|---|---|
screen and (max-width: 768px) |
小屏幕,小于768像素! |
screen and (min-width: 768px) and (max-wdith: 1024px) |
中等屏幕 768px ~ 1042px |
screen and (min-width: 1024px) and (max-width: 1280px) |
大屏幕 1024px ~ 1280px |
screen and (min-width: 1280px) |
超大屏幕 大于1280像素 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>媒体查询</title>
<style>
*{
margin: 0;
padding: 0;
}
.box{
width: 100%;
height: 200px;
text-align: center;
line-height: 200px;
font-weight: bold;
background-color: antiquewhite;
font-size: 24px;
}
.box span{
color: #00f;
}
/* 小屏幕 */
@media screen and (max-width: 768px){
.box{
background-color: aqua;
}
.box::after{
content: "小屏幕 768px 以下";
}
}
/* 中等屏幕 */
@media screen and (min-width: 768px) and (max-width: 1024px){
.box{
background-color: aquamarine;
}
.box::after{
content: "中等屏幕 768px ~ 1024px";
}
}
/* 大屏幕 */
@media screen and (min-width: 1024px) and (max-width: 1280px){
.box{
background-color: azure;
}
.box::after{
content: "大屏幕 1024px ~ 1280px";
}
}
/* 超大屏幕 */
@media screen and (min-width: 1280px){
.box{
background-color: bisque;
}
.box::after{
content: "超大屏幕 1280px 以上";
}
}
</style>
</head>
<body>
<div class="box">
<span>媒体查询: </span>
</div>
</body>
</html>在link标签内使用media
<link rel="stylesheet" media="screen and (min-width: 768px) and (max-width: 1024px)" href="style.css">
style.css 内就不用写 @meida 语法了,可以直接写 CSS样式!
监听系统级别主题
@media (prefers-color-scheme: light) {
/* 针对浅色主题的样式 */
}
@media (prefers-color-scheme: dark) {
/* 针对深色主题的样式 */
}注意
@media媒体查询中的样式,会因为层叠关系,样式被覆盖的问题,通常我们需要把@media媒体查询相关的样式,单独放入各自文件当中,并通过外联的形式放在其他样式表的下边,防止被其他样式表样式覆盖!
例如
index.css: 为我们主要的样式表!small.css:小屏幕的样式表!middle.css:中等屏幕的样式表!big.css:大屏幕的样式表!huge:超大屏幕的样式表!
然后通过
外联的形式分别引入样式表,@media样式表要放入index.css下放,防止样式覆盖问题!
BFC
BFC( block formatting context ) 块级格式上下文!根据特定属性可以激活BFC!
BFC 就是一个独立的区域,不受外界样式影响,通常可以解决常见样式问题!
常见的问题
1. margin 塌陷问题, 子元素使用 margin-top 时,会将 外边距 赋予父元素!
2. float 浮动问题,浮动开启后,元素会飘起来,并失去空间,则下放的元素,会占有失去的空间,因此被浮动元素给遮盖的问题!
3. float 浮动问题,则子元素开启浮动后,会失去空间,而没有高度的父元素,会失去子元素高度支撑的原因,出现父元素高度塌陷问题!
激活BFC的属性
| 属性 | 描述 |
|---|---|
overflow |
且值不为 visible,的元素会激活bfc! |
float |
浮动元素会激活bfc! |
absolute/fixed |
绝对定位 或 固定定位! |
display |
其值设置为 flow-root 或者 inline-block 或者是 flex table! |
column-span |
其值为 all 的元素! |
影响最小,且激活BFC的属性,可以使用display: flow-root;
flow-root: 该元素生成一个块级元素盒,其会建立一个新的区块格式化上下文,定义格式化上下文的根元素。
不过该属性 ie系列 不支持!


