CSS3核心技术
前言
- css3是CSS(层叠样式表)技术的升级版本
- css3功能更为强大,很多浏览器不支持css2.0,现在在css3中重新使用,并且能兼容css3样式
- css3与css使用语法基本一样
一、过渡
1.1认识过渡
- 过渡指的就是关系元素的初始状态和结束状态,没有方法可以获取元素在过渡中的每一帧状态
- 元素在初次渲染还没有结束的时候,是不可以触发过渡的
- 在大部分变换样式切换时,变换的组合的个数或位置不一样时,是不可以触发过渡的
2.2过渡的属性
- transition-property
指定过渡动画的属性(并不是所有的属性都可以动画)
语法:transition-property:none | all | property
属性值 | 描述 |
---|---|
none | 没有属性会获得过渡条件 |
all | 所有属性都会获得过渡效果 |
property | 定义应用过渡效果的CSS属性名称,多个名称之间用逗号隔开 |
- transition-duration
指定过渡动画的时间(0也要带单位)
语法:transition-duration:时间;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
html{
height: 100%;
}
#maxbox{
width: 60%;
height: 60%;
border: 1px solid rebeccapurple;
margin: 100px auto 0;
}
#box{
width: 200px;
height: 200px;
border-radius: 50%;
background-color: antiquewhite;
transition-property: background,width,height;
transition-duration: 1s,0s,1s;
margin: auto;
}
#box:hover{
width: 100px;
height: 100px;
background: #000;
}
</style>
</head>
<body>
<div id="maxbox">
<div id="box"></div>
</div>
</body>
</html>
效果图
transition-timing-function
**作用:**指定过渡动画的形式(贝塞尔)
属性值 | 描述 |
---|---|
linear | 以相同速度开始到结束的过渡效果 |
ease | 先慢后快 |
ease-in | 先快后慢 |
ease-out | 以慢速结束 |
ease–in-out | 以慢速开始和结束的过渡效果 |
cubic-bezier(n,n,n,n) | 定义用于加速或者减速的贝塞尔曲线的形状 |
- transition-delay
作用:规定过渡效果何时开始
语法:transition-delay:时间;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
html{
height: 100%;
}
#maxbox{
width: 60%;
height: 60%;
border: 1px solid rebeccapurple;
margin: 100px auto 0;
}
#box{
width: 200px;
height: 200px;
border-radius: 50%;
background-color: antiquewhite;
transition-property: width;
transition-duration: 2s;
transition-timing-function: linear;
transition-delay: 2s;
margin: auto;
}
#box:hover{
width: 100px;
height: 100px;
background: #000;
}
</style>
</head>
<body>
<div id="maxbox">
<div id="box"></div>
</div>
</body>
</html>
效果图
- transtionend 事件
在每个属性完成过渡时都会触发这个事件
二、变形
2.1 2D变形(transform)
rotate | 旋转 |
---|---|
translate | 平移 |
skew | 斜切 |
scale | 缩放 |
旋转测试
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
#box{
margin: 100px auto;
width: 200px;
height: 200px;
background: pink;
transition: 3s;
}
body:hover #box{
transform: rotate(360deg);
}
</style>
</head>
<body>
<div id="box">
bgyl
</div>
</body>
</html>
平移测试
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
#box{
margin: 100px auto;
width: 200px;
height: 200px;
background: pink;
transition: 3s;
}
body:hover #box{
transform: translateX(300px);
}
</style>
</head>
<body>
<div id="box">
bgyl
</div>
</body>
</html>
斜切测试
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
#box{
margin: 100px auto;
width: 200px;
height: 200px;
background: pink;
transition: 3s;
}
body:hover #box{
transform: skewY(-30deg);
}
</style>
</head>
<body>
<div id="box">
bgyl
</div>
</body>
</html>
缩放测试
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
#box{
margin: 100px auto;
width: 200px;
height: 200px;
background: pink;
transition: 3s;
}
body:hover #box{
transform: scale(.5);
}
</style>
</head>
<body>
<div id="box">
bgyl
</div>
</body>
</html>
- 基点变换
参数 | 描述 |
---|---|
x-axis | 定义视图被置于x轴的何处 |
y-axis | 定义视图被置于y轴的何处 |
z-axis | 定义视图被置于z轴的何处 |
2.2 3D变形
- 旋转
rotateX() | 围绕X轴旋转 |
---|---|
rotateY() | 围绕Y轴旋转 |
rotateZ() | 围绕Z轴旋转 |
rotate3d() | 同时设置三个轴 |
- prespective属性(景深)
理解:景深就是我们的肉眼距离显示器的距离
作用:构建3D舞台,决定用户的肉眼距离屏幕的水平距离!使3D变换的元素具有近大远小的感觉
灭点:
灭点指的是立体图形各条边的延伸线所产生的相交点,透视点的消失点
景深和灭点的关系
景深越大,灭点越远,元素变形越小
景深越小,灭点越近,元素变形越大
景深是一个不可继承属性,但他可以作用于所有的后代元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
#maxbox{
width: 100px;
height: 100px;
padding: 100px;
border: 1px solid #f00;
perspective: 100px;
}
#box{
width: 100px;
height: 100px;
background: pink;
transition: 1s;
}
body:hover #box{
transform: rotate3d(1,1,1,360deg);
}
</style>
</head>
<body>
<div id="maxbox">
<div id="box">
bgyl
</div>
</div>
</body>
</html>
- 其他方法属性
方法名称 | 描述 |
---|---|
translate3d(x,y,z) | 定义3d位移 |
translateX(x) | 定义3d位移,仅使用用于X轴的值 |
translateY(y) | 定义3d位移,仅使用用于Y轴的值 |
translateZ(z) | 定义3d位移,仅使用用于Z轴的值 |
scale3d(x,y,z) | 定义3d缩放 |
scaleX(x) | 定义3d缩放,通过给定一个X轴的值 |
scaleY(y) | 定义3d缩放,通过给定一个Y轴的值 |
scaleZ(z) | 定义3d缩放,通过给定一个Z轴的值 |
- transform-style
- 作用:构建3D舞台,使3d舞台有层次感
- transform-style是一个不可继承属性,他只作用于子元素
三、动画
3.1动画关键帧(@keyframes)
animation属性只有配合**@keyframes**才能实现动画效果
animationname:表示当前动画的名称
keyframes-selector:关键帧选择器
css-styles:定义执行到当前关键帧是对应的动画效果
语法:@keyframes animationname{
keyframes-selector(css-styles)
}
3.2 关键帧的名字(animation-name)
语法:animation-name:keyframes | none;
3.3 动画周期的时长(animation-duration)
语法:animation-duration: time;
3.4 animation-timing-function属性
作用:作用于一个关键帧周期而非整个动画周期
属性值 | 描述 |
---|---|
linear | 动画从头到尾速度相同 |
ease | 默认值,动画低速开始,然后加快,在结束前变慢 |
ease-in | 动画低速开始 |
ease-out | 动画低速结束 |
ease-in-out | 动画低速开始和结束 |
语法:animation-timing-function: value;
3.5循环关键帧的次数(animation-iteration-count)
语法:animation-iteration-count: number | infinite;
3.6 执行动画效果延迟的时间(animation-delay)
语法:animation-delay: time;
3.7动画播放的方向 (animation-direction)
改变关键帧的执行方向,还会影响animation-timing-function的形式
语法:animation-direction: normal | alternate;
4、媒体
4.1嵌入视频
<video src="视频文件路径" controls="controls"></video>
4.2嵌入音频
<audio src="视频文件路径" controls="controls"></audio>
4.3媒体属性
- List item width(可加max min前缀)
- height(可加max min前缀)
- device-width(可加max min前缀)
- device-pixel-ratio(可加maxmin前缀,需要加webkit前缀)
- orientation portrait竖屏 landscape横屏