css 中通过 transform 属性实现对元素进行移动、缩放、旋转等变换。IE10、Firefox 以及 Opera 支持 transform 属性。为了兼容 Chrome 和 Safari 需要添加前缀 -webkit- ,IE9 需要添加前缀 -ms-。transform 属性的属性值是一系列的转换函数。用法如下:
transform: transform-function1() transform-function2() …;
注意:转换不影响到其他元素的布局。
以上需要两个参数的变换函数如果只传入一个参数则默认第二个为 0,为了代码的可读性尽量使用单个参数的变换函数代替。缩放中值大于 1 表示放大,小于 1 表示缩小。
旋转的角度可正可负,方向判断可以借助我们的左手进行判断:左手拇指指向坐标轴方向(或 rotate3d(x,y,z,angle) 中的适量的方向),正值是四指的方向即顺时针的方向。负值则相反方向。
<html>
<head>
<meta charset="UTF-8">
<title>2d转换和3d转换title>
head>
<style>
body {
perspective: 400px;
transform-style: preserve-3d;
}
.big {
position: relative;
width: 100px;
height: 100px;
margin: 200px auto;
transform-style: preserve-3d;
transition: all 3s;
}
.big:hover {
transform: rotate3d(50,50,50,360deg);
/*沿着矢量(50,50,50)旋转360度*/
}
div{
position: absolute;
top: 0;
left: 0;
width: 100px;
height: 100px;
font:700 50px/100px "微软雅黑";
text-align: center;
}
.first{
background-color: rgba(255, 255, 204,1);
transform:rotateY(180deg) translateZ(50px);
}
div:nth-child(2){
background-color: rgba(20,20,20,.5);
transform:rotateX(90deg) translateZ(50px);
}
div:nth-child(3){
background-color: rgba(0,255,0,.5);
transform:rotateY(90deg) translateZ(50px);
}
div:nth-child(4){
background-color: rgba(255,0,0,.5);
transform:rotateX(-90deg) translateZ(50px);
}
div:nth-child(5){
background-color: rgba(255,0,255,.5);
transform:rotateY(-90deg) translateZ(50px);
}
div:nth-child(6){
background-color: rgba(0,0,255,.5);
transform:translateZ(50px);
}
style>
<body>
<div class="big">
<div class="first">1div>
<div>2div>
<div>3div>
<div>4div>
<div>5div>
<div>6div>
div>
body>
html>
以上都是 css 中与转换有关的转换函数,应用于 transform 属性对元素进行转换。下面这几个是和转换有关的重要属性。
.big {
position: relative;
width: 100px;
height: 100px;
margin: 200px auto;
transform-style: preserve-3d;
transform-origin:center left 50px;
transition: all 3s;
}
.big:hover {
transform: rotateX(360deg);
/*沿着新的 X 轴旋转360度*/
}
将第一个示例 .big 部分的转换代码更改后效果如上图。其原理如下图所示:
点 O 为原来默认的坐标原点 transform-origin:center center 0; 此时右下前面的那个顶点坐标为 (50,50,50) 即 3D 旋转示例旋转矢量的终点。改为transforrm-origin:center left 50px;后坐标原点变为了 O’。 X轴在盒子平面的中心,Y轴在盒子的左边,再向外边移动 50px 即为新的原点。然后沿着新的X轴转动。
上面的许多说法为个人的思考过程,可能自己的理解有错误的地方或者表达不够清晰。希望有看不明白或者有不同想法的伙伴欢迎留言探讨。好东西要分享,下面那个链接是一篇有关 2D 和 3D 转换的非常详尽的博客。
https://www.jianshu.com/p/17e289fcf467
扬尘 / 2020 / 7 /11