Angular ResponsiveBox - Arrange Layout Elements
All layout elements are arranged against a layout grid. For example, suppose that you have the following layout grid.
jQuery
$(function() {
$("#responsiveBoxContainer").dxResponsiveBox({
rows: [
{ ratio: 1 }, // Header
{ ratio: 2 }, // Content
{ ratio: 0.7 } // Footer
],
cols: [
{ ratio: 0.5, screen: "md lg" }, // Left-side bar
{ ratio: 2 }, // Content
{ ratio: 0.5, screen: "md lg" } // Right-side bar
]
});
});
html, body { height: 100%; }Angular
<dx-responsive-box id="responsiveBox">
<dxi-row [ratio]="1"></dxi-row> <!-- Header -->
<dxi-row [ratio]="2"></dxi-row> <!-- Content -->
<dxi-row [ratio]="0.7"></dxi-row> <!-- Footer -->
<dxi-col [ratio]="0.5" screen="md lg"></dxi-col> <!-- Left-side bar -->
<dxi-col [ratio]="2"></dxi-col> <!-- Content -->
<dxi-col [ratio]="0.5" screen="md lg"></dxi-col> <!-- Right-side bar -->
</dx-responsive-box>
import { DxResponsiveBoxModule } from 'devextreme-angular';
// ...
export class AppComponent {
// ...
}
@NgModule({
imports: [
// ...
DxResponsiveBoxModule
],
// ...
})
html, body { height: 100%; }Vue
<template>
<DxResponsiveBox>
<DxRow :ratio="1"/> <!-- Header -->
<DxRow :ratio="2"/> <!-- Content -->
<DxRow :ratio="0.7"/> <!-- Footer -->
<DxCol :ratio="0.5" screen="md lg"/> <!-- Left-side bar -->
<DxCol :ratio="2"/> <!-- Content -->
<DxCol :ratio="0.5" screen="md lg"/> <!-- Right-side bar -->
</DxResponsiveBox>
</template>
<script>
import 'devextreme/dist/css/dx.light.css';
import { DxResponsiveBox, DxCol, DxRow } from 'devextreme-vue/responsive-box';
export default {
components: {
DxResponsiveBox,
DxCol,
DxRow
}
};
</script>
<style>
html, body { height: 100%; }
</style>React
import React from 'react';
import 'devextreme/dist/css/dx.light.css';
import ResponsiveBox, { Row, Col } from 'devextreme-react/responsive-box';
class App extends React.Component {
render() {
return (
<ResponsiveBox>
<Row ratio={1}/> {/* Header */}
<Row ratio={2}/> {/* Content */}
<Row ratio={0.7}/> {/* Footer */}
<Col ratio={0.5} screen="md lg"/> {/* Left-side bar */}
<Col ratio={2}/> {/* Content */}
<Col ratio={0.5} screen="md lg"/> {/* Right-side bar */}
</ResponsiveBox>
);
}
}
export default App;
html, body { height: 100%; }Every layout element has the location property that allows you to relocate the element within the layout grid or hide it on screens of a specific size. For example, in the following code, the "Left-Side Bar" and "Right-Side Bar" elements are present only on medium and large screens. All the other elements have individual settings for screens of each size.
jQuery
<div id="responsiveBoxContainer">
<div class="header" data-options="dxItem: {
location: [
{ screen: 'md lg', row: 0, col: 0, colspan: 3 },
{ screen: 'xs sm', row: 0, col: 0 }
]
}"> <p>Header</p> </div>
<div class="content" data-options="dxItem: {
location: [
{ screen: 'md lg', row: 1, col: 1 },
{ screen: 'xs sm', row: 1, col: 0 }
]
}"> <p>Content</p> </div>
<div class="left-side-bar" data-options="dxItem: {
location: { screen: 'md lg', row: 1, col: 0 }
}"> <p>Left Bar</p> </div>
<div class="right-side-bar" data-options="dxItem: {
location: { screen: 'md lg', row: 1, col: 2 }
}"> <p>Right Bar</p> </div>
<div class="footer" data-options="dxItem: {
location: [
{ screen: 'md lg', row: 2, col: 0, colspan: 3 },
{ screen: 'xs sm', row: 2, col: 0 }
]
}"> <p>Footer</p> </div>
</div>
html, body { height: 100%; }
#responsiveBoxContainer p {
font-size: 16px;
padding-top: 10px;
text-align: center;
}
.header { background: #f39e6c }
.content { background: #f5e5a6 }
.left-side-bar { background: #94d7c7 }
.right-side-bar { background: #77c7e7 }
.footer { background: #7b9bcf }Angular
<dx-responsive-box id="responsiveBox">
<!-- Layout grid is configured here -->
<dxi-item class="header">
<dxi-location screen="md lg" [row]="0" [col]="0" [colspan]="3"></dxi-location>
<dxi-location screen="xs sm" [row]="0" [col]="0"></dxi-location>
<p>Header</p>
</dxi-item>
<dxi-item class="content">
<dxi-location screen="md lg" [row]="1" [col]="1"></dxi-location>
<dxi-location screen="xs sm" [row]="1" [col]="0"></dxi-location>
<p>Content</p>
</dxi-item>
<dxi-item class="left-side-bar">
<dxi-location screen="md lg" [row]="1" [col]="0"></dxi-location>
<p>Left Bar</p>
</dxi-item>
<dxi-item class="right-side-bar">
<dxi-location screen="md lg" [row]="1" [col]="2"></dxi-location>
<p>Right Bar</p>
</dxi-item>
<dxi-item class="footer">
<dxi-location screen="md lg" [row]="2" [col]="0" [colspan]="3"></dxi-location>
<dxi-location screen="xs sm" [row]="2" [col]="0"></dxi-location>
<p>Footer</p>
</dxi-item>
</dx-responsive-box>
import { DxResponsiveBoxModule } from 'devextreme-angular';
// ...
export class AppComponent {
// ...
}
@NgModule({
imports: [
// ...
DxResponsiveBoxModule
],
// ...
})
html, body { height: 100%; }
#responsiveBox p {
font-size: 16px;
padding-top: 10px;
text-align: center;
}
.header { background: #f39e6c }
.content { background: #f5e5a6 }
.left-side-bar { background: #94d7c7 }
.right-side-bar { background: #77c7e7 }
.footer { background: #7b9bcf }Vue
<template>
<DxResponsiveBox>
<!-- Layout grid is configured here -->
<DxItem>
<DxLocation screen="md lg" :row="0" :col="0" :colspan="3"/>
<DxLocation screen="xs sm" :row="0" :col="0"/>
<template #default>
<div class="header">
<p>Header</p>
</div>
</template>
</DxItem>
<DxItem>
<DxLocation screen="md lg" :row="1" :col="1"/>
<DxLocation screen="xs sm" :row="1" :col="0"/>
<template #default>
<div class="content">
<p>Content</p>
</div>
</template>
</DxItem>
<DxItem>
<DxLocation screen="md lg" :row="1" :col="0"/>
<template #default>
<div class="left-side-bar">
<p>Left Bar</p>
</div>
</template>
</DxItem>
<DxItem>
<DxLocation screen="md lg" :row="1" :col="2"/>
<template #default>
<div class="right-side-bar">
<p>Right Bar</p>
</div>
</template>
</DxItem>
<DxItem class="footer">
<DxLocation screen="md lg" :row="2" :col="0" :colspan="3"/>
<DxLocation screen="xs sm" :row="2" :col="0"/>
<template #default>
<div class="footer">
<p>Footer</p>
</div>
</template>
</DxItem>
</DxResponsiveBox>
</template>
<script>
import 'devextreme/dist/css/dx.light.css';
import { DxResponsiveBox, DxItem, DxLocation, DxCol, DxRow } from 'devextreme-vue/responsive-box';
export default {
components: {
DxResponsiveBox,
DxItem,
DxLocation,
DxCol,
DxRow
}
};
</script>
<style>
html, body { height: 100%; }
#responsiveBox p {
font-size: 16px;
padding-top: 10px;
text-align: center;
}
.header { background: #f39e6c }
.content { background: #f5e5a6 }
.left-side-bar { background: #94d7c7 }
.right-side-bar { background: #77c7e7 }
.footer { background: #7b9bcf }
</style>React
import React from 'react';
import 'devextreme/dist/css/dx.light.css';
import ResponsiveBox, { Row, Col, Item, Location } from 'devextreme-react/responsive-box';
class App extends React.Component {
render() {
return (
<ResponsiveBox>
{/* Layout grid is configured here */}
<Item>
<Location screen="md lg" row={0} col={0} colspan={3}/>
<Location screen="xs sm" row={0} col={0}/>
<div className="header item">
<p>Header</p>
</div>
</Item>
<Item>
<Location screen="md lg" row={1} col={1}/>
<Location screen="xs sm" row={1} col={0}/>
<div className="content item">
<p>Content</p>
</div>
</Item>
<Item>
<Location screen="md lg" row={1} col={0}/>
<div className="left-side-bar item">
<p>Left Bar</p>
</div>
</Item>
<Item>
<Location screen="md lg" row={1} col={2}/>
<div className="right-side-bar item">
<p>Right Bar</p>
</div>
</Item>
<Item>
<Location screen="md lg" row={2} col={0} colspan={3}/>
<Location screen="xs sm" row={2} col={0}/>
<div className="footer item">
<p>Footer</p>
</div>
</Item>
</ResponsiveBox>
);
}
}
export default App;
html, body { height: 100%; }
#responsiveBox div {
font-size: 16px;
padding-top: 10px;
text-align: center;
}
.item { height: 100%; }
.header { background: #f39e6c }
.content { background: #f5e5a6 }
.left-side-bar { background: #94d7c7 }
.right-side-bar { background: #77c7e7 }
.footer { background: #7b9bcf }If on some screens, all elements should be arranged in a single column, assign the size qualifiers of these screens to the singleColumnScreen property. In this case, the layout grid will be ignored in favor of the single-column layout, and all layout elements will have equal heights.
jQuery
$(function() {
$("#responsiveBoxContainer").dxResponsiveBox({
rows: [
// Ignored
],
cols: [
// Ignored
],
// Single-column layout on small and extra small screens
singleColumnScreen: "xs sm"
});
});
html, body { height: 100%; }Angular
<dx-responsive-box
singleColumnScreen="xs sm"> <!-- Single-column layout on small and extra small screens -->
<dxi-row ...></dxi-row> <!-- Ignored -->
<dxi-col ...></dxi-col> <!-- Ignored -->
</dx-responsive-box>
import { DxResponsiveBoxModule } from 'devextreme-angular';
// ...
export class AppComponent {
// ...
}
@NgModule({
imports: [
// ...
DxResponsiveBoxModule
],
// ...
})
html, body { height: 100%; }Vue
<template>
<DxResponsiveBox ...
single-column-screen="xs sm"> <!-- Single-column layout on small and extra small screens -->
<DxRow ... /> <!-- Ignored -->
<DxCol ... /> <!-- Ignored -->
<!-- ... -->
</DxResponsiveBox>
</template>
<script>
import 'devextreme/dist/css/dx.light.css';
import { DxResponsiveBox, DxCol, DxRow } from 'devextreme-vue/responsive-box';
export default {
components: {
DxResponsiveBox,
DxCol,
DxRow
}
};
</script>
<style>
html, body { height: 100%; }
</style>React
import React from 'react';
import 'devextreme/dist/css/dx.light.css';
import ResponsiveBox, { Row, Col } from 'devextreme-react/responsive-box';
class App extends React.Component {
render() {
return (
<ResponsiveBox ...
singleColumnScreen="xs sm"> {/* Single-column layout on small and extra small screens */}
<Row ... /> {/* Ignored */}
<Col ... /> {/* Ignored */}
{/* ... */}
</ResponsiveBox>
);
}
}
export default App;
html, body { height: 100%; }See Also
If you have technical questions, please create a support ticket in the DevExpress Support Center.