createOverflow
A composable for computing how many items fit in a container based on available width, enabling responsive truncation for pagination, breadcrumbs, and similar components.
Usage
The createOverflow composable provides reactive container width tracking and capacity calculation. It supports two modes: variable-width (for items with different widths like breadcrumbs) and uniform-width (for same-width items like pagination buttons).
<script setup lang="ts">
import { useTemplateRef } from 'vue'
import { createOverflow } from '@vuetify/v0'
const containerRef = useTemplateRef('container')
// Pass container as a ref or getter for proper reactive tracking
const overflow = createOverflow({
container: containerRef,
gap: 8,
reserved: 40,
})
// Check capacity
console.log(overflow.capacity.value) // Number of items that fit
console.log(overflow.isOverflowing.value) // true if items exceed container
</script>
<template>
<div ref="container">
<!-- Items go here -->
</div>
</template>Context / DI
Use createOverflowContext to share an overflow instance across a component tree:
import { createOverflowContext } from '@vuetify/v0'
export const [useNavOverflow, provideNavOverflow, navOverflow] =
createOverflowContext({ namespace: 'my:nav-overflow' })
// In parent component
provideNavOverflow()
// In child component
const overflow = useNavOverflow()
overflow.capacity.value // number of items that fitUse useOverflow to inject the default (unnamespaced) overflow context provided by a parent:
import { useOverflow } from '@vuetify/v0'
const overflow = useOverflow() // Injects the nearest provided overflow contextArchitecture
createOverflow uses ResizeObserver to compute container capacity:
Reactivity
| Property/Method | Reactive | Notes |
|---|---|---|
container | ShallowRef, assign element for tracking | |
width | ShallowRef, readonly (from ResizeObserver) | |
capacity | Computed from width and measurements | |
total | Computed, sum of all item widths | |
isOverflowing | Computed from total vs available width | |
gap | Accepts MaybeRefOrGetter | |
reserved | Accepts MaybeRefOrGetter | |
itemWidth | Accepts MaybeRefOrGetter (uniform mode) |
Examples
- Visible
- 7 / 7
- Overflowing
- false
- Container
- 0px
Shrink the container to watch trailing destinations collapse into the overflow menu, then widen it to see them return.
FAQ
createOverflow measures how many items fit one row and hides the rest — overflow menus, breadcrumb ellipsis, responsive toolbars. createVirtual windows a long scrollable list, rendering only the rows in view. Horizontal truncation vs vertical windowing.
Items must keep their measured widths. If you unmount overflowing items (e.g. slice(0, capacity)) their widths are thrown away and capacity can’t recompute upward. Measure every item once, then hide with v-show so the widths stay in the map.
Variable-width measures each item individually (breadcrumbs, nav links of different sizes); uniform-width uses a single itemWidth for same-size items like pagination buttons, skipping per-item measurement. Use reserved to keep room for an overflow trigger.
Reach for createOverflow when you need full control over how truncation is presented — a custom overflow menu, breadcrumb ellipsis, or responsive toolbar. The Overflow component wraps it with item registration and an indicator slot when the default presentation is enough.