<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>

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.