如何将元素转换为样式然后再悬停?

How to transition element into a style and then back on hover?

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

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

#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>

您自己就快要实现目标了!请记住,每当您想从一种状态转换到另一种状态时,都需要定义一个初始状态。所以在原来的 #lorem 状态下,加上初始的 transform 属性 应该可以正常工作。唯一添加的行是 transform: perspective(320px) rotateX(0deg);。请参阅以下代码段:

#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>

您可以选择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>

我最终使用了两个动​​画。关键是让动画具有不同的值,因为如果它们完全相同,即使使用不同的动画名称也不会被触发。所以你可以通过两个动画来改变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>