Skip to content

Collapse

Use collapse panels when content needs to be displayed in sections.

Basic Usage

Multiple panels can be expanded at once by default. You can set which panel is expanded by default.

Panel 1 Title
Panel 2 Title
Panel 3 Title
<template>
  <div>
    <b-collapse v-model="value">
      <b-collapse-panel title="Panel 1 Title" name="1">
        <p v-for="i in 3" :key="i">Content goes here...</p>
      </b-collapse-panel>
      <b-collapse-panel title="Panel 2 Title" name="2">
        <p v-for="i in 3" :key="i">Content goes here...</p>
      </b-collapse-panel>
      <b-collapse-panel title="Panel 3 Title" name="3">
        <p v-for="i in 3" :key="i">Content goes here...</p>
      </b-collapse-panel>
    </b-collapse>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const value = ref('')
</script>

Accordion ModeMode

Set accordion for accordion mode; only one panel can be expanded at a time.

Panel 1 Title
Panel 2 Title
Panel 3 Title
<template>
  <div>
    <b-collapse v-model="value" accordion>
      <b-collapse-panel title="Panel 1 Title" name="1">
        <p v-for="i in 3" :key="i">Content goes here...</p>
      </b-collapse-panel>
      <b-collapse-panel title="Panel 2 Title" name="2">
        <p v-for="i in 3" :key="i">Content goes here...</p>
      </b-collapse-panel>
      <b-collapse-panel title="Panel 3 Title" name="3">
        <p v-for="i in 3" :key="i">Content goes here...</p>
      </b-collapse-panel>
    </b-collapse>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const value = ref('')
</script>

Simple Mode and Custom Header

simple sets simple mode. You can also customize the header via slot.

Panel 1Title
Panel 2Title
Panel 3Title
<template>
  <div>
    <b-collapse v-model="value" simple>
      <b-collapse-panel title="Panel 1Title" name="1">
        <template #title>
          Panel 1Title
          <b-icon name="smile" size="18"></b-icon>
        </template>
        <p v-for="i in 3" :key="i">我是Content我是Content...</p>
      </b-collapse-panel>
      <b-collapse-panel title="Panel 2Title" name="2">
        <p v-for="i in 3" :key="i">我是Content我是Content...</p>
      </b-collapse-panel>
      <b-collapse-panel title="Panel 3Title" name="3">
        <p v-for="i in 3" :key="i">我是Content我是Content...</p>
      </b-collapse-panel>
    </b-collapse>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const value = ref('')
</script>

Container Component

Use the b-collapse-wrap component for standalone collapse panels.

Title Bar

Content goes here...

Content goes here...

Content goes here...

Collapse with right action

Content goes here...

Content goes here...

Content goes here...

Custom switch and title
Custom label title

Content goes here...

Content goes here...

Content goes here...

<template>
  <div>
    <b-collapse-wrap title="Title Bar" collapse>
      <div class="p5">
        <p v-for="i in 3" :key="i">Content goes here...</p>
      </div>
    </b-collapse-wrap>
    <b-collapse-wrap title="Collapse with right action" collapse>
      <template #right>
        <b-button type="primary" plain size="small">Edit</b-button>
      </template>
      <div class="p5">
        <p v-for="i in 3" :key="i">Content goes here...</p>
      </div>
    </b-collapse-wrap>
    <b-collapse-wrap v-model="value" shadow="none">
      <template #title>
        <div style="font-size: 16px; padding: 10px">Custom switch and title</div>
      </template>
      <template #right>
        <b-button type="text" @click="value = !value">{{ value ? 'Collapse' : 'Expand' }}</b-button>
      </template>
      <div class="p5">
        <p v-for="i in 3" :key="i">Content goes here...</p>
      </div>
    </b-collapse-wrap>
    <b-collapse-wrap title="Title Bar" collapse shadow="none" arrow-icon="caret-down">
      <template #title><span class="title">Custom label title</span></template>
      <div class="p5">
        <p v-for="i in 3" :key="i">Content goes here...</p>
      </div>
    </b-collapse-wrap>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const value = ref(false)
</script>

Props

ParameterDescriptionTypeOptionsDefault
modelValueThe name of the currently active panel; use v-model for two-way bindingArray/String
accordionEnable accordion mode; only one panel can be expanded at a timeBooleanfalse
simpleEnable simple modeBooleanfalse

Events

Event NameDescriptionReturn Value
changeTriggers when panels switch; returns the keys of currently expanded panels as an arrayarray[]

Slot

NameDescription
titlePanel header content

CollapseWrap Props

ParameterDescriptionTypeOptionsDefault
valueWhether to expandbooleantrue
titleTitlestring
collapseWhether to expand/collapsebooleanfalse
shadowShadow; set to none to enable simple modestringnone/custom shadow

CollapseWrap Slot

NameDescription
titlePanel header content
rightRight side content area