I am trying to create a flip card to maximize space on a webpage. When I toggle the flipCard function, the card flips but doesn't show the back and the front remains visible but is mirrored. Does anyone know why this is happening? The front of the card will consist of headings and the back is a UL.
Thanks for any help and your time!
const card = document.getElementById("card")
card.addEventListener("click", flipCard);
function flipCard() {
card.classList.toggle("flipCard");
}
.cards {
background: linear-gradient(
to bottom,
rgba(52, 52, 52, 0.4),
rgba(52, 52, 52, 0.1));
backdrop-filter: blur(10px);
border-radius: 10px;
box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
position: relative;
transform-style: preserve-3d;
transition: all 0.8s ease;
z-index: 10;
perspective: 1000px;
width: 400px;
}
.card-front {
position: absolute;
width: 100%;
height: 100%;
text-align: center;
backface-visibility: hidden;
z-index: 0;
}
.card-back {
position: absolute;
width: 100%;
height: 100%;
transform: rotateY(180deg);
backface-visibility: hidden;
z-index: 0;
}
.flipCard {
transform: rotateY(180deg);
}
.card.b {
flex-direction: column;
}
.ul-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
font-size: 12px;
align-items: center;
justify-content: center;
text-align: center;
line-height: 1.2;
padding: 3px;
grid-gap: 0.5rem;
position: relative;
}
.d {
grid-column: 2;
grid-row: 6;
padding: 0 2rem;
}
.d li {
font-family: 'Oswald', sans-serif;
font-size: 1rem;
}
<div id="card" >
<div >
<h1>
This is the front!
</h1>
</div>
<div >
<ul><span >SM.PINKY</span>
<li><span >(1)</span> $1.50</li>
<li><span >(6)</span> $8.50</li>
<li><span >(12)</span> $16</li>
</ul>
<ul><span >PINKY</span>
<li><span >(1)</span> $1.50 </li>
<li><span >(6)</span> $8.50 </li>
<li><span >(12)</span> $16 </li>
</ul>
<ul><span >FUZZY</span>
<li><span >(1)</span> $2.00 </li>
<li><span >(6)</span> $11.50</li>
<li><span >(12)</span> $22</li>
</ul>
<ul><span >HOPPER</span>
<li><span >(1)</span> $2.50 </li>
<li><span >(6)</span> $14.50</li>
<li><span >(12)</span> $28</li>
</ul>
<ul><span >SMALL</span>
<li><span >(1)</span> $3.00 </li>
<li><span >(6)</span> $17.50</li>
<li><span >(12)</span> $34</li>
</ul>
<ul><span >MEDIUM</span>
<li><span >(1)</span> $3.50 </li>
<li><span >(6)</span> $20.50</li>
<li><span >(12)</span> $40</li>
</ul>
<ul><span >LARGE</span>
<li><span >(1)</span> $4.00 </li>
<li><span >(6)</span> $23.50</li>
<li><span >(12)</span> $46</li>
</ul>
<ul><span >JUMBO</span>
<li><span >(1)</span> $4.50 </li>
<li><span >(6)</span> $26.50</li>
<li><span >(12)</span> $52</li>
</ul>
</div>
</div>
CodePudding user response:
I am not sure why but removing the backdrop-filter makes it work.
Please read more about this problem from this post
You can use -webkit-backdrop-filter: blur(10px); as a work around,
I haveupdated the code...
const card = document.getElementById("card")
card.addEventListener("click", flipCard);
function flipCard() {
card.classList.toggle("flipCard");
}
.cards {
background: linear-gradient(
to bottom,
rgba(52, 52, 52, 0.4),
rgba(52, 52, 52, 0.1));
/*backdrop-filter: blur(10px);*/
-webkit-backdrop-filter: blur(10px);
border-radius: 10px;
box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
position: relative;
transform-style: preserve-3d;
transition: all 0.8s ease;
z-index: 10;
perspective: 1000px;
width: 400px;
}
.card-front {
position: absolute;
width: 100%;
height: 100%;
text-align: center;
backface-visibility: hidden;
z-index: 0;
}
.card-back {
position: absolute;
width: 100%;
height: 100%;
transform: rotateY(180deg);
backface-visibility: hidden;
z-index: 0;
}
.flipCard {
transform: rotateY(180deg);
}
.card.b {
flex-direction: column;
}
.ul-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
font-size: 12px;
align-items: center;
justify-content: center;
text-align: center;
line-height: 1.2;
padding: 3px;
grid-gap: 0.5rem;
position: relative;
}
.d {
grid-column: 2;
grid-row: 6;
padding: 0 2rem;
}
.d li {
font-family: 'Oswald', sans-serif;
font-size: 1rem;
}
<div id="card" >
<div >
<h1>
This is the front!
</h1>
</div>
<div >
<ul><span >SM.PINKY</span>
<li><span >(1)</span> $1.50</li>
<li><span >(6)</span> $8.50</li>
<li><span >(12)</span> $16</li>
</ul>
<ul><span >PINKY</span>
<li><span >(1)</span> $1.50 </li>
<li><span >(6)</span> $8.50 </li>
<li><span >(12)</span> $16 </li>
</ul>
<ul><span >FUZZY</span>
<li><span >(1)</span> $2.00 </li>
<li><span >(6)</span> $11.50</li>
<li><span >(12)</span> $22</li>
</ul>
<ul><span >HOPPER</span>
<li><span >(1)</span> $2.50 </li>
<li><span >(6)</span> $14.50</li>
<li><span >(12)</span> $28</li>
</ul>
<ul><span >SMALL</span>
<li><span >(1)</span> $3.00 </li>
<li><span >(6)</span> $17.50</li>
<li><span >(12)</span> $34</li>
</ul>
<ul><span >MEDIUM</span>
<li><span >(1)</span> $3.50 </li>
<li><span >(6)</span> $20.50</li>
<li><span >(12)</span> $40</li>
</ul>
<ul><span >LARGE</span>
<li><span >(1)</span> $4.00 </li>
<li><span >(6)</span> $23.50</li>
<li><span >(12)</span> $46</li>
</ul>
<ul><span >JUMBO</span>
<li><span >(1)</span> $4.50 </li>
<li><span >(6)</span> $26.50</li>
<li><span >(12)</span> $52</li>
</ul>
</div>
</div>
CodePudding user response:
Might not be 100% efficient but this does what you describe
const card = document.getElementById("card")
card.addEventListener("click", flipCard);
function flipCard() {
let cInner = card.querySelector('.card-flip-inner');
let cfront = card.querySelector('.card-front');
let cback = card.querySelector('.card-back');
cInner.classList.toggle("flipped");
cfront.classList.toggle("hidden-card");
cback.classList.toggle("shown-card");
}
.cards {
background: linear-gradient( to bottom, rgba(52, 52, 52, 0.4), rgba(52, 52, 52, 0.1));
backdrop-filter: blur(10px);
border-radius: 10px;
box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
transform-style: preserve-3d;
z-index: 10;
perspective: 1000px;
width: 400px;
}
.card-flip-inner {
position: relative;
width: 100%;
height: 100%;
text-align: center;
transition: all 0.8s ease;
/*transition: transform 0.8s;*/
transform-style: preserve-3d;
}
.flipped {
transform: rotateY(180deg);
}
.card-front {
position: absolute;
width: 100%;
height: 100%;
text-align: center;
backface-visibility: hidden;
z-index: 0;
}
.card-back {
position: absolute;
width: 100%;
height: 100%;
transform: rotateY(180deg);
backface-visibility: hidden;
z-index: 0;
}
.flipCard {
transform: rotateY(180deg);
}
.card.b {
flex-direction: column;
}
.ul-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
font-size: 12px;
align-items: center;
justify-content: center;
text-align: center;
line-height: 1.2;
padding: 3px;
grid-gap: 0.5rem;
position: relative;
}
.d {
grid-column: 2;
grid-row: 6;
padding: 0 2rem;
}
.d li {
font-family: 'Oswald', sans-serif;
font-size: 1rem;
}
.shown-card {
visibiiity: visible;
backface-visibility: hidden;
}
.hidden-card {
visibiiity: visible;
backface-visibility: hidden;
}
<div id="card" >
<div >
<div >
<h1>
This is the front!
</h1>
</div>
<div >
<ul><span >SM.PINKY</span>
<li><span >(1)</span> $1.50</li>
<li><span >(6)</span> $8.50</li>
<li><span >(12)</span> $16</li>
</ul>
<ul><span >PINKY</span>
<li><span >(1)</span> $1.50 </li>
<li><span >(6)</span> $8.50 </li>
<li><span >(12)</span> $16 </li>
</ul>
<ul><span >FUZZY</span>
<li><span >(1)</span> $2.00 </li>
<li><span >(6)</span> $11.50</li>
<li><span >(12)</span> $22</li>
</ul>
<ul><span >HOPPER</span>
<li><span >(1)</span> $2.50 </li>
<li><span >(6)</span> $14.50</li>
<li><span >(12)</span> $28</li>
</ul>
<ul><span >SMALL</span>
<li><span >(1)</span> $3.00 </li>
<li><span >(6)</span> $17.50</li>
<li><span >(12)</span> $34</li>
</ul>
<ul><span >MEDIUM</span>
<li><span >(1)</span> $3.50 </li>
<li><span >(6)</span> $20.50</li>
<li><span >(12)</span> $40</li>
</ul>
<ul><span >LARGE</span>
<li><span >(1)</span> $4.00 </li>
<li><span >(6)</span> $23.50</li>
<li><span >(12)</span> $46</li>
</ul>
<ul><span >JUMBO</span>
<li><span >(1)</span> $4.50 </li>
<li><span >(6)</span> $26.50</li>
<li><span >(12)</span> $52</li>
</ul>
</div>
</div>
</div>
