一、平移
1.原理: 使用transform属性实现元素的位移、旋转、缩放等效果。
2.语法: transform: translate(水平移动距离, 垂直移动距离)。
3.取值: 1.像素单位数值; 2.百分比(参照物为盒子自身尺寸); 3.X轴正向为右,Y轴正向为下。
4.注意:
(1)translate()如果只给出一个值,代表在X轴方向移动;
(2)单独设置某个方向的移动距离:translateX() & translateY();
(3)位移移动的百分比是自己的大小,x轴是自己的宽,y轴是自己的高;
(4)位移在移动时不会影响其他的盒子,有类似相对定位的特点.
.box{
width: 200px;
height: 200px;
background-color: aqua;
/* 1.连写 */
transform: translate(200px,0px);
/* 2.空格写法 */
transform: translateX(100px) translateY(0);
/* 3.分开写 (注意css的覆盖问题,当如下情况分开写的时候,x轴默认为零)*/
transform: translateX(100px);
transform: translateY(100px);
}
二、旋转
1.原理: 使用rotate实现元素旋转效果。
2.语法: transform: rotate(deg);
(1)取值为正, 则顺时针旋转;
(2)取值为负, 则逆时针旋转;
3.注意:
(1)先位移后旋转,使用transform复合位移属性的时候要先位移再旋转,如果先旋转,会造成坐标轴发生改变;
(2)translate(-50%,-50%)实指再默认状态或者hover状态保持盒子居中
4.多重转换
原理:旋转会改变网页元素的坐标轴向,先写旋转,则后面的转换效果的轴向以旋转后的轴向为准,会影响转换结果。
使用transform-origin属性改变转换原点
1.语法: transform-origin: 原点水平位置 原点垂直位置;
2.取值:1.方位名词(left、top、right、bottom、center);2.像素单位数值;3.百分比(参照盒子自身尺寸计算)。
<!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>改变盒子的旋转中心</title>
<style>
.box{
width: 200px;
height: 200px;
background-color: pink;
margin: 200px auto;
transition: all 1s;
/* 改变盒子的旋转中心:transform-orign */
/* 方法一: */
transform-origin: left top;
/* 方法二: */
transform-origin: 200px 0px;
/* 方法三: */
transform-origin: 50% 0;
}
.box:hover{
transform: rotate(360deg);
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
三、缩放
1.原理: 使用scale属性改变元素的尺寸。
2.语法:
(1)transform: scale(x轴缩放倍数, y轴缩放倍数);一般情况下, 只为scale设置一个值, 表示x轴和y轴等比例缩放;
(2)transform: scale(缩放倍数);scale值大于1表示放大, scale值小于1表示缩小;
(3)transform: scale(1);1倍就是不变;
(4)transform: scale(0.5); 1倍以下是缩小;
(5)transform: scale(-0.5);负值:值小于-1是缩小,值大于-1是放大。
<!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>2d盒子的缩放效果</title>
<style>
.box{
width: 200px;
height: 200px;
background-color: pink;
margin: 200px auto;
/* 缩放语法:transform:scale(水平缩放,垂直缩放); 一般我们只取一个值,另一个等比例进行缩放,取值不带单位,代表缩放的倍数. */
/* transform: scale(2,1.5);
transition: all 1s; */
}
.box:hover{
/* 宽和高等比例缩放2倍 */
/* transform: scale(2); */
/* 1倍就是不变 */
transform: scale(1);
/* 1倍以下是缩小 */
/* transform: scale(0.5); */
/* 负值:值小于-1是缩小,值大于-1是放大 */
transform: scale(-0.5);
}
/* 需求1:如何在不改变宽高的情况下让盒子增大?
解决:内边距+边框
需求2:在不改变宽高情况下同时不设置盒子模型情况下让盒子增大?
解决:2d缩放(缩放可以取负值缩小,缩放的倍数为1时表示不变,1倍以下是缩小,1倍以上是放大) */
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
四、倾斜
1.原理: 使用skew属性改变元素的形状。
2.语法:
(1)2d倾斜语法:transform:skew(deg);skewX:水平倾斜; skewY:垂直倾斜;
(2)角度不能设置为90deg;
(3)向右倾斜取正值,向左倾斜取负值;
(4)2d推荐综合写法:位移 旋转 缩放 倾斜 ;
transform: translatex(100px) rotate(0.5turn) scale(1) skew(60deg);
<!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>盒子的倾斜</title>
<style>
.box{
width: 200px;
height: 200px;
background-color: pink;
margin: 200px auto;
/* 2d倾斜语法:transform:skew(deg)
角度不能设置为90deg
向右倾斜取正值,向左倾斜取负值
skewX:水平倾斜
skewY:垂直倾斜*/
transform: skew(6deg);
/* 2d推荐综合写法:位移 旋转 缩放 倾斜 */
transform: translatex(100px) rotate(0.5turn) scale(1) skew(60deg);
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
五、渐变
1.原理: 使用background-image属性实现渐变背景效果。渐变是多个颜色逐渐变化的视觉效果;一般用于设置盒子的背景。
2.注意:
(1)linear-gradient:线性渐变;
(2)radial-gradient:径向渐变;
3.常见写法
默认从上往下: background-image: linear-gradient(red, yellow);
从左到右: background-image: linear-gradient(to right, red, blue);
改变渐变色方向: background-image: linear-gradient(60deg, red, green);
常用 透明色,黑色半透明渐变色: background-image: linear-gradient(transparent,rgba(0,0,0,.5));
颜色的从内到外渐变: background-image: radial-gradient(pink, skyblue) ;
六、案例展示
1.双开门案例
<!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>双开门案例</title>
<style>
*{
margin: 0;
padding: 0;
}
.box{
width: 1366px;
height: 600px;
background: url(../03.素材/bg.jpg) no-repeat;
margin: 0 auto;
/* 溢出隐藏 */
overflow: hidden;
}
.box div{
width: 50%;
height: 100%;
/* 双开门移动的秒数 */
transition: all 1s;
}
.box .left{
float: left;
background: url(../03.素材/fm.jpg) no-repeat;
}
.box .right{
float: right;
background: url(../03.素材/fm.jpg) no-repeat right 0;
/* 选择右半边的图片 */
}
/* 添加双开门效果 */
.box:hover .left{
/* 位移的百分比是自己的大小 */
/* 向上移是负值 */
transform: translateY(-100%);
}
.box:hover .right{
/* 向下移动式正值 */
transform: translateY(100%);
}
</style>
</head>
<body>
<div class="box">
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
2.旋转案例
<!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>2d-旋转</title>
<style>
.box{
width: 200px;
height: 200px;
background-color: pink;
margin: 100px auto;
}
.box img{
/* 取一个值,另一个值会自适应 */
width: 100%;
/* 过渡时间 */
transition: all 1s;
}
.box:hover img{
/* 旋转的语法:transform:rotate;
顺时针旋转取正值,逆时针旋转取负值;
deg:度数; turn:圈数; */
transform: rotate(360deg);
transform: rotate(1turn);
}
</style>
</head>
<body>
<div class="box">
<img src="../03.素材/rotate.png" alt="">
</div>
</body>
</html>