v-model
false
Boolean
v-model
to true
reveals the collapsible element, false
value hides itname
empty string
String
transition
"fade-collapse"
String
'fade-collapse'
or empty string
to disable animations. Animation speed can be set in the --collapse-transition-duration
css variable.reference
isOpen
, onTrigger
default
v-button-chevron
v-button
that has indicator build in. It uses the same props as v-button.
Use v-button-chevron
for minimal setup or normal v-button
for more customizing options.You can activate collapse in two ways: by using reference
slot or v-model
. Slot is recommened as it takes minimal set up and can be done in template alone. v-model
can still be used to programatically toggle collapse.
You can wrap group of v-collapse
components with v-accordion
to create accordion. See example below.
Model collapse
Reference slot collapse
<template>
<!-- model collapse -->
<p class="mt-8 mb-4">Model collapse</p>
<v-card>
<v-button-chevron
:switch="example.isVisible"
block
:chevron="{ class: 'ml-auto' }"
@click="example.isVisible = !example.isVisible"
>
Toggle collapse
</v-button-chevron>
<v-collapse
v-model="example.isVisible"
:transition="example.transition"
>
<div class="p-8">
{{ text[0] }}
</div>
</v-collapse>
</v-card>
<!-- reference slot collapse -->
<p class="mt-8 mb-4">Reference slot collapse</p>
<v-card>
<v-collapse :transition="example.transition">
<template #reference="{ isOpen, onTrigger }">
<v-button-chevron
:switch="isOpen"
block
:chevron="{ class: 'ml-auto' }"
v-on="onTrigger"
>
Toggle collapse
</v-button-chevron>
</template>
<div class="p-8">
{{ text[0] }}
</div>
</v-collapse>
</v-card>
</template>
<script setup>
import { reactive } from "vue";
import { text } from "../example-data/data.js";
let example = reactive({
isVisible: false,
transition: "fade-collapse",
});
</script>
Turn collapse components to accordion by wrapping them with v-accordion
component. In accordion mode only one collapse element can be open.
Accordion - controlled by models
Accordion - controlled from reference slot
<template>
<!-- model collapse accordion -->
<p class="mb-4 mt-8">Accordion - controlled by models</p>
<v-accordion class="my-2">
<v-card>
<v-button-chevron
:switch="accordion.isVisible"
block
:chevron="{ class: 'ml-auto' }"
@click="accordion.isVisible = !accordion.isVisible"
>
Toggle collapse
</v-button-chevron>
<v-collapse v-model="accordion.isVisible">
<div class="p-8">
{{ text[0] }}
</div>
</v-collapse>
</v-card>
<v-card class="my-2">
<v-button-chevron
:switch="accordion.isVisible2"
block
:chevron="{ class: 'ml-auto' }"
@click="accordion.isVisible2 = !accordion.isVisible2"
>
Toggle collapse
</v-button-chevron>
<v-collapse v-model="accordion.isVisible2">
<div class="p-8">
{{ text[1] }}
</div>
</v-collapse>
</v-card>
<v-card class="my-2">
<v-button-chevron
:switch="accordion.isVisible3"
block
:chevron="{ class: 'ml-auto' }"
@click="accordion.isVisible3 = !accordion.isVisible3"
>
Toggle collapse
</v-button-chevron>
<v-collapse v-model="accordion.isVisible3">
<div class="p-8">
{{ text[2] }}
</div>
</v-collapse>
</v-card>
</v-accordion>
<!-- reference slot accordion -->
<p class="mb-4 mt-8">Accordion - controlled from reference slot</p>
<v-accordion class="my-2">
<v-card mod-card="shape:square">
<v-collapse>
<template #reference="{ isOpen, onTrigger }">
<v-button-chevron
:switch="isOpen"
mod-button="preset:plain"
block
class="p-3"
:chevron="{ class: 'ml-auto' }"
v-on="onTrigger"
>
Toggle collapse
</v-button-chevron>
</template>
<div class="p-8">
{{ text[0] }}
</div>
</v-collapse>
</v-card>
<v-card
mod-card="shape:square"
class="my-2"
>
<v-collapse>
<template #reference="{ isOpen, onTrigger }">
<v-button-chevron
:switch="isOpen"
mod-button="preset:plain"
block
class="p-3"
:chevron="{ class: 'ml-auto' }"
v-on="onTrigger"
>
Toggle collapse
</v-button-chevron>
</template>
<div class="p-8">
{{ text[1] }}
</div>
</v-collapse>
</v-card>
<v-card
mod-card="shape:square"
class="my-2"
>
<v-collapse>
<template #reference="{ isOpen, onTrigger }">
<v-button-chevron
:switch="isOpen"
mod-button="preset:plain"
block
class="p-3"
:chevron="{ class: 'ml-auto' }"
v-on="onTrigger"
>
Toggle collapse
</v-button-chevron>
</template>
<div class="p-8">
{{ text[0] }}
</div>
</v-collapse>
</v-card>
</v-accordion>
</template>
<script setup>
import { reactive } from "vue";
import { text } from "../example-data/data.js";
let accordion = reactive({
isVisible: false,
isVisible2: false,
isVisible3: false,
});
</script>