<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>css-accordion</title>
<style>
html {
-webkit-text-size-adjust: 100%;
font-family: Poppins, sans-serif;
}
body {
background-color: royalblue;
min-height: 100vh;
display: grid;
place-content: center;
margin: 0;
padding: 0;
}
.container {
display: flex;
flex-direction: column;
grid-row-gap: 1rem;
grid-column-gap: 1rem;
max-width: 500px;
margin: 0 auto;
}
.accordion {
background-color: #ede9e8;
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: rotateZ(45deg);
}
</style>
</head>
<body>
<div class="container">
<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 ".1fr 0fr" to ".1fr 1fr"
</div>
</div>
</div>
<div class="credits"
style="position: absolute; bottom: 0 ;left: 0; width: 100%; margin: 0; color: #e0e0e0; text-align: center;">
made by <a href="https://twitter.com/alishata128" target="_blank"
style="text-decoration: none; color: #222;">Ali Shata</a>
</div>
</body>
</html>
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.