【问题标题】:Hover leaving Animation悬停离开动画
【发布时间】:2021-09-01 19:06:25
【问题描述】:

当我们在元素上应用悬停效果时(例如悬停时具有盒子阴影的 div),过渡为 1s。 悬停时会出现动画,但是一旦您将鼠标移开,它就没有过渡,只是急剧返回状态。

当我们离开悬停状态时,你如何给出类似 1s 的转换?

我看到了一些代码,但看不出是什么原因造成的。

div {
  width: 50px;
  height: 50px;
  background: purple;
}

div:hover {
  animation: nav 1s linear forwards;
}
@keyframes nav {
  to {
    box-shadow: 5px 5px 2px black;
  }
}
<div></div>

【问题讨论】:

  • 我建议创建两个类并使用 javascript 来转换...或者只使用 jQuery
  • @Si8 你能给我提供具体的代码行吗
  • 这是因为您没有在关键帧中定义from 状态。但是,您不需要关键帧,只需 :hover 就足够了,正如贾斯汀在他的回答中显示的那样
  • 我添加了一个答案...盒子阴影不需要关键帧。

标签: javascript html css


【解决方案1】:

你不应该做任何事情。当您停止悬停时,它会转回。

div {
  width: 50px;
  height: 50px;
  background: purple;
  transition: box-shadow 1s;
}

div:hover {
   box-shadow: 5px 5px 2px black;
}
<div></div>

【讨论】:

  • 这不适用于我的动画。
  • @Naman 你不需要动画。只需使用 :hover 即可,如 Justin 上面所示。
  • 是的,不同之处在于您使用的是关键帧,而我使用的是过渡。在发布代码之前,您听起来好像在谈论 CSS 过渡而不是关键帧。
  • 这是因为您没有在关键帧中定义from 状态。但是,您不需要关键帧,只需 :hover 就足够了,正如贾斯汀在他的回答中显示的那样
  • @Pixelomo from 也不起作用 :( 。这只是一个简化版本。我在我的实际代码中使用不同的动画,这需要 keyframes
【解决方案2】:

我在上面看到了一个正确的答案,但这是 JavaScript 使用 mouseovermouseleave 事件的另一个解决方案,但我注意到您使用 .hover,因为它很简单。

div {
  width: 50px;
  height: 50px;
  background: purple;
  transition: all 1s;
}
    <div id="d"></div>
const d = document.getElementById("d");
d.addEventListener("mouseover",()=>{
   d.style.boxShadow = "5px 5px 2px black";
})
d.addEventListener("mouseleave",()=>{
   d.style.boxShadow = "0px 0px 0px";
})

【讨论】:

    【解决方案3】:

    除了其他答案,您还可以执行以下操作(非 JS/jQuery):

    HTML:

    <div class="box">
    </div>
    

    CSS:

    body {
      background: #CCC;
    }
    .box {
      position: relative;
      display: inline-block;
      width: 100px;
      height: 100px;
      border-radius: 5px;
      background-color: #fff;
      box-shadow: 0 1px 2px rgba(0,0,0,0.15);
      transition: all 0.3s ease-in-out;
    }
    
    /* Create the hidden pseudo-element */
    /* include the shadow for the end state */
    .box::after {
      content: '';
      position: absolute;
      z-index: -1;
      width: 100%;
      height: 100%;
      opacity: 0;
      border-radius: 5px;
      box-shadow: 0 5px 15px rgba(0,0,0,0.3);
      transition: opacity 0.3s ease-in-out;
    }
    
    .box:hover::after {
        opacity: 1;
    }
    <div class="box">
    </div>

    【讨论】:

    • 当一个 div 有一个悬停动画时,我需要一个离开过渡。
    猜你喜欢
    • 2015-06-09
    • 2013-02-01
    • 2014-09-16
    • 1970-01-01
    • 2014-09-28
    • 2022-09-24
    • 2021-04-02
    • 2020-10-14
    • 2012-07-22
    相关资源
    最近更新 更多