【问题标题】:Transition only one kind of transform at a time in CSS在 CSS 中一次只转换一种变换
【发布时间】:2017-12-25 14:32:15
【问题描述】:

我找不到在 CSS 中仅转换一种转换的方法。

我有一堆图像(手臂、腿、头等),在加载时需要对它们应用“变换:翻译”,以便在我做任何其他事情之前它们位于正确的位置。

然后我想在悬停时仅在transform: rotate(20deg) 上做一个转换,比如说一个手臂。问题是,在转换时,它会随着旋转重复初始平移,但我只希望它在悬停时进行旋转。我怎样才能让它只转换一个旋转?

在下面的示例代码中,您可以看到我使用transform: translate 确保三角形最初接触到另一个形状。然后我在悬停时执行transform: rotate。它可以工作,但它也可以再次使用translate

(我想如果图像可以放置在正确的位置而不需要transform: translate,那也许可以解决它,但我也不知道该怎么做。如果可以的话会更好将transition 隔离为仅transform: rotate。)

/* INITIAL PLACING OF THE IMAGES IN THEIR RIGHT PLACES */
img#Arm {
  position: relative;
  transform: translate(220px, 100px);
}

img#Body {
  position: relative;
  transform: translate(150px, 180px);
}
/* END OF PLACING OF THE IMAGES IN THEIR RIGHT PLACES */

/* THESE ARE THE TRANSFORMATIONS ON HOVER */
img#Arm {
  transform-origin: 200px 200px;
  transition: 1s ease-in-out;
}

section:hover img#Arm {
  transform: rotate(25deg);
}
/* END OF TRANSFORMATIONS ON HOVER */

/* THIS IS TO KEEP THE LOGO PARTS GROUPED TOGETHER DESPITE WINDOW CHANGING RESOLUTIONS */
section.wrapper {
  margin: 0 auto;
  /* this keeps the logo centered on the page */
  min-width: 800px;
  /* Minimum width of your wrapper element */
  max-width: 800px;
  min-height: 800px;
  max-height: 800px;
}
<section class="wrapper">
  <img id="Arm" src="https://i.stack.imgur.com/yCC87.png" />
  <img id="Body" src="https://i.stack.imgur.com/mmzDM.png" />
</section>

【问题讨论】:

  • 你能修复图片的链接吗?到目前为止,它们是相对的,所以我们看不到它们。
  • 我想用网上找到的图片展示一个更简单的例子可能会更好地展示自己,所以你们也可以看到图片。我会尽快尝试编辑代码。
  • 这可能是这个问题的重复:stackoverflow.com/questions/24120132/…
  • 我冒犯了,我用链接图像重新编写了示例,并使其更易于演示。您可以看到我使用 transform: translate 确保三角形最初接触到另一个形状。然后我做一个变换:悬停旋转。我工作了,但它也会再次翻译。
  • @PolarisTLX 我仍然不太明白你想要实现什么,但是,你可以在:hover 上使用translate3d 来保留你之前设置的任何翻译属性@987654322 @

标签: css css-transitions css-transforms


【解决方案1】:

当您通过旋转覆盖悬停时的非悬停变换值时,您的手臂将定位到其原始位置(就像它没有任何平移时一样)。

由于您可以为转换属性设置多个值,因此只需将悬停时的翻译添加到它。这将使您的手臂保持在正确的位置并旋转它。

/* INITIAL PLACING OF THE IMAGES IN THEIR RIGHT PLACES */
img#Arm {
  position: relative;
  transform: translate(220px, 100px);
}

img#Body {
  position: relative;
  transform: translate(150px, 180px);
}
/* END OF PLACING OF THE IMAGES IN THEIR RIGHT PLACES */

/* THESE ARE THE TRANSFORMATIONS ON HOVER */
img#Arm {
  transform-origin: 200px 200px;
  transition: 1s ease-in-out;
}

section:hover img#Arm {
  transform: translate(220px, 100px) rotate(25deg);
}
/* END OF TRANSFORMATIONS ON HOVER */

/* THIS IS TO KEEP THE LOGO PARTS GROUPED TOGETHER DESPITE WINDOW CHANGING RESOLUTIONS */
section.wrapper {
  margin: 0 auto;
  /* this keeps the logo centered on the page */
  min-width: 800px;
  /* Minimum width of your wrapper element */
  max-width: 800px;
  min-height: 800px;
  max-height: 800px;
}
<section class="wrapper">
  <img id="Arm" src="https://i.stack.imgur.com/yCC87.png" />
  <img id="Body" src="https://i.stack.imgur.com/mmzDM.png" />
</section>

【讨论】:

  • 这个效果最好!!!它更有意义并且现在可以使用。谢谢@Daniel Ziegler!
  • @PolarisTLX 没问题。为了让它看起来更好看,你必须使用 transform-origin,但我想你知道这一点。顺便说一句,如果你能接受答案会很酷:)。
  • 我不得不用谷歌搜索如何“接受”一个答案,但我认为这意味着点击左侧的复选标记图标。完成!
猜你喜欢
  • 2014-07-29
  • 2014-04-02
  • 1970-01-01
  • 2021-04-25
  • 2018-02-15
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 2014-03-20
相关资源
最近更新 更多