Vissza a webes elemekhez
Értesítések és panelek

Interaktív FAQ

Élő előnézet – a komponens teljes méretben.

Élő előnézet
HTML · CSS · JS
HTML
<section class="we-faq" aria-labelledby="we-faq-title">
    <div class="we-faq__intro">
        <span class="we-faq__eyebrow">SEGÍTÜNK ELIGAZODNI</span>
        <h2 id="we-faq-title">Gyakori kérdések</h2>
        <p>A legfontosabb tudnivalók egy helyen.</p>
    </div>

    <div class="we-faq__list">
        <article class="we-faq__item">
            <h3 class="we-faq__heading">
                <button class="we-faq__question"
                        type="button"
                        aria-expanded="false">
                    <span>Hogyan működik a szolgáltatás?</span>
                    <span class="we-faq__icon" aria-hidden="true">+</span>
                </button>
            </h3>
            <div class="we-faq__answer" hidden>
                <p>A szolgáltatás használata egyszerű és átlátható.
                Válaszd ki a számodra megfelelő lehetőséget, majd
                kövesd a megjelenő útmutatást.</p>
            </div>
        </article>

        <article class="we-faq__item">
            <h3 class="we-faq__heading">
                <button class="we-faq__question"
                        type="button"
                        aria-expanded="false">
                    <span>Később módosíthatom a beállításokat?</span>
                    <span class="we-faq__icon" aria-hidden="true">+</span>
                </button>
            </h3>
            <div class="we-faq__answer" hidden>
                <p>Igen, a módosítható beállításokat később is
                megváltoztathatod, így a megoldást az igényeidhez
                igazíthatod.</p>
            </div>
        </article>

        <article class="we-faq__item">
            <h3 class="we-faq__heading">
                <button class="we-faq__question"
                        type="button"
                        aria-expanded="false">
                    <span>Mobiltelefonon is használható?</span>
                    <span class="we-faq__icon" aria-hidden="true">+</span>
                </button>
            </h3>
            <div class="we-faq__answer" hidden>
                <p>Igen. A kialakítás alkalmazkodik a kisebb
                képernyőkhöz is, így mobilon és táblagépen
                egyaránt kényelmesen használható.</p>
            </div>
        </article>

        <article class="we-faq__item">
            <h3 class="we-faq__heading">
                <button class="we-faq__question"
                        type="button"
                        aria-expanded="false">
                    <span>Hol kérhetek további segítséget?</span>
                    <span class="we-faq__icon" aria-hidden="true">+</span>
                </button>
            </h3>
            <div class="we-faq__answer" hidden>
                <p>További kérdés esetén keresd fel az oldal
                kapcsolatfelvételi felületét, és írd meg,
                miben van szükséged segítségre.</p>
            </div>
        </article>
    </div>
</section>
CSS
.we-faq {
    --faq-accent: #55d6a0;
    --faq-text: #edf5f1;
    --faq-muted: #a1b0a9;
    --faq-border: rgba(163, 194, 177, 0.16);

    width: 100%;
    max-width: 820px;
    margin: 0 auto;
    padding: 48px 24px;
    color: var(--faq-text);
    background: #111a18;
    border: 1px solid var(--faq-border);
    border-radius: 20px;
    font-family: Inter, Arial, sans-serif;
    box-sizing: border-box;
}

.we-faq *,
.we-faq *::before,
.we-faq *::after {
    box-sizing: border-box;
}

.we-faq__intro {
    margin-bottom: 30px;
}

.we-faq__eyebrow {
    display: inline-block;
    margin-bottom: 12px;
    color: var(--faq-accent);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 2px;
}

.we-faq__intro h2 {
    margin: 0 0 12px;
    color: var(--faq-text);
    font-size: clamp(28px, 4vw, 38px);
    font-weight: 600;
    letter-spacing: -1px;
    line-height: 1.2;
}

.we-faq__intro p {
    margin: 0;
    color: var(--faq-muted);
    font-size: 15px;
    line-height: 1.7;
}

.we-faq__list {
    border-top: 1px solid var(--faq-border);
}

.we-faq__item {
    border-bottom: 1px solid var(--faq-border);
}

.we-faq__heading {
    margin: 0;
    font-size: inherit;
}

.we-faq__question {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    width: 100%;
    padding: 22px 2px;
    border: 0;
    background: transparent;
    color: var(--faq-text);
    text-align: left;
    font: inherit;
    font-size: 15px;
    font-weight: 600;
    line-height: 1.6;
    cursor: pointer;
}

.we-faq__question:hover {
    color: var(--faq-accent);
}

.we-faq__question:focus-visible {
    outline: 2px solid var(--faq-accent);
    outline-offset: 4px;
    border-radius: 4px;
}

.we-faq__icon {
    display: flex;
    flex: 0 0 30px;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border: 1px solid var(--faq-border);
    border-radius: 9px;
    color: var(--faq-accent);
    font-size: 21px;
    font-weight: 400;
    transition: background 0.25s ease,
                transform 0.25s ease;
}

.we-faq__question[aria-expanded="true"] .we-faq__icon {
    background: rgba(85, 214, 160, 0.1);
    transform: rotate(45deg);
}

.we-faq__answer {
    padding: 0 42px 22px 2px;
    color: var(--faq-muted);
    font-size: 14px;
    line-height: 1.85;
    animation: we-faq-reveal 0.25s ease;
}

.we-faq__answer[hidden] {
    display: none;
}

.we-faq__answer p {
    margin: 0;
}

@keyframes we-faq-reveal {
    from {
        opacity: 0;
        transform: translateY(-5px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@media (max-width: 520px) {
    .we-faq {
        padding: 32px 18px;
        border-radius: 14px;
    }

    .we-faq__question {
        padding: 18px 0;
        font-size: 14px;
    }

    .we-faq__answer {
        padding-right: 8px;
        padding-bottom: 20px;
    }
}

@media (prefers-reduced-motion: reduce) {
    .we-faq__icon {
        transition: none;
    }

    .we-faq__answer {
        animation: none;
    }
}
JavaScript
(function () {
    "use strict";

    function initFaqs() {
        const faqSections = document.querySelectorAll(".we-faq");

        faqSections.forEach(function (faq) {
            if (faq.dataset.faqInitialized === "true") {
                return;
            }

            faq.dataset.faqInitialized = "true";

            const questions = faq.querySelectorAll(
                ".we-faq__question"
            );

            questions.forEach(function (question) {
                question.addEventListener("click", function () {
                    const item = question.closest(".we-faq__item");

                    if (!item) {
                        return;
                    }

                    const answer = item.querySelector(
                        ".we-faq__answer"
                    );

                    const isExpanded =
                        question.getAttribute("aria-expanded") === "true";

                    question.setAttribute(
                        "aria-expanded",
                        String(!isExpanded)
                    );

                    if (answer) {
                        answer.hidden = isExpanded;
                    }
                });
            });
        });
    }

    if (document.readyState === "loading") {
        document.addEventListener("DOMContentLoaded", initFaqs);
    } else {
        initFaqs();
    }
})();