ComponentsContent

FAQ Accordion

Accordion built on native HTML details/summary. No JavaScript needed, fully accessible, keyboard navigable.

Preview

Questions.

Is it free?

Yes. BSD and MIT licensed, open source on GitHub.

Does it support Markdown?

Yes, via the optional markdown extra.

Can I use Tailwind?

Yes. Nitro outputs plain HTML, so any CSS framework works.

Code

from nitro_ui import Div, H2, Section, Partial


FAQS = [
    {"q": "Is it free?", "a": "Yes. BSD and MIT licensed, open source on GitHub."},
    {"q": "Does it support Markdown?", "a": "Yes, via the optional markdown extra."},
    {"q": "Can I use Tailwind?", "a": "Yes. Nitro outputs plain HTML, so any CSS framework works."},
]


def FaqItem(item):
    return Partial(
        f"""<details class="faq-item">
  <summary class="faq-question">{item["q"]}</summary>
  <div class="faq-answer"><p>{item["a"]}</p></div>
</details>"""
    )


def Faq():
    return Section(
        Div(
            H2("Questions.", cls="section-title"),
            Div(*[FaqItem(f) for f in FAQS], cls="faq-list"),
            cls="container faq-container",
        ),
        cls="faq-section",
    )