CSS3 transform2d变换

CSS3 transform2d变换

参考点(旋转基点)

css的参考点就是元素所围绕其旋转的点,在css中用一个属性设置旋转基点

transform-origin: left top; // 设置该元素的旋转基点为该元素的左上角

transform-origin属性是css变换的一个重要的属性,一般需要设置2个值:
第一个值为偏移x轴方向的距离,可以是百分值,em,px也可以用关键字left、right、center
第二个值为偏移y轴方向的距离,可以是百分值,em,px也可以用关键字top、bottom、center
第三个值为偏移z轴方向的距离,只能使用具体的距离值描述,这个值是使用在开启了3d模式下使用的,第三个值默认值为0。
ps: 当只设置一个值的时候,那就意味着第二个值默认为center,第三个值默认为0
我们没有使用transform-origin改变元素基点位置的情况下,transform进行的rotate,translate,scale,skew,matrix等操作都是以元素自己中心位置进行变化的。但有时候我们需要在不同的位置对元素进行这些操作,那么我们就可以使用transform-origin来对元素进行基点位置改变,使元素基点不在是中心位置,以达到你需要的基点位置。
实例:
默认
CSS3 transform2d变换_第1张图片
transform-origin: left top;
CSS3 transform2d变换_第2张图片
transform-origin: left;
CSS3 transform2d变换_第3张图片
ps: transform-origin并不是transform中的属性值,他具有自己的语法

2d变换

说完参考点之后,下面说说transform的四种变换方法:
一、rotate(旋转,单位为deg)
rotate(x) 围绕z轴旋转,只接受一个参数,并且这个是2d方面的旋转,但是和后面的3d旋转中的围绕z轴旋转有着本质区别
其中x是指旋转角度,需先有transform-origin属性的定义,如果设置的值为正数表示顺时针旋转,如果设置的值为负数,则表示逆时针旋转。如:
transform-origin: 0 0;下面例子中参考点都为左上角
transform:rotate(30deg):
CSS3 transform2d变换_第4张图片
rotateX(n) 围绕x轴旋转
transform: rotateX(30deg);
CSS3 transform2d变换_第5张图片
rotateY(n) 围绕y轴旋转
transform: rotateX(90deg);
CSS3 transform2d变换_第6张图片
注意: 旋转的是轴,因此前一次的旋转作用会保留,因此旋转需要注意顺序: transform: rotateY(30deg) rotateX(60deg)transform: rotateX(30deg) rotateY(60deg)是不同的

二、translate(位移,单位px等)
translate(x,y) 沿着x轴正方向移动x距离 y轴正方向移动y距离
transform:translate(50px,20px);
CSS3 transform2d变换_第7张图片
translateX(n) 沿着x轴正方向移动n距离
transform:translateX(50px);
CSS3 transform2d变换_第8张图片
translateY(n) 沿着y轴正方向移动n距离
transform:translateY(50px);

CSS3 transform2d变换_第9张图片
三、scale(缩放,无单位)
scale(x,y) 更改元素的宽度和高度,将元素的宽度变为原来的x倍,将高度变为原来的y倍, Y是一个可选参数,如果没有设置Y值,则表示X,Y两个方向的缩放倍数是一样的。并以X为准
scaleX(n) 更改元素的宽度 scaleY(n) 更改元素的高度
它们具有相同的缩放中心点和基数,其中心点就是元素的中心位置
默认值: 1 原始大小
放大:> 1
缩小:0~1之间
可以叠加操作
例:
transform:scale(2,1.5)
CSS3 transform2d变换_第10张图片
transform:scaleX(2) scaleX(0.5); //叠加
CSS3 transform2d变换_第11张图片
当元素当取值为负数的时候,首先将元素绕着x、y(取决于你的缩放方向)旋转180deg,然后再进行缩放。
例: transform:scale(-2)

CSS3 transform2d变换_第12张图片
注意: 此元素的变化坐标轴刻度

四、skew(斜切,单位deg)
skew(x,y)使元素在水平和垂直方向同时扭曲(X轴和Y轴同时按一定的角度值 进行扭曲变形); skewX(x)仅使元素在水平方向扭曲变形(X轴扭曲变形); skewY(y)仅使元素在垂直方向扭曲变形(Y轴扭曲变形)
transform:skew(30deg,10deg);
CSS3 transform2d变换_第13张图片
transform: skewX(30deg);

<ul>
   <li>芒果TVli>
   <li>腾讯li>
   <li>爱奇艺li>
   <li>优酷li>
ul>
ul {
    padding: 0;
    margin: 100px;
    list-style: none;
    width: 400px;
    height: 30px;
    display: flex;
   }
   li {
    flex: 1 1 auto;
    line-height: 30px;
    text-align: center;
    color: #F40;
    font-weight: bold;
    transform: skewX(30deg);
    box-sizing: border-box;
    background-color: lightgreen;
   }

在这里插入图片描述

我们可以对一个元素进行transform的多种属性操作,但transform中使用多个属性时需要用空格隔开。例: transform: translate(0px) rotate(10deg) scale(2,1) skew(30deg);
CSS3动画相比较JS模拟动画的好处:

  1. 不占用JS主线程;
  2. 可以通过浏览器调用硬件加速;
  3. 浏览器可对动画做优化(元素不可见时不动画,减少对FPS的影响)。
    当然也有不好用的地方,动画的可操控性没有JS写的好

你可能感兴趣的:(CSS3 transform2d变换)