Skip to content

Offcanvas ​

The Offcanvas component provides a sidebar panel that slides in from the edge of the viewport. It supports left/right/top/bottom placement, <Teleport>, ESC dismiss, and backdrop interactions.

Basic Usage ​

Control the offcanvas visibility via v-model. By default, it slides in from the right (end).

vue
<script setup lang="ts">
import { ref } from 'vue'
const visible = ref(false)
</script>

<template>
  <button class="btn btn-primary" @click="visible = true">Open Offcanvas</button>
  <TOffcanvas v-model="visible" title="Basic Offcanvas">
    <p>Offcanvas content</p>
  </TOffcanvas>
</template>

Four Placements ​

Use the placement prop to control from which edge the offcanvas slides in: start (left), end (right, default), top, or bottom.

vue
<template>
  <TOffcanvas v-model="visible" title="Left" placement="start" />
  <TOffcanvas v-model="visible" title="Right" placement="end" />
  <TOffcanvas v-model="visible" title="Top" placement="top" />
  <TOffcanvas v-model="visible" title="Bottom" placement="bottom" />
</template>

Without Backdrop ​

Set :backdrop="false" to remove the backdrop overlay. The background content remains interactive.

vue
<TOffcanvas v-model="visible" title="No Backdrop" :backdrop="false">
  <template #footer>
    <button class="btn btn-primary" @click="visible = false">Close</button>
  </template>
</TOffcanvas>

Form Content ​

Place form elements inside the offcanvas body and use the #footer slot for action buttons.

Show Code
vue
<TOffcanvas v-model="visible" title="Login">
  <div class="mb-3">
    <label class="form-label">Username</label>
    <input v-model="username" type="text" class="form-control">
  </div>
  <template #footer>
    <button class="btn btn-primary ms-auto" @click="visible = false">Submit</button>
  </template>
</TOffcanvas>

API ​

Props ​

PropTypeDefaultDescription
modelValuebooleanfalsev-model binding, controls visibility
placement'start' | 'end' | 'top' | 'bottom''end'Slide-in direction
titlestring—Offcanvas title
closablebooleantrueShow close button
closeOnBackdropboolean | 'static'trueClose on backdrop click; 'static' prevents closing
closeOnEscbooleantrueClose on ESC key press
backdropbooleantrueShow backdrop overlay
scrollbooleanfalseAllow body scrolling when open
teleportTostring'body'Teleport target selector

Slots ​

NameDescription
defaultOffcanvas body content
titleCustom title area
headerCustom entire header (replaces default title + close button)
footerFooter action bar (with border-top)

Emits ​

EventPayloadDescription
update:modelValue(value: boolean)v-model update
open—Fires when offcanvas starts opening
opened—Fires after open transition completes
close—Fires when offcanvas starts closing
closed—Fires after close transition completes