今日学习内容:2D转换之位移、旋转(包括旋转原点的设置)、缩放、倾斜;3D转换之位移、旋转、缩放、倾斜。
总结如下要点:
(一)2D转换
(若想看到变换效果,要给图形的盒子设置过渡 transition: 3s)
1.位移
语法 => transform: translate(x,y);
其中x表示水平方向的位移(即左右),y表示垂直方向的位移(即上下)。
括号内最多只能有2个值,当只有1个值的时候表示水平位移。
值的大小可以为正数,也可以为负数。当值为负数的时候向反方向移动。
值的单位可以为像素(如100px,-100px),也可以为百分比(如50%,-50%)。当值用百分比来表示的时候,参照的是元素translate所在盒子的大小。
translate属性不脱标!
2.旋转
语法 => transform:rotate();
括号内表示旋转的角度,必须使用单位deg。
当括号内的值为正数时,表示顺时针旋转;为负数时,表示逆时针旋转。
3.旋转原点的设置
语法 => transform-origin: x y;
其中x表示水平方向,值可以设置为方位值left,center,right;或者像素px;或者百分数%。
y表示垂直方向,值可以设置为方位值top,center,bottom;或者像素px;或者百分数%。
当x或y的值为负数时,旋转原点在盒子之外。
默认旋转原点为所在盒子的中心点:center center。(x和y之间用空格隔开。)
代码举栗:
风火轮
/* 此处省略path及风火轮样式,设置鼠标进入盒子时的样式 */
.path:hover .wheel {
/* translate()中只有一个值,表示水平移动,上下不动 */
/* rotate()中设置为3600度表示转动十圈 */
transform: translate(1000px) rotate(3600deg);
}
如上所示。如果既要发生位移又要发生旋转,必须在同一个transform内同时设置多个属性,用空格隔开,不能分开写成两个transform,因为分开写成两个后会使样式发生重叠,展示最后定义的transform。
4.缩放
语法 => transform: scale(x,y);
其中x表示水平方向(改变图形的宽度),y表示垂直方向(改变图形的高度)。当括号内只有一个值的时候,图形的宽和高同步变换。
括号里的值为数字:(值的正负不会影响图形变换)
1)值=0时,图形消失;
2)0<值<1时,图形缩小为原来的几倍;
3)值=1时,图形不变;
4)值>1时,图形放大为原来的几倍;
5.倾斜
语法 => transform: skew(x,y);
其中x表示左右倾斜(左边和右边),上下两条边保持水平(常用)。y表示上下倾斜(上边和下边),左右两条边保持垂直。只有一个值的时候默认为左右倾斜。
值的单位为deg,表示倾斜度数。如60deg。
如果想要盒子内部的某些内容不倾斜,需要单独设置:给字内容加标签,然后设置transform: skew()内的值为负的父标签的值。(如果给字内容加的标签为行内元素如span,需要用display: block或display: inline-block转换成块级元素或行内块元素。)
代码举栗:
/* 省略ul和a标签的css样式设置 */
li {
float: left;
background: black;
margin-right: 20px;
transform: skew(-20deg);
}
li a span {
display: block;
transform: skew(20deg);
}
6.盒子居中的方法总结
盒子居中要用到“子绝父相”。即子元素设置 position: absolute; 父元素设置 position: relative; 然后设置left、top、margin等值:
1)left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
2)lef: 50%;
top: 50%;
margin-left: -自身宽度一半;
margin-top: -自身宽度一半;
3)left: 50%;
top: 50%;
transform: translate(-50%, -50%);
(二)3D转换
1.位移
语法 => transform: translateX() translateY() translateZ();
增加了Z轴属性 transform: translateZ();
括号内的值为正数时,表示离我越来越近,图形变大;值为负数时,表示离我越来越远,图形变小。简称近大远小。
添加translateZ属性后,如果想要看到效果,需要给添加了transform: translateZ()属性的元素的上级元素(不一定就是父盒子)加透视 perspective: 600px; (perspective值一般为600px~1000px)。
添加透视的目的是为了看到近大远小的效果。
2.旋转
语法 => transform:rotateX(20deg) rotateY(20deg) rotateZ(20deg);
需要添加透视、过渡属性来看到效果。
如图,箭头的指向即为要设置为正值的方向。
代码举栗:
前
后