【问题标题】:CSS hover on translated elementCSS悬停在翻译的元素上
【发布时间】:2021-08-22 20:13:48
【问题描述】:

动画元素能否检测到实际的鼠标指针位置并以这种方式添加悬停状态? 在下面的示例中,有一个简单的 div 左右移动,如果您将鼠标悬停在 div 上,它将变为黑色,但是当您将鼠标指针留在动画元素的路径中时,不移动它,悬停状态将不会不能应用。

div{
  width: 100px;
  height: 100px;
  background: red;
  animation: move 1s infinite alternate;
}

div:hover {
  background: black;
}

@keyframes move{
  0%{ transform: translateX(0); }
  100%{ transform: translateX(100px); }
}
<div></div>

反之亦然,当您实际悬停 div 并且不移动鼠标时,即使鼠标指针实际上不再悬停在该元素上,该 div 也会保持黑色。

那么,是否可以根据鼠标指针的静态位置不断切换正常到悬停状态?

【问题讨论】:

  • 一个翻译的元素在技术上仍然存在于文档的原始位置。
  • 这个话题有很多类似的问题可以找,比如这个:stackoverflow.com/questions/51333507/…
  • @isherwood,虽然它与上述类似,但很可能该元素在技术上仍然存在于其原始位置,在这种情况下,该位置将在没有它的位置已翻译,但是如果您等待 div 向右移动,将鼠标指针添加到左侧(在其原始位置)它仍然不会激活。

标签: html css css-animations


【解决方案1】:

使用 translate 无法做到这一点,因为它有一个静态位置。就像 isherwood 所写的那样,翻译后的元素将始终存在于其原始位置。 你可以用绝对定位来做到这一点,你真正移动元素的地方。

div{
  width: 100px;
  height: 100px;
  background: red;
  animation: move 1s infinite alternate;
  position: absolute;
}

div:hover {
  background: black;
}

@keyframes move{
  0%{ left: 0; }
  100%{ left: 100px; }
}
<div></div>

【讨论】:

  • 静态位置不是原因,translate 反对 left-right,但是。您可以将absolute 添加到上面的示例中,但它仍然不起作用。这是提供的简化示例的一个很好的解决方法,但transform 处理的不仅仅是左、右、上、下移动。不过,谢谢。
猜你喜欢
  • 2013-11-10
  • 2018-05-03
  • 2012-07-15
  • 2021-09-26
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
相关资源
最近更新 更多