如何将元素转换为样式然后再悬停?
How to transition element into a style and then back on hover?
我希望 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>
您自己就快要实现目标了!请记住,每当您想从一种状态转换到另一种状态时,都需要定义一个初始状态。所以在原来的 #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>
我希望 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>
您自己就快要实现目标了!请记住,每当您想从一种状态转换到另一种状态时,都需要定义一个初始状态。所以在原来的 #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>