CSS 2D transform 详细解读 [附实战案例]

37 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的31天,点击查看活动详情

transform 概述

transform 是一个 CSS 属性,可以用来对元素应用 2D 转换。2D 转换包括缩放、旋转、倾斜和移动(平移)元素。

这里有一些使用 transform 应用 2D 转换的示例:

  • scale(x, y):按照 x 和 y 轴方向缩放元素。例如,transform: scale(2, 3) 将导致元素在 x 轴方向上放大为原来的两倍,在 y 轴方向上放大为原来的三倍。
  • rotate(angle):围绕一个点旋转元素。角度以度为单位指定。例如,transform: rotate(45deg) 将导致元素顺时针旋转 45 度。
  • skew(x-angle, y-angle):按照 x 和 y 轴方向倾斜元素。角度以度为单位指定。例如,transform: skew(10deg, 20deg) 将导致元素在 x 轴方向上水平倾斜 10 度,在 y 轴方向上垂直倾斜 20 度。
  • translate(x, y):在 x 和 y 轴方向上移动(平移)元素。距离以像素为单位指定。例如,transform: translate(50px, 100px) 将导致元素向右移动 50 像素,向下移动 100 像素。

你也可以通过用空格隔开来同时应用多个转换:

element {
  transform: scale(2, 3) rotate(45deg) skew(10deg, 20deg) translate(50px, 100px);
}

对于 rotate

需要注意的是,如果我们想按照某个圆心旋转,我们需要自行指定。

你可以使用 transform-origin 属性来指定旋转的圆心。这个属性接受两个参数,表示圆心的水平和垂直位置。参数可以是百分比,也可以是具体的像素值。

例如,如果你想让元素以它的中心旋转,你可以这样写:

element {
  transform: rotate(45deg);
  transform-origin: 50% 50%;
}

这会使元素以它的中心旋转 45 度。

你也可以使用具体的像素值来指定圆心位置,例如:

element {
  transform: rotate(45deg);
  transform-origin: 100px 200px;
}

这会使元素以 100 像素 到它的左边,200 像素 到它的顶部的位置为圆心旋转 45 度。

注意: 如果你没有指定 transform-origin,默认的圆心位置是元素的中心。

实例代码

<div id="source">现在你看到了</div>
<div id="copy"> 把鼠标 🖱️ 放在我上面 </div>

div{
  position: absolute;
  display: inline-block;
}

#source{
  width: 100px;
  height: 100px;
  background-color: rgb(112, 203, 87);
  border-radius: 8px;
}

#copy{
  width: 100px;
  height: 100px;
  background-color: rgb(247, 192, 80);
  border-radius: 8px;
  /* 因为添加了hover动画,所以,需要将 transition-duration 放在这里,防止hover导致动画突变 */
  transition-duration:1s; 
}

#copy:hover{
  transform:rotate(9deg) translate(20px,20px);
  -ms-transform:rotate(9deg) translate(20px,20px); /* Internet Explorer */
  -moz-transform:rotate(9deg) translate(20px,20px); /* Firefox */
  -webkit-transform:rotate(9deg) translate(20px,20px); /* Safari 和 Chrome */
  -o-transform:rotate(9deg) translate(20px,20px); /* Opera */
}