If you have technical questions, please create a support ticket in the DevExpress Support Center.
import React from 'react';
import Box, { Item } from 'devextreme-react/box';
const App = () => (
<React.Fragment>
<Box direction="row" width="100%" height={75}>
<Item ratio={1}>
<div className="rect demo-dark">ratio = 1</div>
</Item>
<Item ratio={2}>
<div className="rect demo-light">ratio = 2</div>
</Item>
<Item ratio={1}>
<div className="rect demo-dark">ratio = 1</div>
</Item>
</Box>
<br />
<Box direction="row" width="100%" height={75}>
<Item ratio={0} baseSize={150}>
<div className="rect demo-dark">150px</div>
</Item>
<Item ratio={1}>
<Box
className="demo-light"
direction="row"
width="100%"
height={75}
align="center"
crossAlign="center"
>
<Item ratio={0} baseSize={50}>
<div className="small"></div>
</Item>
<Item ratio={0} baseSize={50}>
<div className="small"></div>
</Item>
<Item ratio={0} baseSize={50}>
<div className="small"></div>
</Item>
</Box>
</Item>
<Item ratio={0} baseSize="10%">
<div className="rect demo-dark">10%</div>
</Item>
</Box>
<br />
<Box direction="col" width="100%" height={250}>
<Item ratio={1}>
<div className="rect demo-dark header">Header</div>
</Item>
<Item ratio={2} baseSize={0}>
<Box direction="row" width="100%" height={125}>
<Item ratio={1}>
<div className="rect demo-dark">Left Bar</div>
</Item>
<Item ratio={1}>
<div className="rect demo-light">Content</div>
</Item>
<Item ratio={1}>
<div className="rect demo-dark">Right Bar</div>
</Item>
</Box>
</Item>
<Item ratio={1}>
<div className="rect demo-dark footer">Footer</div>
</Item>
</Box>
</React.Fragment>
);
export default App;
xxxxxxxxxx
import React from 'react';
import Box, { Item } from 'devextreme-react/box';
const App = () => (
<React.Fragment>
<Box
direction="row"
width="100%"
height={75}
>
<Item ratio={1}>
<div className="rect demo-dark">ratio = 1</div>
</Item>
<Item ratio={2}>
<div className="rect demo-light">ratio = 2</div>
</Item>
<Item ratio={1}>
<div className="rect demo-dark">ratio = 1</div>
</Item>
</Box>
<br />
<Box
direction="row"
width="100%"
height={75}
>
<Item
ratio={0}
baseSize={150}
>
<div className="rect demo-dark">150px</div>
</Item>
<Item ratio={1}>
<Box
className="demo-light"
direction="row"
width="100%"
height={75}
align="center"
crossAlign="center"
>
<Item
ratio={0}
baseSize={50}
>
<div className="small"></div>
</Item>
<Item
ratio={0}
baseSize={50}
>
<div className="small"></div>
</Item>
<Item
ratio={0}
baseSize={50}
>
<div className="small"></div>
</Item>
</Box>
</Item>
<Item
ratio={0}
baseSize="10%"
>
<div className="rect demo-dark">10%</div>
</Item>
</Box>
<br />
<Box
direction="col"
width="100%"
height={250}
>
<Item ratio={1}>
<div className="rect demo-dark header">Header</div>
</Item>
<Item
ratio={2}
baseSize={0}
>
<Box
direction="row"
width="100%"
height={125}
>
<Item ratio={1}>
<div className="rect demo-dark">Left Bar</div>
</Item>
<Item ratio={1}>
<div className="rect demo-light">Content</div>
</Item>
<Item ratio={1}>
<div className="rect demo-dark">Right Bar</div>
</Item>
</Box>
</Item>
<Item ratio={1}>
<div className="rect demo-dark footer">Footer</div>
</Item>
</Box>
</React.Fragment>
);
export default App;
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import themes from 'devextreme/ui/themes';
import App from './App.tsx';
themes.initialized(() => {
ReactDOM.render(
<App />,
document.getElementById('app'),
);
});
xxxxxxxxxx
window.exports = window.exports || {};
window.config = {
transpiler: 'ts',
typescriptOptions: {
module: 'system',
emitDecoratorMetadata: true,
experimentalDecorators: true,
jsx: 'react',
},
meta: {
'react': {
'esModule': true,
},
'typescript': {
'exports': 'ts',
},
'devextreme/time_zone_utils.js': {
'esModule': true,
},
'devextreme/localization.js': {
'esModule': true,
},
'devextreme/viz/palette.js': {
'esModule': true,
},
'openai': {
'esModule': true,
},
},
paths: {
'npm:': 'https://unpkg.com/',
'bundles:': 'bundles/',
'externals:': 'bundles/externals/',
},
defaultExtension: 'js',
map: {
'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js',
'typescript': 'npm:typescript@4.2.4/lib/typescript.js',
'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js',
'react': 'npm:react@17.0.2/umd/react.development.js',
'react-dom': 'npm:react-dom@17.0.2/umd/react-dom.development.js',
'prop-types': 'npm:prop-types/prop-types.js',
'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js',
'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js',
'es6-object-assign': 'npm:es6-object-assign',
'devextreme': 'npm:devextreme@link:../../packages/devextreme/artifacts/npm/devextreme/cjs',
'devextreme-react': 'npm:devextreme-react@link:../../packages/devextreme-react/npm/cjs',
'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js',
'devexpress-diagram': 'npm:devexpress-diagram@2.2.5/dist/dx-diagram.js',
'devexpress-gantt': 'npm:devexpress-gantt@4.1.54/dist/dx-gantt.js',
'@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12',
'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js',
'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js',
'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js',
'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js',
'inferno-hydrate': 'npm:inferno-hydrate/dist/inferno-hydrate.min.js',
'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js',
'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js',
'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js',
'devextreme-cldr-data': 'npm:devextreme-cldr-data@1.0.3',
// SystemJS plugins
'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js',
'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js',
// Prettier
'prettier/standalone': 'npm:prettier@2.8.8/standalone.js',
'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js',
},
packages: {
'devextreme': {
defaultExtension: 'js',
},
'devextreme-react': {
main: 'index.js',
},
'devextreme/events/utils': {
main: 'index',
},
'devextreme/localization/messages': {
format: 'json',
defaultExtension: 'json',
},
'devextreme/events': {
main: 'index',
},
'es6-object-assign': {
main: './index.js',
defaultExtension: 'js',
},
},
packageConfigPaths: [
'npm:@devextreme/*/package.json',
'npm:@devextreme/runtime@3.0.12/inferno/package.json',
],
babelOptions: {
sourceMaps: false,
stage0: true,
react: true,
},
};
System.config(window.config);
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import themes from 'devextreme/ui/themes';
import App from './App.js';
themes.initialized(() => {
ReactDOM.render(<App />, document.getElementById('app'));
});
xxxxxxxxxx
<html lang="en">
<head></head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
xxxxxxxxxx
.rect {
text-align: center;
font-size: 30px;
padding-top: 10px;
height: 100%;
}
.demo-light {
background: rgba(245, 229, 166, 0.5);
}
.demo-dark {
background: rgba(148, 215, 199, 0.5);
}
.demo-dark.header {
background: rgba(243, 158, 108, 0.5);
}
.demo-dark.footer {
background: rgba(123, 155, 207, 0.5);
}
.small {
height: 50px;
border: 1px solid lightgray;
}
Set the Box's width and height properties to specify the layout's overall dimensions. To add blocks, use the items array, the dataSource property, or specify dxItems in the markup.
This demo shows how to use the Box component to create three different layouts.
The first Box sets direction to row
and thus arranges items horizontally. Items use the ratio property to set their width in relative units.
The second Box shows two additional features:
- Items now use the baseSize property to set their width in pixels or percent.
- The middle item contains a nested Box. The align and crossAlign properties make sure that the nested layout is centered within its container.
The third Box demonstrates a layout similar to a basic web page structure. The root layout sets direction to col
and arranges its items vertically. The nested layout is arranged horizontally.