Svelte Accordion - Flowbite
Use the accordion component to show hidden information based on the collapse and expand state of the child elements using data attribute options
The accordion component is a collection of vertically collapsing header and body elements that can be used to show and hide information based on the Tailwind CSS utility classes and JavaScript from Flowbite.
A popular use case would be the “Frequently Asked Questions” section of a website or page when you can show questions and answers for each child element.
Setup #
- Svelte
<script>
import { AccordionItem, Accordion } from "flowbite-svelte";
</script>
Default accordion #
Accordion uses the single selection mode by default i.e. it collapses every other child element when expanding a one.
To prevent that behavior set multiple
property to true
.
- Svelte
<script>
import { AccordionItem, Accordion } from "flowbite-svelte";
</script>
<Accordion>
<AccordionItem>
{#snippet header()}My Header 1{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
<p class="text-gray-500 dark:text-gray-400">
Check out this guide to learn how to <a href="/" target="_blank" rel="noreferrer" class="text-blue-600 hover:underline dark:text-blue-500">get started</a>
and start developing websites even faster with components on top of Tailwind CSS.
</p>
</AccordionItem>
<AccordionItem>
{#snippet header()}My Header 2{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
<p class="mb-2 text-gray-500 dark:text-gray-400">Learn more about these technologies:</p>
<ul class="list-disc ps-5 text-gray-500 dark:text-gray-400">
<li>
<a href="/" target="_blank" rel="noreferrer" class="text-blue-600 hover:underline dark:text-blue-500">Lorem ipsum</a>
</li>
<li>
<a href="https://tailwindui.com/" rel="noreferrer" target="_blank" class="text-blue-600 hover:underline dark:text-blue-500">Tailwind UI</a>
</li>
</ul>
</AccordionItem>
</Accordion>
Always open #
Use the open
prop to make an item open on mount.
- Svelte
<script>
import { AccordionItem, Accordion } from "flowbite-svelte";
</script>
<Accordion>
<AccordionItem open>
{#snippet header()}Header 2-1{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
</AccordionItem>
<AccordionItem>
{#snippet header()}Header 2-2{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
</AccordionItem>
</Accordion>
Color option #
You can control the look and feel of AccordionItems
by overwriting the activeClass
and inactiveClass
properties. You can define them in Accordion
so that they will apply to all children or set them individually on each AccordionItem
.
- Svelte
<script>
import { AccordionItem, Accordion } from "flowbite-svelte";
</script>
<Accordion activeClass="bg-blue-100 dark:bg-gray-800 text-blue-600 dark:text-white focus:ring-4 focus:ring-blue-200 dark:focus:ring-blue-800" inactiveClass="text-gray-500 dark:text-gray-400 hover:bg-blue-100 dark:hover:bg-gray-800">
<AccordionItem class="">
{#snippet header()}Header 2-1{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
</AccordionItem>
<AccordionItem>
{#snippet header()}Header 2-2{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
</AccordionItem>
</Accordion>
Flush accordion #
Use flush
prop to remove the rounded borders.
- Svelte
<script>
import { AccordionItem, Accordion } from "flowbite-svelte";
</script>
<Accordion flush>
<AccordionItem>
{#snippet header()}Header 2-1{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
</AccordionItem>
<AccordionItem>
{#snippet header()}Header 2-2{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
</AccordionItem>
</Accordion>
Arrow style #
Use the arrowup
and arrowdown
slots to set up and down icons.
- Svelte
<script>
import { AccordionItem, Accordion } from "flowbite-svelte";
import { ChevronDoubleUpOutline, ChevronDoubleDownOutline } from "flowbite-svelte-icons";
</script>
<Accordion>
<AccordionItem>
{#snippet header()}Header 2-1{/snippet}
{#snippet arrowup()}
<ChevronDoubleUpOutline class="-me-0.5 h-6 w-6" />
{/snippet}
{#snippet arrowdown()}
<ChevronDoubleDownOutline class="-me-0.5 h-6 w-6" />
{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
</AccordionItem>
<AccordionItem>
{#snippet header()}Header 2-2{/snippet}
{#snippet arrowup()}
<ChevronDoubleUpOutline class="-me-0.5 h-6 w-6" />
{/snippet}
{#snippet arrowdown()}
<ChevronDoubleDownOutline class="-me-0.5 h-6 w-6" />
{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
</AccordionItem>
</Accordion>
Icon Accordion #
- Svelte
<script>
import { AccordionItem, Accordion } from "flowbite-svelte";
import { CartSolid, CogOutline } from "flowbite-svelte-icons";
</script>
<Accordion>
<AccordionItem>
{#snippet header()}
<div class="flex items-center gap-2">
<CartSolid />
<span>My Header 1</span>
</div>
{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo...</p>
<p class="text-gray-500 dark:text-gray-400">
Check out this guide to learn how to <a href="/" target="_blank" rel="noreferrer" class="text-blue-600 hover:underline dark:text-blue-500">get started</a>
and start websites even faster with components on top of Tailwind CSS.
</p>
</AccordionItem>
<AccordionItem>
{#snippet header()}
<div class="flex items-center gap-2">
<CogOutline />
<span>My Header 2</span>
</div>
{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sintexplicabo...</p>
</AccordionItem>
</Accordion>
Multiple mode #
Example how to use the multiple
option together with expand all behavior.
- Svelte
<script>
import { AccordionItem, Accordion, Button } from "flowbite-svelte";
const items = [false, false, false];
const open_all = () => items.forEach((_, i) => (items[i] = true));
const close_all = () => items.forEach((_, i) => (items[i] = false));
</script>
<Button onclick={open_all}>Open all</Button>
<Button onclick={close_all}>Close all</Button>
<Accordion multiple>
<AccordionItem bind:open={items[0]}>
{#snippet header()}My Header 1{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
<p class="text-gray-500 dark:text-gray-400">
Check out this guide to learn how to <a href="/" target="_blank" rel="noreferrer" class="text-blue-600 hover:underline dark:text-blue-500">get started</a>
and start developing websites even faster with components on top of Tailwind CSS.
</p>
</AccordionItem>
<AccordionItem bind:open={items[1]}>
{#snippet header()}My Header 2{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
<p class="mb-2 text-gray-500 dark:text-gray-400">Learn more about these technologies:</p>
</AccordionItem>
<AccordionItem bind:open={items[2]}>
{#snippet header()}My Header 3{/snippet}
<p>Something more</p>
</AccordionItem>
</Accordion>
Custom transitions #
The default transition of AccordionItem
s is slide. Use the transitionType
and transitionParams
prop to make custom transitions.
- Svelte
<script>
import { AccordionItem, Accordion } from "flowbite-svelte";
</script>
<Accordion>
<AccordionItem>
{#snippet header()}My Header 1{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
</AccordionItem>
<AccordionItem transitionParams={{ duration: 2000 }}>
{#snippet header()}My Header 2{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
</AccordionItem>
<AccordionItem transitionType="fade" transitionParams={{ duration: 1000 }}>
{#snippet header()}My Header 3{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
</AccordionItem>
</Accordion>
Nesting accordions #
Accordions can be nested. All of the mentioned options are supported.
- Svelte
<Accordion>
<AccordionItem open>
{#snippet header()}My Header 1{/snippet}
<Accordion>
<AccordionItem>
{#snippet header()}My Header 1{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
<p class="text-gray-500 dark:text-gray-400">
Check out this guide to learn how to <a href="/" target="_blank" rel="noreferrer" class="text-blue-600 hover:underline dark:text-blue-500">get started</a>
and start developing websites even faster with components on top of Tailwind CSS.
</p>
</AccordionItem>
<AccordionItem>
{#snippet header()}My Header 2{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
<p class="mb-2 text-gray-500 dark:text-gray-400">Learn more about these technologies:</p>
<ul class="list-disc ps-5 text-gray-500 dark:text-gray-400">
<li><a href="/" target="_blank" rel="noreferrer" class="text-blue-600 hover:underline dark:text-blue-500">Lorem ipsum</a></li>
<li><a href="https://tailwindui.com/" rel="noreferrer" target="_blank" class="text-blue-600 hover:underline dark:text-blue-500">Tailwind UI</a></li>
</ul>
</AccordionItem>
</Accordion>
</AccordionItem>
<AccordionItem>
{#snippet header()}My Header 2{/snippet}
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
<p class="mb-2 text-gray-500 dark:text-gray-400">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab necessitatibus sint explicabo ...</p>
<p class="mb-2 text-gray-500 dark:text-gray-400">Learn more about these technologies:</p>
<ul class="list-disc ps-5 text-gray-500 dark:text-gray-400">
<li><a href="/" target="_blank" rel="noreferrer" class="text-blue-600 hover:underline dark:text-blue-500">Lorem ipsum</a></li>
<li><a href="https://tailwindui.com/" rel="noreferrer" target="_blank" class="text-blue-600 hover:underline dark:text-blue-500">Tailwind UI</a></li>
</ul>
</AccordionItem>
</Accordion>
Component data #
The component has the following props, type, and default values. See types page for type information.
Accordion styling #
- Use the
class
prop to overwritedefaultClass
. - Use the
classActive
prop to overwriteactiveClass
. - Use the
classInactive
prop to overwriteinactiveClass
.
AccordionItem styling #
- Use the
class
prop to overwritedefaultClass
.