【问题标题】:How to transition element into a style and then back on hover?如何将元素转换为样式然后返回悬停?
【发布时间】:2016-07-05 11:08:05
【问题描述】:

我希望 div 转换为 :hover 样式,然后返回、悬停和悬停。我知道我可以使用动画,但我不知道如何在这种情况下实现它。

我希望它像这样转换(悬停时和取消悬停时):

  • 发件人:transform: perspective(320px) rotateX(0deg)
  • 收件人:transform: perspective(320px) rotateX(30deg)
  • 然后返回:transform: perspective(320px) rotateX(0deg)

#lorem {
  width: 250px;
  height: 18px;
  background: #ff0000;
  color: #fff;
  text-align: center;
  margin: auto;
  padding: 12px;
  transition: transform .75s ease-in-out;
  }
#lorem:hover {
  transform: perspective(320px) rotateX(30deg);
  }
<div id="lorem">LOREM</div>

【问题讨论】:

    标签: css css-transitions css-animations css-transforms


    【解决方案1】:

    我最终使用了两个动​​画。关键是让动画具有不同的值,因为如果它们完全相同,即使动画名称不同,它们也不会被触发。所以你可以通过两个动画改变rotateX(0deg)中的1deg来触发改变

    @keyframes fold {
        0%   {transform: perspective(320px) rotateX(0deg);}
        50%  {transform: perspective(320px) rotateX(30deg);}
        100% {transform: perspective(320px) rotateX(0deg);}
    }
    
    @keyframes unfold {
        0%   {transform: perspective(320px) rotateX(0deg);}
        50%  {transform: perspective(320px) rotateX(15deg);}
        100% {transform: perspective(320px) rotateX(0deg);}
    }
    #lorem {
      width: 250px;
      height: 18px;
      background: #ff0000;
      color: #fff;
      text-align: center;
      margin: auto;
      padding: 12px;
      transition: transform .75s ease-in-out;
      animation: fold .75s ease-in-out 0s 1 normal;
      }
    #lorem:hover {
      animation: unfold .75s ease-in-out 0s 1 normal;
      }
    <div id="lorem">LOREM</div>

    【讨论】:

      【解决方案2】:

      您已经非常接近自己了!请记住,每当您想从一种状态转换到另一种状态时,您都需要定义一个初始状态。所以在原始的#lorem 状态下,添加初始的transform 属性,它应该可以正常工作。添加的唯一行是transform: perspective(320px) rotateX(0deg);。看下面的sn-p:

      #lorem {
        width: 250px;
        height: 18px;
        background: #ff0000;
        color: #fff;
        text-align: center;
        margin: auto;
        padding: 12px;
        transform: perspective(320px) rotateX(0deg);
        transition: transform .75s ease-in-out;
      }
      
      #lorem:hover {
        transform: perspective(320px) rotateX(30deg);
      }
      <div id="lorem">LOREM</div>

      【讨论】:

      • 想知道如何更好地解释这一点。我希望它在悬停时从rotateX(0deg)rotateX(30deg) 再到rotateX(0deg)。当您取消悬停时,也会发生同样的情况。
      • 明白了,误会了。这更有意义。然后,您将使用动画属性。 Joshua Rajandiran 的答案目前比我的更接近,但我会编辑我的答案以更接近目标。
      • 对不起,我没有更好地表达我的问题。感谢您的帮助。
      【解决方案3】:

      你可以选择ghost_dad给出的答案。如果您希望 div 更改为悬停状态,那么也许您可以尝试使用这样的动画:

      #lorem {
          width: 250px;
          height: 18px;
          background: #ff0000;
          color: #fff;
          text-align: center;
          margin: auto;
          padding: 12px;
          animation-name : example;
          animation-duration: .75s;
          animation-iteration-count: 2;
          animation-direction: alternate;
          transition: transform .75s ease-in-out;
          animation-timing-function: ease-in-out;
      }
      
      #lorem:hover {
          transform: perspective(320px) rotateX(30deg);
      }
      
      /* Chrome, Safari, Opera */
      @-webkit-keyframes example {
          from {transform: perspective(320px) rotateX(0deg);}
          to {transform: perspective(320px) rotateX(30deg);}
      }
      
      /* Standard syntax */
      @keyframes example {
          from {transform: perspective(320px) rotateX(0deg);}
          to {transform: perspective(320px) rotateX(30deg);}
      }
      <div id="lorem">LOREM</div>

      如果您希望它保持旋转,那么您可以执行以下操作:

      #lorem {
          width: 250px;
          height: 18px;
          background: #ff0000;
          color: #fff;
          text-align: center;
          margin: auto;
          padding: 12px;
          animation-name : example;
          animation-duration: .75s;
          animation-iteration-count: 1;
          animation-direction: alternate;
          transform: perspective(320px) rotateX(30deg);
          transition: transform .75s ease-in-out;
          animation-timing-function: ease-in-out;
      }
      
      #lorem:hover {
          transform: perspective(320px) rotateX(0deg);
      }
      
      /* Chrome, Safari, Opera */
      @-webkit-keyframes example {
          from {transform: perspective(320px) rotateX(0deg);}
          to {transform: perspective(320px) rotateX(30deg);}
      }
      
      /* Standard syntax */
      @keyframes example {
          from {transform: perspective(320px) rotateX(0deg);}
          to {transform: perspective(320px) rotateX(30deg);}
      }
      <div id="lorem">LOREM</div>

      【讨论】:

        猜你喜欢
        • 2018-11-13
        • 2012-01-19
        • 1970-01-01
        • 2019-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-25
        • 2011-12-28
        相关资源
        最近更新 更多