JSFiddle - React, Tailwind, and code Playground
by Craig Haywood
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/solid.min.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<div class="accordioncontainer">
<div class="accordion">
<div class="top">
<div class="text">Accordion One</div>
<img src="https://assets-global.website-files.com/63e49089cb05f507aba64457/63e49089cb05f5c614a6446a_icon_plus.svg"
alt="">
<input type="checkbox">
</div>
<div class="bottom">
<div class="text">made using grid-template-rows, transitioning its value to manipulate its rows size
from ".1fr 0fr" to ".1fr 1fr"
</div>
</div>
</div>
<div class="accordion">
<div class="top">
<div class="text">Accordion Two</div>
<img src="https://assets-global.website-files.com/63e49089cb05f507aba64457/63e49089cb05f5c614a6446a_icon_plus.svg"
alt="">
<input type="checkbox">
</div>
<div class="bottom">
<div class="text">made using grid-template-rows, transitioning its value to manipulate its rows size
from ".1fr 0fr" to ".1fr 1fr"
</div>
</div>
</div>
<div class="accordion">
<div class="top">
<div class="text">Accordion Three</div>
<img src="https://assets-global.website-files.com/63e49089cb05f507aba64457/63e49089cb05f5c614a6446a_icon_plus.svg"
alt="">
<input type="checkbox">
</div>
<div class="bottom">
<div class="text">made using grid-template-rows, transitioning its value to manipulate its rows size
from...
CSS
.accordioncontainer {
display: flex;
flex-direction: column;
grid-row-gap: 1rem;
grid-column-gap: 1rem;
max-width: 500px;
margin: 0 auto;
}
.accordion {
background-color: #fff;
border-radius: 1rem;
justify-content: flex-start;
align-items: stretch;
display: grid;
grid-template-columns: 1fr;
grid-template-rows: .1fr 0fr;
overflow: hidden;
transition: grid-template-rows .3s cubic-bezier(0.19, 1, 0.22, 1);
}
.accordion .top {
cursor: pointer;
justify-content: space-between;
align-items: flex-start;
padding: 1.85rem 1.5rem 1.75rem;
display: flex;
position: relative;
}
.accordion .top .text {
font-size: 1.25rem;
font-weight: 700;
white-space: wrap;
}
.accordion .top img {
width: 2rem;
align-self: flex-start;
margin-bottom: .15rem;
margin-left: 1.5rem;
}
img {
display: inline-block;
max-width: 100%;
vertical-align: middle;
border: 0;
transition: transform .3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
.accordion .top input {
position: absolute;
inset: 0;
cursor: pointer;
appearance: none;
}
.accordion .bottom {
padding-inline: 1.5rem;
overflow: hidden;
transition: all .3s cubic-bezier(0.19, 1, 0.22, 1);
}
.accordion .bottom .text {
margin-left: 0;
margin: 0;
}
.accordion:has(input:checked) {
grid-template-rows: .1fr 1fr;
}
.accordion:has(input:checked) .top img {
transform:...