A simple, easily configurable accordion or collapsible for Vue, styled with Bulma.
Full docs here
- SSR Support!
$ npm install --save vue-bulma-accordion $ yarn add vue-bulma-accordion # Bulma is a peer dependency, you have to install it manually $ yarn add bulma $ npm install --save bulmaSingle File Component:
import { BulmaAccordion, BulmaAccordionItem } from 'vue-bulma-accordion' export default { name: 'cool-component', data() { return {} }, components: { BulmaAccordion, BulmaAccordionItem } }Put a <BulmaAccordion> item on your page. There are a few options for the accordion, though they have sensible defaults if you dont want to change anything:
- dropdown
- Boolean
- If
true, allows any number of items to be expanded simultaneously, rather than only 1 at a time
- initialOpenItem
- Number | String
- The index of the item you want to be open when the component is done rendering
- N.B. Indexing is 1 based - the first item is item 1
- This takes precedence over initialOpenItems if both are set
- initialOpenItems
- Number[]
- The indexes of the item you want to be open when the component is done rendering
- N.B. Indexing is 1 based - the first item is item 1
- icon
- String
- The icon on the right hand side of the title bar
- There are 3 options
'caret''plus-minus''custom'- with this selected, you can provide your own icon in a slot, inside each accordion item. Either provide one icon in the'icon'slot, or a separate icon for when that accordion item is open or closed, in the'icon-open'and'icon-closed'slots
- caretAnimation
- Object
- duration: String - CSS valid duration, like
'450ms' - timerFunc: String - CSS valid timer function, like
'ease' - none: Boolean - set to false to disable animation
- duration: String - CSS valid duration, like
- If you select the 'caret' icon, this tunes the animation
- 'none' - the default. The arrow simply switches instantly
- 'spin' - the arrow rotates and expands slightly
- Object
- slide
- Object
- duration: String - CSS valid duration, like
'700ms' - timerFunc: String - CSS valid timer function, like
'ease'
- duration: String - CSS valid duration, like
- Allows configuration of the slide animation for each accordion item
- Object
Fill the <BulmaAccordion> with as many <BulmaAccordionItem> components as you need. Each of the <BulmaAccordionItem> components has 3 slots, if you're not using a custom icon:
title- I've found<h4 class="title is-4 has-text-weight-normal" slot="title">The Title</h4>to look quite nicecontentfooter
There are a further 3 slots for custom icons:
icon- when you just want 1 icon, DON'T USE WITHicon-openandicon-closedicon-open- the icon shown when the<BulmaAccordionItem>is openicon-closed- the icon shown when the<BulmaAccordionItem>is closed
<BulmaAccordion dropdown :icon="'caret'" :caretAnimation="{ duration: '.6s', timerFunc: 'ease-in-out' }" :slide="{ duration: '.9s', timerFunc: 'ease' }" > <!-- The wrapper component for all the items --> <BulmaAccordionItem> <h4 slot="title">Just a title</h4> </BulmaAccordionItem> <!-- add as many of these items as you need - fill them with content via the slots --> <BulmaAccordionItem> <h4 slot="title">A title with content</h4> <p slot="content"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Natus eos illo expedita asperiores rem iure aliquid dolore, pariatur dignissimos, minima inventore? Minima voluptatum nulla, error omnis laboriosam voluptatibus rem aperiam. </p> </BulmaAccordionItem> <BulmaAccordionItem> <h4 slot="title">All of it</h4> <p slot="content">boo</p> <button class="button is-primary" slot="footer">Click Me!</button> </BulmaAccordionItem> </BulmaAccordion>The icons used here are from https://material.io/icons/
<BulmaAccordion :dropdown="false" :icon="'custom'"> <!-- The wrapper component for all the items --> <BulmaAccordionItem> <p class="title is-4 has-text-weight-normal" slot="title">Title</p> <i slot="icon" class="material-icons">more_vert</i> <div class="high" slot="content"><p>This is a div with content</p></div> <button class="button is-primary" slot="footer">Click Me!</button> </BulmaAccordionItem> <!-- add as many of these items as you need - fill them with content via the slots --> <BulmaAccordionItem> <h4 slot="title">A title with content</h4> <i slot="icon-closed" class="material-icons">flight_takeoff</i> <i slot="icon-open" class="material-icons">flight_land</i> <p slot="content"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Natus eos illo expedita asperiores rem iure aliquid dolore, pariatur dignissimos, minima inventore? Minima voluptatum nulla, error omnis laboriosam voluptatibus rem aperiam. </p> </BulmaAccordionItem> </BulmaAccordion>