【心得】 会让人晕3D的transform

昨天有先提到了transform的位移与relative的差别了
那麽今天再来详细一些比较常使用的transform属性~
以及如果使用多个transform属性在动画上,顺序不同会发什麽事!!

常用属性介绍:

位移

  • transform: translate(x,y)
  • transform: translateX(单位)
  • transform: translateY(单位)

单位可以填 绝对单位 或 %
填写%时,移动的距离是以本身的宽/高乘以 %

例如在做绝对定位的垂直置中时,会利用translate(-50%,-50%)进行矫正
(translate是以物体本身的宽高进行移动~ -50%就是向左以及向上移动自身一半的距离)

  position: absolute;
    top:50%;
    left: 50%;
    transform: translate(-50%,-50%);


缩放

  • transform: scale(x倍数,y倍数)
    更改x、y的比例可以将原本的正方形改成长方形
    但里面的文字也会跟着比例缩放(扁掉或拉长)

其缩放都是在原地进行!并不会因此推挤到旁边的东西造成位移~
在做:hover效果的时候很好用

  • transform: scaleX(倍数)
  • transform: scaleY(倍数)

旋转

  • transform: rotateX(角度)
  • transform: rotateY(角度)

旋转的话会因为旋转的度数正负值而转向不一样

正值转向:

.item1{
  transform:rotateX(0deg);
  animation:turn1 5s linear infinite;
}
@keyframes turn1{
  0%{transform:rotateX(0deg)}
  100%{transform:rotateX(360deg)};
}
.item2{
  transform:rotateY(0deg);
  animation:turn2 5s linear infinite;
}
@keyframes turn2{
  0%{transform:rotateY(0deg)}
  100%{transform:rotateY(360deg)};
}

负值转向:

.item1{
  transform:rotateX(0deg);
  animation:turn1 5s linear infinite;
}
@keyframes turn1{
  0%{transform:rotateX(0deg)}
  100%{transform:rotateX(-360deg)};
}
.item2{
  transform:rotateY(0deg);
  animation:turn2 5s linear infinite;
}
@keyframes turn2{
  0%{transform:rotateY(0deg)}
  100%{transform:rotateY(-360deg)};
}

在动画上使用

如果同时需要用到位移+旋转+缩放
这样子写上面的会被最後一个覆盖掉
因此只有最後一个rotateX(角度)会作用!

transform: translate(x,y);
transform: scale(x倍数,y倍数);
transform: rotateX(角度);

需要这样写

transform: translate(x,y) scale(x倍数,y倍数) rotateX(角度);

没有动画时不需要拘泥於顺序,只需要用空白隔开属性

but~ 有动画效果时就要特别注意顺序问题罗!

.item1{
  background-color: #f66;
  transform:translateX(300px) rotateY(60deg);
  animation:item1 6s infinite;
}
.item2{
  background-color: #6f6; 
  transform:rotateY(60deg) translateX(300px) ;
  animation:item2 6s infinite;
}
@keyframes item1{
  0%{transform:translateX(0px) rotateY(0deg)}
  100%{transform:translateX(300px) rotateY(60deg)}
}
@keyframes item2{
  0%{transform:translateX(0px) rotateY(0deg)}
  100%{transform:rotateY(60deg) translateX(300px)}
}

红绿两个物件我都设定了一样的移动距离跟旋转角度
差别在
红卡是先移动再旋转
绿卡是先旋转再移动

很明显可以看出顺序不同会造成移动的轨迹不同~

那麽今天的transform属性介绍就先到这里罗~


<<:  JavaScript Day 20. BOM 与 DOM

>>:  [Day14] THM Root Me

Day 23:儿子有事交给爸-$emit 传出事件

透过 Props 可以让子元件接收来自父元件的「资料」,相对地,父元件则可以接收来自子元件的「事件」...

Day 30:未完待续,不停地学习!

今年,是我第一次参加铁人赛,而今天也是自我挑战的达标日,但正如标题所写的,达标对我而言只是一个阶段,...

DAY29 欸你Git来Hub一下

昨天提到先将本机的档案列为版控,但是光在本机这样操作还是不太够,其他人要一起共同开发的时候,还是一样...

Python 多赋值问题,推论过程与结果

题目来源:邦友问答,因觉得有趣就尝试推论看看 python 多赋值是如何运作的 以下是我推论出来的,...

[Day 3] 一同面对焦虑吧!

焦虑感的来袭 不得不说,在有工作的情形下,一方面要努力完成现有的工作,另一方面还得焦虑自己是否能够真...