前端学习——CSS3_3D转换效果
-
三维坐标系
- x 轴:水平向右 – 注意:x 轴右边是正值,左边是负值
- y 轴:垂直向下 – 注意:y 轴下面是正值,上面是负值
- z 轴:垂直屏幕 – 注意:往外边的是正值,往里面的是负值
-
3D转换知识要点
- 3D位移:
translate3d(x, y, z)
- 3D 旋转:
rotate3d(x, y, z)
- 透视:
perspctive
- 3D呈现
transfrom-style
- 3D位移:
-
3D移动 translate3d
- 3D移动就是在2D移动的基础上多加了一个可以移动的方向,就是 z 轴方向
transform: translateX(100px)
:仅仅是在 x 轴上移动transform: translateY(100px)
:仅仅是在 y 轴上移动transform: translateZ(100px)
:仅仅是在 z 轴上移动transform: translate3d(x, y, z)
:其中x、y、z 分别指要移动的轴的方向的距离- 注意:x, y, z 对应的值不能省略,不需要填写用 0 进行填充
-
语法
transform: translate3d(x, y, z)
-
代码演示
transform: translate3d(100px, 100px, 100px) /* 注意:x, y, z 对应的值不能省略,不需要填写用 0 进行填充 */ transform: translate3d(100px, 100px, 0)
一、视距(透视) perspective
-
知识点讲解
- 如果想要网页产生
3D
效果需要透视(3d眼镜) - 透视也称为视距,所谓的视距就是人的眼睛到屏幕的距离
- 透视的单位是像素
- 如果想要网页产生
-
知识要点
- 透视需要写在被视察元素的父盒子上面
-
代码演示(值越小及视距越近 物体越大)
body { perspective: 1000px; }
二、 translateZ
- translateZ与perspecitve的区别
- perspecitve给父级进行设置,translateZ给 子元素进行设置不同的大小
三、3D旋转rotate
3D 旋转指可以让元素在三维平面内沿着 x 轴、y 轴、z 轴 或者自定义轴进行旋转
- 语法
transform: rotateX(45deg)
– 沿着 x 轴正方向旋转 45 度transform: rotateY(45deg)
– 沿着 y 轴正方向旋转 45 度transform: rotateZ(45deg)
– 沿着 z 轴正方向旋转 45 度transform: rotate3d(x, y, z, 45deg)
– 沿着自定义轴旋转 45 deg 为角度
代码案例
div {
perspective: 300px;
}
img {
display: block;
margin: 100px auto;
transition: all 1s;
}
img:hover {
transform: rotateX(-45deg)
}
四、3D呈现transform-style
- transform-style
- 控制子元素是否开启三维立体环境
transform-style: flat
代表子元素不开启3D 立体空间,默认的transform-style: preserve-3d
子元素开启立体空间- 代码写给父级,但是影响的是子盒子
代码实例实现双面盒子鼠标经过 翻转效果(实用)
.box{
position: relative;
width: 300px;
height: 300px;
margin: 100px auto;
/* 设置过渡 */
transition: all 1s;
/* 让背面盒子保持立体空间 在背面盒子的父系盒子做设置 */
transform-style: preserve-3d;
}
.front,
.back{
/* 绝对定位使得两个盒子可叠在一起 */
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 50%;
/* 设置中心以及行高使得文字居中显示 */
text-align: center;
line-height: 300px;
color: white;
}
.front{
/* 设置z-index使得在最顶端 */
background-color: pink;
z-index: 1;
}
.back{
background-color: black;
/* 对背面盒子沿着y轴旋转180度变成背面 */
/* 且在盒子的父系box上设置保留3d效果 */
transform: rotateY(180deg);
}
.box:hover{
/* 鼠标经过时沿着y轴翻面 */
transform: rotateY(180deg);
}
<div class="box">
<div class="front">
牛的牛的
</div>
<div class="back">
真有你的
</div>
</div>