I am trying to flip these cards one by one, but they are flipping all together.
I believe I am missing something on my javaScript.
On the original code I am using images in front and an unordered list in back, I tried to resume it here writing only "Front" and "Back".
$(".flip").click(function() {
$(".card").toggleClass("flipped");
});
.card-container {
display: flex;
}
.card {
width: 300px;
height: 6rem;
margin: 30px;
transform-style: preserve-3d;
transition: transform 1s;
}
.card figure {
margin: 0;
display: block;
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
}
.card figure figcaption {
padding: 0 1rem;
backface-visibility: hidden;
border: 1px solid gray;
}
.card button.flip {
position: absolute;
right: 1rem;
margin: 0;
}
.card button.flip {
top: 1rem;
}
.card .back {
transform: rotateY( 180deg);
}
.card.flipped {
transform: rotateY( 180deg);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="card-container">
<div class="card">
<figure class="front">
<figcaption>
<h2>FRONT 1</h2>
<button class="flip">+</button>
</figcaption>
</figure>
<figure class="back">
<figcaption>
<h2>BACK 1</h2>
<button class="flip">-</button>
</figcaption>
</figure>
</div>
<div class="card">
<figure class="front">
<figcaption>
<h2>FRONT 2</h2>
<button class="flip">+</button>
</figcaption>
</figure>
<figure class="back">
<figcaption>
<h2>BACK 2</h2>
<button class="flip">-</button>
</figcaption>
</figure>
</div>
</div>
Do you guys know what am I doing wrong?
Instead of flipping all elements of class .card, you can flip only the one that the button is in, using the .closest() method (which traverses UP the DOM tree until it finds an element with the specified class).
$(this).closest(".card").toggleClass("flipped");
$(".flip").click(function() {
$(this).closest(".card").toggleClass("flipped");
});
.card-container {
display: flex;
}
.card {
width: 300px;
height: 6rem;
margin: 30px;
transform-style: preserve-3d;
transition: transform 1s;
}
.card figure {
margin: 0;
display: block;
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
}
.card figure figcaption {
padding: 0 1rem;
backface-visibility: hidden;
border: 1px solid gray;
}
.card button.flip {
position: absolute;
right: 1rem;
margin: 0;
}
.card button.flip {
top: 1rem;
}
.card .back {
transform: rotateY( 180deg);
}
.card.flipped {
transform: rotateY( 180deg);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="card-container">
<div class="card">
<figure class="front">
<figcaption>
<h2>FRONT 1</h2>
<button class="flip">+</button>
</figcaption>
</figure>
<figure class="back">
<figcaption>
<h2>BACK 1</h2>
<button class="flip">-</button>
</figcaption>
</figure>
</div>
<div class="card">
<figure class="front">
<figcaption>
<h2>FRONT 2</h2>
<button class="flip">+</button>
</figcaption>
</figure>
<figure class="back">
<figcaption>
<h2>BACK 2</h2>
<button class="flip">-</button>
</figcaption>
</figure>
</div>
</div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With