Implement and configure the Syncfusion TypeScript Splitter control for creating responsive multi-pane interfaces. Use this skill when implementing pane configuration, orientation changes, resizing, collapse/expand functionality, and content loading. This skill covers nested layouts, styling customization, and all API properties, methods, and events for the Splitter component.
The Syncfusion Splitter control enables you to create complex, responsive multi-pane layouts in web applications. It provides built-in resizing, collapse/expand functionality, comprehensive event handling, and support for nested panes with full programmatic control.
The Splitter is a flexible layout component that:
Complete API Reference — This document Comprehensive documentation of ALL components:
import { Splitter } from '@syncfusion/ej2-layouts';
// Initialize Splitter with horizontal orientation (default)
let splitObj: Splitter = new Splitter({
height: '250px',
width: '600px',
paneSettings: [
{ size: '200px', content: 'Pane 1' },
{ size: '200px', content: 'Pane 2' },
{ size: '200px', content: 'Pane 3' }
]
});
// Render to DOM
splitObj.appendTo('#splitter');
HTML:
<div id="splitter">
<div></div>
<div></div>
<div></div>
</div>
let splitObj: Splitter = new Splitter({
height: '300px',
width: '100%',
paneSettings: [
{ size: '30%', min: '20%', max: '50%' },
{ size: '40%', min: '30%', max: '60%' },
{ size: '30%', min: '20%', max: '50%' }
]
});
splitObj.appendTo('#splitter');
let splitObj: Splitter = new Splitter({
height: '300px',
paneSettings: [
{ collapsible: true, size: '250px', content: 'Sidebar', collapsed: false },
{ collapsible: true, size: '250px', content: 'Details', collapsed: true }
]
});
splitObj.appendTo('#splitter');
let splitObj: Splitter = new Splitter({
height: '400px',
orientation: 'Vertical',
paneSettings: [
{ size: '150px' },
{ size: '200px' },
{ size: '150px' }
]
});
splitObj.appendTo('#splitter');
// Outer vertical splitter
let verticalSplit: Splitter = new Splitter({
height: '400px',
orientation: 'Vertical',
paneSettings: [
{ size: '250px', min: '30%' }
]
});
verticalSplit.appendTo('#verticalSplitter');
// Inner horizontal splitter (inside first pane)
let horizontalSplit: Splitter = new Splitter({
height: '220px',
paneSettings: [
{ size: '29%', min: '23%' },
{ size: '20%', min: '15%' },
{ size: '35%', min: '35%' }
]
});
horizontalSplit.appendTo('#horizontalSplitter');
let splitObj: Splitter = new Splitter({
height: '300px',
paneSettings: [
{ collapsible: true, size: '250px', content: 'Important Pane' },
{ collapsible: true, size: '250px', content: 'Other Pane' }
],
beforeCollapse: (args: BeforeExpandEventArgs) => {
// Prevent collapse of first pane
if (args.index[0] === 0) {
args.cancel = true;
console.log('First pane cannot be collapsed');
}
}
});
splitObj.appendTo('#splitter');
let splitObj: Splitter = new Splitter({
height: '300px',
paneSettings: [
{ size: '50%', content: 'Pane 1' },
{ size: '50%', content: 'Pane 2' }
]
});
splitObj.appendTo('#splitter');
// Add a new pane
document.getElementById('addBtn').addEventListener('click', () => {
splitObj.addPane({ size: '200px', content: 'New Pane' }, 1);
});
// Remove a pane
document.getElementById('removeBtn').addEventListener('click', () => {
splitObj.removePane(1);
});
let splitObj: Splitter = new Splitter({
height: '300px',
paneSettings: [
{ collapsible: true, size: '250px', content: 'Pane 1', collapsed: true },
{ collapsible: true, size: '250px', content: 'Pane 2' }
]
});
splitObj.appendTo('#splitter');
// Expand pane
document.getElementById('expandBtn').addEventListener('click', () => {
splitObj.expand(0);
});
// Collapse pane
document.getElementById('collapseBtn').addEventListener('click', () => {
splitObj.collapse(0);
});
let splitObj: Splitter = new Splitter({
height: '300px',
paneSettings: [
{ size: '250px', content: 'Pane 1' },
{ size: '250px', content: 'Pane 2' }
],
resizeStart: (args: ResizeEventArgs) => {
console.log('Resize started on pane:', args.index);
},
resizing: (args: ResizingEventArgs) => {
console.log('Resizing... New sizes:', args.paneSize);
},
resizeStop: (args: ResizingEventArgs) => {
console.log('Resize completed. Final sizes:', args.paneSize);
}
});
splitObj.appendTo('#splitter');
let splitObj: Splitter = new Splitter({
height: '300px',
enablePersistence: true, // Save state to localStorage
paneSettings: [
{ size: '250px', content: 'Pane 1' },
{ size: '250px', content: 'Pane 2' }
]
});
splitObj.appendTo('#splitter');
// State automatically persists across page reloads
let splitObj: Splitter = new Splitter({
height: '300px',
enableRtl: true,
paneSettings: [
{ size: '50%', content: 'محتوى عربي' }, // Arabic content
{ size: '50%', content: 'תוכן עברי' } // Hebrew content
]
});
splitObj.appendTo('#splitter');
For detailed examples of all properties, methods, and events, see the Complete API Reference.
Complete list of all properties available on the Splitter component:
| Property | Type | Default | Description |
|---|---|---|---|
height | string | '100%' | Height of the Splitter container |
width | string | '100%' | Width of the Splitter container |
orientation | 'Horizontal' | 'Vertical' | 'Horizontal' | Layout direction - see Orientations guide |
paneSettings | PanePropertiesModel[] | [] | Configuration for each pane |
separatorSize | number | 1 | Separator width between panes |
cssClass | string | '' | Custom CSS classes for styling |
enableRtl | boolean | false | Enable right-to-left layout - see RTL guide |
enabled | boolean | true | Enable/disable component interaction |
enablePersistence | boolean | false | Persist pane state between page reloads |
enableReversePanes | boolean | false | Reorder panes |
enableHtmlSanitizer | boolean | true | Sanitize HTML content to prevent XSS |
locale | string | 'en-US' | Localization override |
Configuration properties available within each pane in the paneSettings array:
| Property | Type | Default | Description |
|---|---|---|---|
size | string | Auto | Pane size in pixels ('200px') or percentage ('30%') |
min | string | None | Minimum pane size constraint |
max | string | None | Maximum pane size constraint |
collapsible | boolean | false | Enable collapse/expand icons |
collapsed | boolean | false | Initially collapsed state |
resizable | boolean | true | Allow resizing this pane |
content | string | HTMLElement | None | HTML content for the pane |
cssClass | string | '' | Custom CSS classes for pane styling |
| Method | Parameters | Return | Description |
|---|---|---|---|
addPane() | paneProperties, index | void | Add pane dynamically - see Split Panes |
removePane() | index | void | Remove pane dynamically - see Split Panes |
expand() | index | void | Expand pane programmatically - see Collapse/Expand |
collapse() | index | void | Collapse pane programmatically - see Collapse/Expand |
refresh() | — | void | Re-render component |
destroy() | — | void | Cleanup component |
getRootElement() | — | HTMLElement | Get root element |
dataBind() | — | void | Apply pending changes |
appendTo() | selector? | void | Mount component to DOM - see Getting Started |
addEventListener() | eventName, handler | void | Add event handler |
removeEventListener() | eventName, handler | void | Remove event handler |
Inject() | moduleList | void | Inject modules |
| Event | Triggers | Arguments | Description |
|---|---|---|---|
created | After initialization | Object | Component initialized |
beforeExpand | Before pane expands | BeforeExpandEventArgs | Cancellable - prevent expand |
expanded | After pane expands | ExpandedEventArgs | Expansion completed |
beforeCollapse | Before pane collapses | BeforeExpandEventArgs | Cancellable - prevent collapse |
collapsed | After pane collapses | ExpandedEventArgs | Collapse completed |
resizeStart | Resize begins | ResizeEventArgs | Cancellable |
resizing | During resize | ResizingEventArgs | Continuous updates |
resizeStop | Resize completes | ResizingEventArgs | Final size available |
beforeSanitizeHtml | Before HTML sanitization | BeforeSanitizeHtmlArgs | Customize sanitization |
BeforeExpandEventArgs (used in: beforeExpand, beforeCollapse)
cancel (boolean): Set to true to cancel the actionelement (HTMLElement): Root elementevent (Event): Native eventindex (number[]): Pane indexpane (HTMLElement[]): Pane elementsseparator (HTMLElement): Separator elementExpandedEventArgs (used in: expanded, collapsed)
element (HTMLElement): Root elementevent (Event): Native eventindex (number[]): Pane indexpane (HTMLElement[]): Pane elementsseparator (HTMLElement): Separator elementResizeEventArgs (used in: resizeStart)
cancel (boolean): Set to true to stop resizeelement (HTMLElement): Resizing pane elementevent (Event): Native eventindex (number[]): Pane indexpane (HTMLElement[]): Pane elementsseparator (HTMLElement): Separator elementResizingEventArgs (used in: resizing, resizeStop)
element (HTMLElement): Resizing pane elementevent (Event): Native eventindex (number[]): Pane indexpane (HTMLElement[]): Pane elementspaneSize (number[]): Current/final pane sizeseparator (HTMLElement): Separator elementBeforeSanitizeHtmlArgs (used in: beforeSanitizeHtml)
cancel (boolean): Prevent sanitization if neededhelper (Function): Custom sanitization callbackselectors (SanitizeSelectors): XSS block list configurationEssential Splitter Properties:
height, width → Container dimensionsorientation → 'Horizontal' (default) or 'Vertical'paneSettings → Array of pane configurationsenableRtl → Right-to-left supportseparatorSize → Gap width between panes (default: 1px)Key Pane Properties:
size → Dimension ('200px' or '30%')min / max → Resize constraintscollapsible → Enable collapse icons (default: false)collapsed → Initial stateresizable → Allow resizing (default: true)content → HTML content or textFor specific implementation questions, refer to the appropriate reference file in the navigation guide above.