css3 3D转换
1、3D转换基础
1、三维变换呢是基于二维变换的相同属性,主要包括以下几种功能函数:3D位移、3D旋转、3D缩放、3D矩阵
2、3D就是物体在2D平面呈现的例子
3、3D的特点:近大远小,物体后面遮挡后不可见
4、三维坐标系:就是指立体空间,立体空间是由三个轴共同组成的。
5、x轴:水平向右
y轴:垂直向下
z轴:垂直屏幕,外面是正值,里面是负值
6、透视,也叫作景深,景深属性,表现为远小近大 100px~1200px(在其中参数选择整百的进行调整,建议为1200px,效果比较的好)。1.可以在父级元素上添加 perspective:1200px(会为旋转的属性提供一部分远大近小的效果)
2.可以在子级元素上添加transform:perspective(1200px) (因为一般都是需要旋转属性的,所以如果添加在子级元素的上的话会造成属性覆盖 所以推荐在父级添加)
div{
width: 200px;
height: 200px;
border: 1px solid black;
perspective:200px;
}
img{
width: 200px;
height: 200px;
border: 1px solid black;
/* 绕着x轴旋转 */
transform: rotateZ(45deg)
}
2、3D位移
1、旋转:
写法:设置景深,数值越小,透视效果越好
/* 绕着x轴旋转 */
transform: rotateX(45deg)
/* 绕着y轴旋转 */
transform: rotateY(45deg)
/* 绕着y轴旋转 */
transform: rotateZ(45deg)
/* rotate3d:绕着3个轴线旋转 */
transform: rotate3d(1,2,3,45deg);
/* 对角线旋转 */
transform: rotate3d(1,1,0,45deg);
2、Z轴是指出屏幕,指向我们的一个轴,所以绕Z轴旋转和rotate没有区别。都是屏幕旋转
3、移动:
/* 绕X轴位移 */
transform: translateX(100px);
/* 绕Y轴位移 */
transform: translateY(100px);
/* 绕Z轴位移 */
transform: translateZ(100px);
注意:位移不是沿着水平面在移动,而是沿着当前的轴线移动
/* 改变轴线的位置 */
transform: rotateY(45deg) translateX(50px);
/* 3D移动,表示分别要移动的轴的方向的距离 */
transform: translate3d(x,y,z);
transform: translate3d(100px,100px,100px);
4、3D移动:3D移动在2D移动的基础上多加了一个可以移动的方向,就是z轴方向
/* 3D移动,表示分别要移动的轴的方向的距离 */
/* x,y,z不能进行省略,可以设置为0 */
/* transform: translate3d(x,y,z); */
transform: translate3d(100px,100px,100px);
5、注意:transform会进行覆盖,
6、透视:perspective:在2D平面产生近大远小视觉立体,但是只是效果是2维的,如果想要在网页上面产生 3D效果需要透视,模拟人类的视觉位置,可以理解为视距,就是人的眼睛到屏幕的距离,距离视觉点 越近的在电脑平面成像越大,越远成像越小。透视写在被观察元素的父盒子上面,单位是px
7、transform-style:控制子元素是否开启三维立体环境,flat默认是不开启3d立体空间。preserve-3d
子元素开启立体空间,在父盒子设置
/* 让子元素保持3d立体环境,父盒子设置,重要 */
transform-style: preserve-3d;
8、 backface-visibility:
/* 决定元素旋转背面是否可见 */
backface-visibility: hidden;
3、翻转图片代码.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>
div {
position: relative;
width: 200px;
height: 200px;
margin: 0 auto;
transition: all 0.3s;
perspective: 200px;
border-radius: 50%;
transform-style: preserve-3d;
}
img {
width: 200px;
height: 200px;
position: absolute;
top: 0;
left: 0;
/* 决定元素旋转背面是否课件 */
backface-visibility: hidden;
}
img:first-child {
z-index: 1;
}
img:last-child {
transform: rotateY(180deg);
}
div:hover {
transform: rotateY(180deg);
}
</style>
</head>
<body>
<div>
<img src="../img/dog.jpg" alt="">
<img src="../img/爱心2.png" alt="">
</div>
</body>
</html>
4、transform-style立体代码
<!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>transform-style</title>
<style>
nav {
position: relative;
width: 200px;
height: 200px;
margin: 0 auto;
perspective: 300px;
transition: all 2s;
transform-style: preserve-3d;
}
div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: red;
}
nav div:last-child {
background-color: blue;
transform: rotateX(80deg);
}
nav:hover{
transform: rotateY(60deg);
}
</style>
</head>
<body>
<nav>
<div></div>
<div></div>
</nav>
</body>
</html>