Splitter Component
Splitter divides areas horizontally or vertically with draggable resizing.
When to Use
- Split views
- Resizable panels
- Collapsible layouts
- Multi-pane interfaces
Basic Usage
<template>
<el-splitter>
<el-splitter-panel>Panel 1</el-splitter-panel>
<el-splitter-panel>Panel 2</el-splitter-panel>
</el-splitter>
</template>
Vertical Layout
<template>
<el-splitter layout="vertical">
<el-splitter-panel>Panel 1</el-splitter-panel>
<el-splitter-panel>Panel 2</el-splitter-panel>
</el-splitter>
</template>
Collapsible
<template>
<el-splitter>
<el-splitter-panel collapsible>Panel 1</el-splitter-panel>
<el-splitter-panel>Panel 2</el-splitter-panel>
</el-splitter>
</template>
Size Constraints
<template>
<el-splitter>
<el-splitter-panel :min="100" :max="300">Panel 1</el-splitter-panel>
<el-splitter-panel>Panel 2</el-splitter-panel>
</el-splitter>
</template>
Disable Drag
<template>
<el-splitter>
<el-splitter-panel :resizable="false">Panel 1</el-splitter-panel>
<el-splitter-panel>Panel 2</el-splitter-panel>
</el-splitter>
</template>
Track Size
<template>
<el-splitter>
<el-splitter-panel v-model:size="size1">Panel 1</el-splitter-panel>
<el-splitter-panel v-model:size="size2">Panel 2</el-splitter-panel>
</el-splitter>
</template>
<script setup>
import { ref } from 'vue'
const size1 = ref('50%')
const size2 = ref('50%')
</script>
Lazy Mode
<template>
<el-splitter lazy>
<el-splitter-panel>Panel 1</el-splitter-panel>
<el-splitter-panel>Panel 2</el-splitter-panel>
</el-splitter>
</template>
API Reference
Splitter Attributes
| Name | Description | Type | Default |
|---|---|---|---|
| layout | Layout direction | 'horizontal' | 'vertical' |
'horizontal' |
| lazy | Enable lazy mode | boolean |
false |
Splitter Events
| Name | Description | Type |
|---|---|---|
| resize-start | Resize starts | (index, sizes) => void |
| resize | During resize | (index, sizes) => void |
| resize-end | Resize ends | (index, sizes) => void |
| collapse | Panel collapsed | (index, type, sizes) => void |
SplitterPanel Attributes
| Name | Description | Type | Default |
|---|---|---|---|
| size / v-model:size | Panel size | string | number |
— |
| min | Minimum size | string | number |
— |
| max | Maximum size | string | number |
— |
| resizable | Can be resized | boolean |
true |
| collapsible | Can be collapsed | boolean |
false |
SplitterPanel Events
| Name | Description | Type |
|---|---|---|
| update:size | Size changes | (size: number) => void |
SplitterPanel Slots
| Name | Description |
|---|---|
| default | Panel content |
| start-collapsible | Start collapse button |
| end-collapsible | End collapse button |
Best Practices
- Use
min/maxto constrain panel sizes - Use
collapsiblefor collapsible panels - Use
lazyfor performance with heavy content