--- localeCode: en-US order: 11 category: Basic title: Layout subTitle: Layout icon: doc-layout dir: column brief: Assist in the overall layout of a page. --- ## Overview - `Layout`: Layout containers. You can nest `Header` `Sider` `Content` `Footer` or `Layout` itself inside. - `Header`: Head component, can only be used inside `Layout`. - `Sider`: Sidebar, can only be used inside `Layout`. - `Content`: Content component, can only be used inside `Layout`. - `Footer`: Footer component, can only be used inside `Layout`. > Note: Layout components are implemented with Flex layout. Browser compatibility may need to be considered. ## Demos ### How to import ```jsx import import { Layout } from '@douyinfe/semi-ui'; ``` ### Three-section Layout ```jsx live=true dir="column" hideInDSM import React from 'react'; import { Layout } from '@douyinfe/semi-ui'; () => { const { Header, Footer, Content } = Layout; return ( Header Content ); }; ``` ### Left-sidebar Layout ```jsx live=true dir="column" hideInDSM import React from 'react'; import { Layout } from '@douyinfe/semi-ui'; () => { const { Header, Footer, Sider, Content } = Layout; return ( Header Sider Content ); }; ``` ### Right-sidebar Layout ```jsx live=true dir="column" hideInDSM import React from 'react'; import { Layout } from '@douyinfe/semi-ui'; () => { const { Header, Footer, Sider, Content } = Layout; return ( Header Content Sider ); }; ``` ### Sidebar Layout ```jsx live=true dir="column" hideInDSM import React from 'react'; import { Layout } from '@douyinfe/semi-ui'; () => { const { Header, Footer, Sider, Content } = Layout; return ( Sider Header Content ); }; ``` ### Responsive Layout Six response sizes are preset in the sidebar: `xs`,`sm`,`md`,`lg`,`xl`,`xxl`. You can use `breakpoint` to set breakpoints, and use `onBreakpoint` to call callback functions. ```jsx live=true dir="column" hideInDSM import React from 'react'; import { Layout } from '@douyinfe/semi-ui'; () => { const onbreakpoint = (screen, bool) => { console.log(screen, bool); }; const { Header, Footer, Sider, Content } = Layout; return ( Header Sider Content ); }; ``` ## Layout Examples ### Top-nav Layout ```jsx live=true dir="column" hideInDSM import React from 'react'; import { Layout, Nav, Button, Breadcrumb, Skeleton, Avatar } from '@douyinfe/semi-ui'; import { IconSemiLogo, IconBell, IconHelpCircle, IconBytedanceLogo, IconHome, IconLive, IconSetting } from '@douyinfe/semi-icons'; () => { const { Header, Footer, Content } = Layout; return ( } /> } /> } /> } style={{ color:'var(--semi-color-text-2)', marginRight: '12px', }} /> } style={{ color:'var(--semi-color-text-2)', marginRight: '12px', }} /> YJ )} loading={true}> Hi, Bytedance dance dance. Hi, Bytedance dance dance. ); }; ``` ### Top-Nav SideBar Layout ```jsx live=true dir="column" hideInDSM import React from 'react'; import { Layout, Nav, Button, Breadcrumb, Skeleton, Avatar } from '@douyinfe/semi-ui'; import { IconSemiLogo, IconBell, IconHelpCircle, IconBytedanceLogo, IconHome, IconHistogram, IconLive, IconSetting } from '@douyinfe/semi-icons'; () => { const { Header, Footer, Sider, Content } = Layout; return ( Semi Design Semi Theme Semi Blocks } style={{ color:'var(--semi-color-text-2)', marginRight: '12px', }} /> } style={{ color:'var(--semi-color-text-2)', marginRight: '12px', }} /> YJ }, { itemKey: 'Histogram', text: 'Histogram', icon: }, { itemKey: 'Live', text: 'Live', icon: }, { itemKey: 'Setting', text: 'Setting', icon: }, ]} footer={{ collapseButton: true, }} /> )} loading={true}> Hi, Bytedance dance dance. Hi, Bytedance dance dance. ); }; ``` ### SideBar Navigation ```jsx live=true dir="column" hideInDSM import React from 'react'; import { Layout, Nav, Button, Breadcrumb, Skeleton, Avatar } from '@douyinfe/semi-ui'; import { IconBell, IconHelpCircle, IconBytedanceLogo, IconHome, IconHistogram, IconLive, IconSetting } from '@douyinfe/semi-icons'; () => { const { Header, Footer, Sider, Content } = Layout; return ( }, { itemKey: 'Histogram', text: 'Histogram', icon: }, { itemKey: 'Live', text: 'Live', icon: }, { itemKey: 'Setting', text: 'Setting', icon: }, ]} header={{ logo: , text: 'Webcast' }} footer={{ collapseButton: true, }} /> } style={{ color:'var(--semi-color-text-2)', marginRight: '12px', }} /> } style={{ color:'var(--semi-color-text-2)', marginRight: '12px', }} /> YJ > } > )} loading={true}> Hi, Bytedance dance dance. Hi, Bytedance dance dance. ); }; ``` ## API Reference ### Layout > `Layout.Header`, `Layout.Footer`, `Layout.Content` use same API as `Layout` | Properties | Instructions | type | Default | | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------- | ------- | | className | Class name | string | - | | hasSider | Indicates that there is a Sider in the child element, which is generally not specified. It can be used to avoid style flashing during SSR. | boolean | - | | style | Style | CSSProperties | - | ### Layout.Sider | Properties | Instructions | type | Default | | ------------ | -------------------------------------------------------------------------------------- | ------------------------------------ | ------- | | breakpoint | Breakpoints that trigger responsive layout, one of 'xs', 'sm', 'md', 'lg', 'xl', 'xxl' | String[] | - | | className | Class name | string | - | | style | Style | CSSProperties | - | | onBreakpoint | Callback function when triggering a responsive layout breakpoint | (screen: string, broken: bool) => void | - | ### responsive map ```text { xs: '(max-width: 575px)', sm: '(min-width: 576px)', md: '(min-width: 768px)', lg: '(min-width: 992px)', xl: '(min-width: 1200px)', xxl: '(min-width: 1600px)', } ```
Hi, Bytedance dance dance.