How can I help you?
Panel positioning and sizing in React Dashboard Layout component
5 Mar 202616 minutes to read
Panels serve as the fundamental building blocks of the Dashboard Layout component, functioning as containers for data visualization and content presentation. The component provides comprehensive control over panel positioning and sizing through a flexible grid-based system that enables precise layout management and responsive design implementation.
The following table details all available panel properties and their specific functions in layout management:
| Property | Type | Description |
|---|---|---|
id |
string | Unique identifier for the panel, essential for state management and event handling |
row |
number | Grid row position where the panel begins (0-based indexing) |
col |
number | Grid column position where the panel begins (0-based indexing) |
sizeX |
number | Panel width measured in grid cells |
sizeY |
number | Panel height measured in grid cells |
minSizeX |
number | Minimum allowed width in cells, prevents excessive resizing |
minSizeY |
number | Minimum allowed height in cells, maintains content visibility |
maxSizeX |
number | Maximum allowed width in cells, controls layout boundaries |
maxSizeY |
number | Maximum allowed height in cells, prevents layout overflow |
header |
string | Header template content for panel identification |
content |
string | Main content template containing panel data |
cssClass |
string | Custom CSS classes for styling and theming |
Positioning of panels
Panels within the layout are positioned using the row and col properties of the panels. Positioning panels is beneficial for representing data in any desired order.
The following sample demonstrates the positioning of panels within the dashboard layout using the row and column properties of the panels.
import { DashboardLayoutComponent } from '@syncfusion/ej2-react-layouts';
import * as React from 'react';
function App() {
const cellSpacing = [20, 20];
let panels = [
{ "row": 0, "col": 0, content: '<div class="content">1</div>' },
{ "row": 0, "col": 1, content: '<div class="content">2</div>' },
{ "row": 0, "col": 2, content: '<div class="content">3</div>' },
{ "row": 1, "col": 0, content: '<div class="content">4</div>' },
{ "row": 1, "col": 1, content: '<div class="content">5</div>' },
{ "row": 1, "col": 2, content: '<div class="content">6</div>' }
];
return (<div>
<div className="container">
<DashboardLayoutComponent id='defaultLayout' cellSpacing={cellSpacing} panels={panels} columns={3}/>
</div>
</div>);
}
export default App;import { DashboardLayoutComponent } from '@syncfusion/ej2-react-layouts';
import * as React from 'react';
function App(){
const cellSpacing: number[] = [20, 20];
let panels: object[] = [
{ "row": 0, "col": 0, content:'<div class="content">1</div>' },
{ "row": 0, "col": 1, content:'<div class="content">2</div>' },
{ "row": 0, "col": 2, content:'<div class="content">3</div>' },
{ "row": 1, "col": 0, content:'<div class="content">4</div>' },
{ "row": 1, "col": 1, content:'<div class="content">5</div>' },
{ "row": 1, "col": 2, content:'<div class="content">6</div>' }
];
return (
<div>
<div className="container">
<DashboardLayoutComponent id='defaultLayout' cellSpacing={cellSpacing} panels={panels} columns={3} />
</div>
</div>
);
}
export default App;import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));@import "../node_modules/@syncfusion/ej2-base/styles/tailwind3.css";
@import "../node_modules/@syncfusion/ej2-react-layouts/styles/tailwind3.css";
.container {
margin: 0 auto;
width: 500px;
}
.e-panel-content {
text-align: center;
line-height: 100px;
font-weight: 600;
font-size: 20px;
}<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion EJ2 React Dashboard Layout Sample</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components" />
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/33.1.44/ej2-base/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/33.1.44/ej2-react-layouts/styles/tailwind3.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<link rel="stylesheet" href="App.css">
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>Sizing of panels
Panel dimensions are controlled using the sizeX and sizeY properties. The sizeX property defines the width and the sizeY property defines height of a panel in cells count. These properties are helpful in designing a dashboard, where the content of each panel may vary in size.
The following sample demonstrates panel sizing within the dashboard layout using the sizeX and sizeY properties.
import { DashboardLayoutComponent } from '@syncfusion/ej2-react-layouts';
import * as React from 'react';
function App() {
const cellSpacing = [20, 20];
let panels = [
{ "sizeX": 1, "sizeY": 1, "row": 0, "col": 0, content: '<div class="content">0</div>' },
{ "sizeX": 3, "sizeY": 2, "row": 0, "col": 1, content: '<div class="content">1</div>' },
{ "sizeX": 1, "sizeY": 3, "row": 0, "col": 4, content: '<div class="content">2</div>' },
{ "sizeX": 1, "sizeY": 1, "row": 1, "col": 0, content: '<div class="content">3</div>' },
{ "sizeX": 2, "sizeY": 1, "row": 2, "col": 0, content: '<div class="content">4</div>' },
{ "sizeX": 1, "sizeY": 1, "row": 2, "col": 2, content: '<div class="content">5</div>' },
{ "sizeX": 1, "sizeY": 1, "row": 2, "col": 3, content: '<div class="content">6</div>' }
];
return (<div>
<div className="control-section">
<DashboardLayoutComponent id='defaultLayout' cellSpacing={cellSpacing} panels={panels} columns={5}/>
</div>
</div>);
}
export default App;import { DashboardLayoutComponent } from '@syncfusion/ej2-react-layouts';
import * as React from 'react';
function App() {
const cellSpacing: number[] = [20, 20];
let panels: object[] = [
{ "sizeX": 1, "sizeY": 1, "row": 0, "col": 0, content:'<div class="content">0</div>' },
{ "sizeX": 3, "sizeY": 2, "row": 0, "col": 1, content:'<div class="content">1</div>' },
{ "sizeX": 1, "sizeY": 3, "row": 0, "col": 4, content:'<div class="content">2</div>' },
{ "sizeX": 1, "sizeY": 1, "row": 1, "col": 0, content:'<div class="content">3</div>' },
{ "sizeX": 2, "sizeY": 1, "row": 2, "col": 0, content:'<div class="content">4</div>' },
{ "sizeX": 1, "sizeY": 1, "row": 2, "col": 2, content:'<div class="content">5</div>' },
{ "sizeX": 1, "sizeY": 1, "row": 2, "col": 3, content:'<div class="content">6</div>' }
];
return (
<div>
<div className="control-section">
<DashboardLayoutComponent id='defaultLayout' cellSpacing={cellSpacing} panels={panels} columns={5} />
</div>
</div>
);
}
export default App;import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));@import "../node_modules/@syncfusion/ej2-base/styles/tailwind3.css";
@import "../node_modules/@syncfusion/ej2-react-layouts/styles/tailwind3.css";
#defaultLayout {
padding: 10px;
}
.e-panel-container {
vertical-align: middle;
font-weight: 600;
font-size: 20px;
text-align: center;
}
.content {
line-height: 90px;
}<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion EJ2 React Dashboard Layout Sample</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components" />
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/33.1.44/ej2-base/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/33.1.44/ej2-buttons/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/33.1.44/ej2-popups/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/33.1.44/ej2-splitbuttons/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/33.1.44/ej2-react-layouts/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/33.1.44/ej2-grids/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/33.1.44/ej2-charts/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/33.1.44/ej2-lists/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/33.1.44/ej2-calendars/styles/tailwind3.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<link rel="stylesheet" href="App.css">
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>Refer to the React Dashboard Layout feature tour page for its groundbreaking feature representations. Also explore our React Dashboard Layout example to learn how to present and manipulate data.