CSS3 transform 2D转换的属性与方法:
1.translate 平移
2.rotate 旋转
3.scale 缩放
4.skew 扭曲
还有一个属性就是transform-origin 从哪个方向改变被转换元素的位置
因为是css属性,所以必然,2d转化的设置在style中设置基本格式,transform:XXX;以选择哪种转化,还可以设置transition:time;以设置转化时间(不过不能设置在初始状态下,否则无效)
1.translate
通过 translate() 方法,元素从其当前位置移动,根据给定的 left(x 坐标) 和 top(y 坐标) 位置参数:
2.rotate
通过 rotate() 方法,元素顺时针旋转给定的角度。允许负值,元素将逆时针旋转。
rotate可以设置transform-origin可以设置旋转点的位置。
rotateX和rotateY有点意思,他们是关于x,y轴旋转。
3.sclae
transform:scale(a,b)将元素沿x,y方向放大a,b倍,transform:scale(a)与transform:scale(a,a)一致
4.skew
t通过 skew() 方法,元素翻转给定的角度,根据给定的水平线(X 轴)和垂直线(Y 轴)。我试着设置了一下transform-origin但是效果仅是变化后元素会突然平移,效果很差,这个特性一般应该没用。
代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> <style> .box { 850px; height: 220px; border: 1px solid; margin: 200px auto; } .box>div { float: left; 200px; height: 200px; margin-top: 10px; margin-left: 10px; background-color: #0f0; text-align: center; line-height: 200PX; } /* 旋转 参数是角度 */ .box>div:nth-child(1):hover { /* 未说明是哪条轴,默认X轴旋转 */ /* transform: rotate(45deg); */ /* 沿着X轴旋转 */ /* transform: rotateX(45deg); */ /* 沿着Y轴旋转 */ transform: rotateY(45deg); background-color: red; } /* 平移 */ .box>div:nth-child(2):hover { /* 如果只给一个参数 默认沿着x轴平移 */ /* transform: translate(100px); */ /* transform: translateX(-100px); */ /* transform: translateY(100px); */ /* 沿着z轴方向的平移距离 沿着y轴方向的平移距离 如果只想沿着y轴移动,参数1给0*/ transform: translate(100px, 100px); background-color: red; } /* 缩放 */ .box>div:nth-child(3):hover { /* 只传一个参数 表示宽高同时进行缩放 */ /* transform: scale(1.4); */ /* transform: scaleX(0.5); */ /* transform: scaleY(1.2); */ /* 串联个参数分别表示宽的缩放倍数和高的缩放倍数 */ transform: scale(0.2, 1.2); background-color: red; } /* 扭曲 */ .box>div:nth-child(4):hover { /* transform: skew(45deg); */ /* transform: skewX(45deg); */ transform: skewY(45deg); background-color: red; } </style> </head> <body> <div class="box"> <div class="top">旋转</div> <div class="center">平移</div> <div class="nav">缩放</div> <div class="bottom">扭曲</div> </div> </body> </html>
3D(3D坐标系相比2D坐标系多了一个Z轴,Z轴的正方向为垂直屏幕向外(朝向用户眼睛的方向)。)
transform-style:3d空间显示
perspective:3d视距,配合3D使用
backface-visibility:定义元素在不面对屏幕时是否可见。
透视(perspective)
电脑显示屏是一个2D平面,图像之所以具有立体感(3D效果),其实只是一种视觉呈现,通过透视可以实现此目的。
透视可以将一个2D平面,在转换的过程当中,呈现3D效果。
- 透视原理: 近大远小 。
- 浏览器透视:把近大远小的所有图像,透视在屏幕上。
- perspective:视距,表示视点距离屏幕的长短。视点,用于模拟透视效果时人眼的位置
注:并非任何情况下需要透视效果,根据开发需要进行设置。
perspective 一般作为一个属性,设置给父元素,作用于所有3D转换的子元素
rotate
rotateX() : 就是沿着 x 立体旋转.
rotateY():沿着y轴进行旋转
rotateZ():沿着z轴进行旋转
移动translate
translate3d(x,y,z)
[注意]其中,x和y可以是长度值,也可以是百分比,百分比是相对于其本身元素水平方向的宽度和垂直方向的高度和;z只能设置长度值
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>开门大吉</title> 8 <style> 9 section { 10 450px; 11 height: 300px; 12 border: 1px solid #000; 13 margin: 100px auto; 14 background: url(images/3.jpg) no-repeat; 15 position: relative; 16 perspective: 1000px; /*给父盒子增加透视*/ 17 } 18 .door-left,.door-right { 19 position: absolute; 20 50%; 21 height: 100%; 22 background-color: pink; 23 transition: all 1s; /*连个门都是过渡*/ 24 25 } 26 .door-left { 27 left: 0; 28 border-right: 1px solid #000; 29 transform-origin:left; /*旋转中心点*/ 30 } 31 .door-right { 32 right: 0; 33 border-left: 1px solid #000; 34 transform-origin:right; /*旋转中心点*/ 35 } 36 .door-left::after, 37 .door-right::after { 38 content: ""; 39 position: absolute; 40 top: 50%; 41 10px; 42 height: 10px; 43 border: 1px solid #000; 44 border-radius: 50%; 45 transform: translateY(-50%); /*自己高度的一半*/ 46 } 47 .door-left::after { 48 right: 5px; 49 } 50 .door-right::after { 51 left: 5px; 52 } 53 /* 鼠标经过section,两个门进行翻转 */ 54 section:hover .door-right { 55 transform: rotateY(130deg); 56 } 57 section:hover .door-left { 58 transform: rotateY(-130deg); 59 } 60 61 62 </style> 63 </head> 64 <body> 65 <section> 66 <div class="door-left"></div> 67 <div class="door-right"></div> 68 </section> 69 </body> 70 </html>
backface-visibility
backface-visibility属性决定元素旋转背面是否可见。对于未旋转的元素,该元素的正面面向观看者。当其Y轴旋转约180度时会导致元素的背面面对观众。
backface-visibility属性使用语法:
backface-visibility: visible | hidden
该属性被设置为以下两个关键词之一:
visible:为backface-visibility的默认值,表示反面可见
hidden:表示反面不可见
一个元素的可见性与“backface-visibility:hidden”决定如下:
元素在3D环境下渲染上下文,将根据3D变形矩阵来计算,反之元素不在3D环境下渲染上下文,将根据2D变形矩阵来计算。
如果组件的矩阵在第3行、3列是负值,那么元素反面是隐藏,反之是可见的。
简单点来说,backface-visibility属性可用于隐藏内容的背面。默认情况下,背面可见,这意味着即使在翻转后,旋转的内容仍然可见。但当backface-visibility设置为hidden时,旋转后内容将隐藏,因为旋转后正面将不再可见。该功能可帮助您模拟多面的对象,例如下例中使用的纸牌。通过将backface-visibility设置为hidden,您可以轻松确保只有正面可见。
1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <style> 7 div { 8 224px; 9 height: 224px; 10 margin: 100px auto; 11 position: relative; 12 /*transform-style: preserve-3d;*/ 13 /* 1.保留当前空间位置 14 2.是图片扁平化*/ 15 16 } 17 div img { 18 19 position: absolute; 20 top: 0; 21 left: 0; 22 transition: all 8s; 23 24 } 25 div img:first-child { 26 z-index: 1; 27 backface-visibility: hidden; /*不是正面对向屏幕,就隐藏*/ 28 } 29 div:hover img { 30 transform: rotateY(180deg); 31 } 32 </style> 33 </head> 34 <body> 35 <div> 36 <img src="images/qian.svg" alt=""/> 37 38 <img src="images/hou.svg" alt=""/> 39 </div> 40 </body> 41 </html>