--- localeCode: zh-CN order: 12 category: 基础 title: Layout 布局 icon: doc-layout dir: column brief: 协助进行页面级整体布局。 --- ## 概述 - `Layout`:布局容器,其下可嵌套 `Header` `Sider` `Content` `Footer` 或 `Layout` 本身,可以放在任何父容器中。 - `Header`:顶部布局,其下可嵌套任何元素,只能放在 `Layout` 中。 - `Sider`:侧边栏,其下可嵌套任何元素,只能放在 `Layout` 中。 - `Content`:内容部分,其下可嵌套任何元素,只能放在 `Layout` 中。 - `Footer`:底部布局,其下可嵌套任何元素,只能放在 `Layout` 中。 1、布局组件采用 Flex 布局实现,无法在非现代浏览器中工作 2、Layout 组件仅会帮你实现布局,但不会附带背景色、文本色、宽高度等样式。你可以根据自己实际需求传入 style 或给定特定 className 另行编写css实现 ## 代码演示 ### 如何引入 ```jsx import import { Layout } from '@douyinfe/semi-ui'; ``` ### 三行布局 ```jsx live=true dir="column" hideInDSM import React from 'react'; import { Layout } from '@douyinfe/semi-ui'; () => { const { Header, Footer, Content } = Layout; return ( Header Content ); }; ``` ### 左侧边栏布局 ```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 ); }; ``` ### 右侧边栏布局 ```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 ); }; ``` ### 侧边栏布局 ```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 ); }; ``` ### 响应式布局 侧边栏预设了六个响应尺寸:`xs`、`sm`、`md`、`lg`、`xl`、`xxl`。可以通过设置 `breakpoint` 属性设置断点,通过 `onBreakpoint` 调用回调函数。 ```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 ); }; ``` ## 布局示例 ### 顶部导航布局 ```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. ); }; ``` ### 顶部导航-侧边布局 ```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 ( 模版推荐 所有模版 我的模版 } style={{ color: 'var(--semi-color-text-2)', marginRight: '12px', }} /> } style={{ color: 'var(--semi-color-text-2)', marginRight: '12px', }} /> YJ }, { itemKey: 'Histogram', text: '基础数据', icon: }, { itemKey: 'Live', text: '测试功能', icon: }, { itemKey: 'Setting', text: '设置', icon: }, ]} footer={{ collapseButton: true, }} /> } loading={true}> Hi, Bytedance dance dance. Hi, Bytedance dance dance. ); }; ``` ### 侧边导航 ```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: '基础数据', icon: }, { itemKey: 'Live', text: '测试功能', icon: }, { itemKey: 'Setting', text: '设置', icon: }, ]} header={{ logo: , text: 'Semi 运营后台', }} 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 参考 ### Layout > `Layout.Header` `Layout.Footer` `Layout.Content` API 与 `Layout` 相同 | 属性 | 说明 | 类型 | 默认值 | | --------- | ------------------------------------------------------------------ | ------- | ------ | | className | 类名 | string | - | | hasSider | 表示子元素里有 Sider,一般不用指定。可用于服务端渲染时避免样式闪动 | boolean | - | | style | 样式 | CSSProperties | - | | aria-label | [aria-label](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute) 属性,用来给当前元素加上的标签描述, 提升可访问性 >=2.3.0 | string | - | | role | [role](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles) 属性, 提升可访问性 >=2.3.0 | string | - | ### Layout.Sider | 属性 | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | | breakpoint | 触发响应式布局的断点,可选值'xs', 'sm', 'md', 'lg', 'xl', 'xxl' | string[] | - | | className | 类名 | string | - | | style | 样式 | CSSProperties | - | | onBreakpoint | 触发响应式布局断点时的回调 | (screen: string, broken: bool) => void | - | | aria-label | [aria-label](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute)属性,用来给当前元素加上的标签描述, 提升可访问性 >=2.3.0 | string | - | | role | [role](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles)属性, 提升可访问性 >=2.3.0 | string | - | ### 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)', }; ``` ## Accessibility ### ARIA - Sider 可传入 aria-label props,描述该 Sider 作用。 - Header Content Main Footer 可传入 role aria-label 描述对应元素作用。
Hi, Bytedance dance dance.