I have a div with the following hover effect: transform: rotateY(180deg);
so it's a container that flips on mouse hover. How can I make it so that instead of rotating instantly 180deg, it would slowly rotate 10deg, and then if the mouse is still hovering it, 180deg?
.flip-card-inner {
transition: transform 0.6s;
transform-style: preserve-3d;
}
.flip-card:hover .flip-card-inner {
transform: rotateY(180deg);
}
CodePudding user response:
You can achieve this by making an animation
instead of a transition
.
Make sure to use animation-fill-mode: forwards
so that the animation
stays in place until you stop the :hover
. I used 30deg
for demonstration purposes.
In your animation
, make sure it starts on transform: rotateY(0deg)
so it animates from 0deg
to 30deg
as well (optionally you could just apply transform: rotateY(0deg)
directly on .flip-card-inner
and start the animation
at @keyframe 10%
).
Play a bit with the @keyframes
values and the animation-duration
-property to adjust it to your liking.
.flip-card:hover>.flip-card-inner {
/* Shorthand for animation-name, animation-duration, animation-fill-mode */
animation: flip 2s forwards;
}
.flip-card-inner {
border: 1px solid black;
height: 100px;
width: 100px;
transform-style: preserve-3d;
}
@keyframes flip {
0% {
transform: rotateY(0deg);
}
10% {
transform: rotateY(30deg);
}
70% {
transform: rotateY(30deg);
}
100% {
transform: rotateY(180deg);
}
}
<div >
<div >card</div>
</div>