Component

FAQ Accordion

Landing-page FAQ with numbered badges, category chips, and single-open behavior. Includes a smooth height animation and a contact CTA for product pages.

  • Component
  • Tailwind
  • HTML
  • MIT

What it does

Capabilities

  • Numbered badges
  • Category meta
  • Single-open mode
  • Chevron rotation
  • Hover lift
  • Focus rings

Preview

Live component

Interactive preview
Open preview
9:41 100%
devsnips.site/library/tailwind/components/accordions/faq-accordion/
fluid · no fixed width 100%
No dependencies Production-ready

Install

Add to your project

terminal
npx devsnips add Tailwind/Components/Accordions/faq-accordion
registry path: Tailwind/Components/Accordions/faq-accordion

Source

Implementation

code.html
<!--
Snippet Name: FAQ Accordion
Description: Landing-page FAQ with numbered badges, category chips, and a contact CTA. Single-open behavior with smooth height animation.
Author: DevSnips Contributors
Usage Example: Product landing pages where only one answer shows at a time.
-->
<div class="space-y-3" data-accordion="faq" data-single-open>
  <div class="group rounded-2xl border border-gray-200 bg-white p-5 transition-all duration-300 hover:border-gray-300 hover:shadow-sm" data-accordion-item>
    <h3>
      <button type="button" id="faq-trigger-1" aria-controls="faq-panel-1" aria-expanded="false" class="accordion-trigger flex w-full items-start gap-4 text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-violet-500 focus-visible:ring-offset-2 rounded-xl">
        <span class="flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-violet-50 text-xs font-semibold text-violet-700">01</span>
        <span class="min-w-0 flex-1 pt-0.5">
          <span class="block text-[15px] font-semibold text-gray-900">What makes DevSnips different from a UI kit?</span>
          <span class="mt-0.5 block text-xs text-gray-400">Product</span>
        </span>
        <svg class="accordion-chevron mt-0.5 h-5 w-5 shrink-0 text-gray-400 transition-transform duration-300 ease-out" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/></svg>
      </button>
    </h3>
    <div id="faq-panel-1" role="region" aria-labelledby="faq-trigger-1" class="accordion-panel grid grid-rows-[0fr] transition-[grid-template-rows] duration-300 ease-out">
      <div class="overflow-hidden">
        <p class="pl-11 pt-3 text-sm leading-relaxed text-gray-600">Unlike a UI kit that ships bundled components, DevSnips gives you copy-paste snippets organized by family. You adopt only what you need, keep full control of your markup, and never inherit a runtime dependency or global stylesheet.</p>
      </div>
    </div>
  </div>

  <div class="group rounded-2xl border border-gray-200 bg-white p-5 transition-all duration-300 hover:border-gray-300 hover:shadow-sm" data-accordion-item>
    <h3>
      <button type="button" id="faq-trigger-2" aria-controls="faq-panel-2" aria-expanded="false" class="accordion-trigger flex w-full items-start gap-4 text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-violet-500 focus-visible:ring-offset-2 rounded-xl">
        <span class="flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-violet-50 text-xs font-semibold text-violet-700">02</span>
        <span class="min-w-0 flex-1 pt-0.5">
          <span class="block text-[15px] font-semibold text-gray-900">Do I need a build step or framework?</span>
          <span class="mt-0.5 block text-xs text-gray-400">Workflow</span>
        </span>
        <svg class="accordion-chevron mt-0.5 h-5 w-5 shrink-0 text-gray-400 transition-transform duration-300 ease-out" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/></svg>
      </button>
    </h3>
    <div id="faq-panel-2" role="region" aria-labelledby="faq-trigger-2" class="accordion-panel grid grid-rows-[0fr] transition-[grid-template-rows] duration-300 ease-out">
      <div class="overflow-hidden">
        <p class="pl-11 pt-3 text-sm leading-relaxed text-gray-600">No. Every snippet is plain HTML and Tailwind classes with a sprinkle of vanilla JavaScript for interactivity. Drop it into any project, static site, or framework, the only requirement is Tailwind in your stylesheet.</p>
      </div>
    </div>
  </div>

  <div class="group rounded-2xl border border-gray-200 bg-white p-5 transition-all duration-300 hover:border-gray-300 hover:shadow-sm" data-accordion-item>
    <h3>
      <button type="button" id="faq-trigger-3" aria-controls="faq-panel-3" aria-expanded="false" class="accordion-trigger flex w-full items-start gap-4 text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-violet-500 focus-visible:ring-offset-2 rounded-xl">
        <span class="flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-violet-50 text-xs font-semibold text-violet-700">03</span>
        <span class="min-w-0 flex-1 pt-0.5">
          <span class="block text-[15px] font-semibold text-gray-900">Is it really free for commercial use?</span>
          <span class="mt-0.5 block text-xs text-gray-400">Licensing</span>
        </span>
        <svg class="accordion-chevron mt-0.5 h-5 w-5 shrink-0 text-gray-400 transition-transform duration-300 ease-out" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/></svg>
      </button>
    </h3>
    <div id="faq-panel-3" role="region" aria-labelledby="faq-trigger-3" class="accordion-panel grid grid-rows-[0fr] transition-[grid-template-rows] duration-300 ease-out">
      <div class="overflow-hidden">
        <p class="pl-11 pt-3 text-sm leading-relaxed text-gray-600">Yes. DevSnips is MIT-licensed, so you can use it in client work, paid products, and internal tools without attribution. A Pro tier exists only for premium layouts, never for the core library.</p>
      </div>
    </div>
  </div>

  <div class="group rounded-2xl border border-gray-200 bg-white p-5 transition-all duration-300 hover:border-gray-300 hover:shadow-sm" data-accordion-item>
    <h3>
      <button type="button" id="faq-trigger-4" aria-controls="faq-panel-4" aria-expanded="false" class="accordion-trigger flex w-full items-start gap-4 text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-violet-500 focus-visible:ring-offset-2 rounded-xl">
        <span class="flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-violet-50 text-xs font-semibold text-violet-700">04</span>
        <span class="min-w-0 flex-1 pt-0.5">
          <span class="block text-[15px] font-semibold text-gray-900">How often is the library updated?</span>
          <span class="mt-0.5 block text-xs text-gray-400">Roadmap</span>
        </span>
        <svg class="accordion-chevron mt-0.5 h-5 w-5 shrink-0 text-gray-400 transition-transform duration-300 ease-out" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/></svg>
      </button>
    </h3>
    <div id="faq-panel-4" role="region" aria-labelledby="faq-trigger-4" class="accordion-panel grid grid-rows-[0fr] transition-[grid-template-rows] duration-300 ease-out">
      <div class="overflow-hidden">
        <p class="pl-11 pt-3 text-sm leading-relaxed text-gray-600">New families and variants ship every two weeks. Subscribe to the changelog for a diff of every release, or watch the repository to get notified the moment a new component lands.</p>
      </div>
    </div>
  </div>

  <script>
    (function () {
      const root = document.currentScript.closest('[data-accordion]');
      if (!root) return;
      const singleOpen = root.hasAttribute('data-single-open');
      const items = Array.from(root.querySelectorAll('[data-accordion-item]'));
      items.forEach((item) => {
        const trigger = item.querySelector('.accordion-trigger');
        const panel = item.querySelector('.accordion-panel');
        const chevron = item.querySelector('.accordion-chevron');
        if (!trigger || !panel) return;
        const close = () => {
          trigger.setAttribute('aria-expanded', 'false');
          panel.classList.remove('grid-rows-[1fr]');
          panel.classList.add('grid-rows-[0fr]');
          if (chevron) chevron.style.transform = '';
        };
        const open = () => {
          trigger.setAttribute('aria-expanded', 'true');
          panel.classList.add('grid-rows-[1fr]');
          panel.classList.remove('grid-rows-[0fr]');
          if (chevron) chevron.style.transform = 'rotate(180deg)';
        };
        trigger.addEventListener('click', () => {
          const isOpen = trigger.getAttribute('aria-expanded') === 'true';
          if (singleOpen) items.forEach((o) => { if (o !== item) { const t = o.querySelector('.accordion-trigger'); const p = o.querySelector('.accordion-panel'); const c = o.querySelector('.accordion-chevron'); t.setAttribute('aria-expanded','false'); p.classList.remove('grid-rows-[1fr]'); p.classList.add('grid-rows-[0fr]'); if (c) c.style.transform=''; } });
          isOpen ? close() : open();
        });
      });
    })();
  </script>
</div>
111 lines UTF-8 · LF · Spaces: 2
DevSnips AI ready Claude · Cursor · Windsurf

Agent skill & Model Context Protocol

Pass this component straight into your AI workflow. DevSnips exposes each resource as a structured, addressable registry entry, so your agent installs the real files instead of approximating them.

devsnips://components/accordions/faq-accordion
Prompt instruction
I want to use this DevSnips resource in production:

Page:
https://devsnips.site/library/tailwind/components/accordions/faq-accordion/

Install: npx devsnips add
Tailwind/Components/Accordions/faq-accordion

This is the FAQ Accordion — Landing-page FAQ with numbered badges, category chips, and single-open behavior. Includes a smooth height animation and a contact CTA for product pages.

Use this DevSnips resource as the starting point for my project.
Adapt it to my project's stack and conventions, fix any issues,
and make it production-ready while preserving its intended design
and behavior.

Paste into ChatGPT, Claude or your agent — it already carries the page URL and the exact install path.

Resource URI
devsnips://components/accordions/faq-accordion