Accordion
Components
Attributes: alwaysOpen
Functions: open close
$$props: class
Attributes: active disabled lazy loadOnce
Slots: header body
Events: open close
$$props: class
Internal css classes
- active, disabled
- accordion-header
- accordion-collapse, collapse, show
Default Accordion
The default Accordion loads all content and only one AccordionItem can be active at a time. Disabled Items won't be activated, but their content will be loaded regardless.
Body 1
0
Body 2
0
Body 3
0
Body 4
0
<Accordion>
<AccordionItem>
<div slot="header">
...
</div>
<div slot="body">
...
</div>
</AccordionItem>
<AccordionItem>
<div slot="header">
...
</div>
<div slot="body">
...
</div>
</AccordionItem>
...
</Accordion>
It's also possible to preselect an Item with active
.
Body 1
0
Body 2
0
Body 3
0
Body 4
0
<Accordion>
<AccordionItem active>
<div slot="header">
...
</div>
<div slot="body">
...
</div>
</AccordionItem>
<AccordionItem>
<div slot="header">
...
</div>
<div slot="body">
...
</div>
</AccordionItem>
</Accordion>
To have multiple AccordionItems active, add allwasOpen
to Accordion
.
Body 1
0
Body 2
0
Body 3
0
Body 4
0
Body 1
0
Body 2
0
Body 3
0
Body 4
0
<Accordion alwaysOpen>
<AccordionItem>
<div slot="header">
...
</div>
<div slot="body">
...
</div>
</AccordionItem>
</Accordion>
Lazyload and Persistence
It's possible to lazyload Accordion Content by adding lazy
to AccordionItem
.
Keep in mind the content will be loaded every time the item is activated. To only load it once, add loadOnce
.
Body 1
0
Body 3
0
<Accordion>
<AccordionItem lazy>
<div slot="header">
...
</div>
<div slot="body">
...
</div>
</AccordionItem>
<AccordionItem lazy loadOnce>
<div slot="header">
...
</div>
<div slot="body">
...
</div>
</AccordionItem>
...
</Accordion>
Nested Accordions
If neccessary, Accordions can be nested.
Body 1
0
Body 2
0
Body 3
0
Body 4
0
Body 1
0
Body 2
0
Body 3
0
Body 4
0
<Accordion>
<AccordionItem>
<div slot="header">
...
</div>
<div slot="body">
<Accordion>
<AccordionItem>
<div slot="header">
...
</div>
<div slot="body">
...
</div>
</AccordionItem>
<AccordionItem>
<div slot="header">
...
</div>
<div slot="body">
...
</div>
</AccordionItem>
...
</Accordion>
</div>
</AccordionItem>
<AccordionItem>
<div slot="header">
...
</div>
<div slot="body">
...
</div>
</AccordionItem>
...
</Accordion>
Open and close via buttons
If so desired, AccordionItems can be opened and closed via script with open()
and close()
. The number indicates which Item will be opened / closed
Body 1
0
let accordion
<Accordion bind:this={accordion}>
<AccordionItem lazy>
<div slot="body">
<button on:click={() => {accordion.open(2)}}></button>
...
</div>
</AccordionItem>
<AccordionItem lazy loadOnce>
...
</AccordionItem>
...
</Accordion>