'react-transition-group card flip animation
I'm pretty new to react-transition-group and I'm trying to build a card flipping animation. I'm able to get the first side to flip but it doesn't like the idea of staying put onto the back side. Any ideas what I'm doing wrong here?
import {useState} from "react";
import {CSSTransition} from "react-transition-group";
import "./styles.css";
export default function App() {
const [flipped, setFlipped] = useState(false);
return (
<div className="card-container">
<button
className="card-button"
onClick={() => setFlipped(!flipped)}
>
<CSSTransition
in={flipped}
timeout={1000}
classNames="front-face-transition"
>
<div className="card-front">
<p>front-side</p>
</div>
</CSSTransition>
<CSSTransition
in={!flipped}
timeout={1000}
classNames="back-face-transition"
>
<div className="card-back">
<p>back-side</p>
</div>
</CSSTransition>
</button>
</div>
);
}
.App {
font-family: sans-serif;
text-align: center;
}
.card-container {
width: 250px;
height: 400px;
padding: 0;
margin: 0;
}
.card-container .card-button {
padding: 0;
margin: 0;
border: none;
cursor: pointer;
width: 100%;
height: 100%;
position: relative;
}
.front-face-transition-enter {
transform-style: preserve-3d;
transition: all 1000ms ease;
transform: rotateY(0deg);
}
.front-face-transition-enter-active {
transform: rotateY(180deg);
}
.front-face-transition-enter-done {
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
.back-face-transition-enter {
transform-style: preserve-3d;
transition: all 1000ms ease;
transform: rotateY(0deg);
display: block;
}
.back-face-transition-enter-active {
transform: rotateY(-180deg);
display: block;
}
.back-face-transition-enter-done {
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
.card-front {
display: none;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
Also, here's a working codesandbox link to this code in case that helps as well.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|