Layout 布局

协助进行页面级整体布局。

设计规则

尺寸

一级导航项偏左靠近 logo 放置,辅助菜单偏右放置。

  • 顶部导航(大部分系统):一级导航高度 64px,二级导航 48px
  • 顶部导航(展示类页面):一级导航高度 80px,二级导航 56px
  • 顶部导航高度的范围计算公式为:48+8n
  • 侧边导航宽度的范围计算公式:200+8n

交互

  • 一级导航和末级的导航需要在可视化的层面被强调出来;
  • 当前项应该在呈现上优先级最高;
  • 当导航收起的时候,当前项的样式自动赋予给它的上一个层级;
  • 左侧导航栏的收放交互同时支持手风琴和全展开的样式,根据业务的要求进行适当的选择。

视觉

导航样式上需要根据信息层级合理的选择样式:

  • 大色块强调

建议用于底色为深色系时,当前页面父级的导航项。

  • 高亮火柴棍

当导航栏底色为浅色系时使用,可用于当前页面对应导航项,建议尽量在导航路径的最终项使用。

  • 字体高亮变色

从可视化层面,字体高亮的视觉强化力度低于大色块,通常在当前项的上一级使用。

  • 字体放大

12px14px 是导航的标准字号,14 号字体用在一、二级导航中。字号可以考虑导航项的等级做相应选择。

组件概述

  • Layout:布局容器,其下可嵌套 HeaderSiderContentFooterLayout 本身,可以放在任何父容器中。
  • Header:顶部布局,自带默认样式,其下可嵌套任何元素,只能放在 Layout 中。
  • Sider:侧边栏,自带默认样式及基本功能,其下可嵌套任何元素,只能放在 Layout 中。
  • Content:内容部分,自带默认样式,其下可嵌套任何元素,只能放在 Layout 中。
  • Footer:底部布局,自带默认样式,其下可嵌套任何元素,只能放在 Layout 中。
    注意:采用 flex 布局实现,请注意浏览器兼容性问题。

代码示例

Layout 布局 - 图1

基本结构

典型的页面布局

  1. <template>
  2. <div class="layout">
  3. <Layout>
  4. <Header>Header</Header>
  5. <Content>Content</Content>
  6. <Footer>Footer</Footer>
  7. </Layout>
  8. <Layout>
  9. <Header>Header</Header>
  10. <Layout>
  11. <Sider hide-trigger>Sider</Sider>
  12. <Content>Content</Content>
  13. </Layout>
  14. <Footer>Footer</Footer>
  15. </Layout>
  16. <Layout>
  17. <Header>Header</Header>
  18. <Layout>
  19. <Content>Content</Content>
  20. <Sider hide-trigger>Sider</Sider>
  21. </Layout>
  22. <Footer>Footer</Footer>
  23. </Layout>
  24. <Layout>
  25. <Sider hide-trigger>Sider</Sider>
  26. <Layout>
  27. <Header>Header</Header>
  28. <Content>Content</Content>
  29. <Footer>Footer</Footer>
  30. </Layout>
  31. </Layout>
  32. </div>
  33. </template>
  34. <script>
  35. export default {
  36. }
  37. </script>

Layout 布局 - 图2

上中下布局

最基本的『上-中-下』布局。

一般主导航放置于页面的顶端,从左自右依次为:logo、一级导航项、辅助菜单(用户、设置、通知等)。通常将内容放在固定尺寸(例如:1200px)内,整个页面排版稳定,不受用户终端显示器影响;上下级的结构符合用户上下浏览的习惯,也是较为经典的网站导航模式。页面上下切分的方式提高了主工作区域的信息展示效率,但在纵向空间上会有一些牺牲。此外,由于导航栏水平空间的限制,不适合那些一级导航项很多的信息结构。

  1. <style scoped>
  2. .layout{
  3. border: 1px solid #d7dde4;
  4. background: #f5f7f9;
  5. position: relative;
  6. border-radius: 4px;
  7. overflow: hidden;
  8. }
  9. .layout-logo{
  10. width: 100px;
  11. height: 30px;
  12. background: #5b6270;
  13. border-radius: 3px;
  14. float: left;
  15. position: relative;
  16. top: 15px;
  17. left: 20px;
  18. }
  19. .layout-nav{
  20. width: 420px;
  21. margin: 0 auto;
  22. margin-right: 20px;
  23. }
  24. .layout-footer-center{
  25. text-align: center;
  26. }
  27. </style>
  28. <template>
  29. <div class="layout">
  30. <Layout>
  31. <Header>
  32. <Menu mode="horizontal" theme="dark" active-name="1">
  33. <div class="layout-logo"></div>
  34. <div class="layout-nav">
  35. <MenuItem name="1">
  36. <Icon type="ios-navigate"></Icon>
  37. Item 1
  38. </MenuItem>
  39. <MenuItem name="2">
  40. <Icon type="ios-keypad"></Icon>
  41. Item 2
  42. </MenuItem>
  43. <MenuItem name="3">
  44. <Icon type="ios-analytics"></Icon>
  45. Item 3
  46. </MenuItem>
  47. <MenuItem name="4">
  48. <Icon type="ios-paper"></Icon>
  49. Item 4
  50. </MenuItem>
  51. </div>
  52. </Menu>
  53. </Header>
  54. <Content :style="{padding: '0 50px'}">
  55. <Breadcrumb :style="{margin: '20px 0'}">
  56. <BreadcrumbItem>Home</BreadcrumbItem>
  57. <BreadcrumbItem>Components</BreadcrumbItem>
  58. <BreadcrumbItem>Layout</BreadcrumbItem>
  59. </Breadcrumb>
  60. <Card>
  61. <div style="min-height: 200px;">
  62. Content
  63. </div>
  64. </Card>
  65. </Content>
  66. <Footer class="layout-footer-center">2011-2016 &copy; TalkingData</Footer>
  67. </Layout>
  68. </div>
  69. </template>
  70. <script>
  71. export default {
  72. }
  73. </script>

Layout 布局 - 图3

顶部-侧边布局-通栏

同样拥有顶部导航及侧边栏,区别是两边未留边距,多用于应用型的网站。

  1. <style scoped>
  2. .layout{
  3. border: 1px solid #d7dde4;
  4. background: #f5f7f9;
  5. position: relative;
  6. border-radius: 4px;
  7. overflow: hidden;
  8. }
  9. .layout-logo{
  10. width: 100px;
  11. height: 30px;
  12. background: #5b6270;
  13. border-radius: 3px;
  14. float: left;
  15. position: relative;
  16. top: 15px;
  17. left: 20px;
  18. }
  19. .layout-nav{
  20. width: 420px;
  21. margin: 0 auto;
  22. margin-right: 20px;
  23. }
  24. </style>
  25. <template>
  26. <div class="layout">
  27. <Layout>
  28. <Header>
  29. <Menu mode="horizontal" theme="dark" active-name="1">
  30. <div class="layout-logo"></div>
  31. <div class="layout-nav">
  32. <MenuItem name="1">
  33. <Icon type="ios-navigate"></Icon>
  34. Item 1
  35. </MenuItem>
  36. <MenuItem name="2">
  37. <Icon type="ios-keypad"></Icon>
  38. Item 2
  39. </MenuItem>
  40. <MenuItem name="3">
  41. <Icon type="ios-analytics"></Icon>
  42. Item 3
  43. </MenuItem>
  44. <MenuItem name="4">
  45. <Icon type="ios-paper"></Icon>
  46. Item 4
  47. </MenuItem>
  48. </div>
  49. </Menu>
  50. </Header>
  51. <Layout>
  52. <Sider hide-trigger :style="{background: '#fff'}">
  53. <Menu active-name="1-2" theme="light" width="auto" :open-names="['1']">
  54. <Submenu name="1">
  55. <template slot="title">
  56. <Icon type="ios-navigate"></Icon>
  57. Item 1
  58. </template>
  59. <MenuItem name="1-1">Option 1</MenuItem>
  60. <MenuItem name="1-2">Option 2</MenuItem>
  61. <MenuItem name="1-3">Option 3</MenuItem>
  62. </Submenu>
  63. <Submenu name="2">
  64. <template slot="title">
  65. <Icon type="ios-keypad"></Icon>
  66. Item 2
  67. </template>
  68. <MenuItem name="2-1">Option 1</MenuItem>
  69. <MenuItem name="2-2">Option 2</MenuItem>
  70. </Submenu>
  71. <Submenu name="3">
  72. <template slot="title">
  73. <Icon type="ios-analytics"></Icon>
  74. Item 3
  75. </template>
  76. <MenuItem name="3-1">Option 1</MenuItem>
  77. <MenuItem name="3-2">Option 2</MenuItem>
  78. </Submenu>
  79. </Menu>
  80. </Sider>
  81. <Layout :style="{padding: '0 24px 24px'}">
  82. <Breadcrumb :style="{margin: '24px 0'}">
  83. <BreadcrumbItem>Home</BreadcrumbItem>
  84. <BreadcrumbItem>Components</BreadcrumbItem>
  85. <BreadcrumbItem>Layout</BreadcrumbItem>
  86. </Breadcrumb>
  87. <Content :style="{padding: '24px', minHeight: '280px', background: '#fff'}">
  88. Content
  89. </Content>
  90. </Layout>
  91. </Layout>
  92. </Layout>
  93. </div>
  94. </template>
  95. <script>
  96. export default {
  97. }
  98. </script>

Layout 布局 - 图4

顶部-侧边布局

拥有顶部导航及侧边栏的页面,多用于展示类网站。

  1. <style scoped>
  2. .layout{
  3. border: 1px solid #d7dde4;
  4. background: #f5f7f9;
  5. position: relative;
  6. border-radius: 4px;
  7. overflow: hidden;
  8. }
  9. .layout-logo{
  10. width: 100px;
  11. height: 30px;
  12. background: #5b6270;
  13. border-radius: 3px;
  14. float: left;
  15. position: relative;
  16. top: 15px;
  17. left: 20px;
  18. }
  19. .layout-nav{
  20. width: 420px;
  21. margin: 0 auto;
  22. margin-right: 20px;
  23. }
  24. .layout-footer-center{
  25. text-align: center;
  26. }
  27. </style>
  28. <template>
  29. <div class="layout">
  30. <Layout>
  31. <Header>
  32. <Menu mode="horizontal" theme="dark" active-name="1">
  33. <div class="layout-logo"></div>
  34. <div class="layout-nav">
  35. <MenuItem name="1">
  36. <Icon type="ios-navigate"></Icon>
  37. Item 1
  38. </MenuItem>
  39. <MenuItem name="2">
  40. <Icon type="ios-keypad"></Icon>
  41. Item 2
  42. </MenuItem>
  43. <MenuItem name="3">
  44. <Icon type="ios-analytics"></Icon>
  45. Item 3
  46. </MenuItem>
  47. <MenuItem name="4">
  48. <Icon type="ios-paper"></Icon>
  49. Item 4
  50. </MenuItem>
  51. </div>
  52. </Menu>
  53. </Header>
  54. <Layout :style="{padding: '0 50px'}">
  55. <Breadcrumb :style="{margin: '16px 0'}">
  56. <BreadcrumbItem>Home</BreadcrumbItem>
  57. <BreadcrumbItem>Components</BreadcrumbItem>
  58. <BreadcrumbItem>Layout</BreadcrumbItem>
  59. </Breadcrumb>
  60. <Content :style="{padding: '24px 0', minHeight: '280px', background: '#fff'}">
  61. <Layout>
  62. <Sider hide-trigger :style="{background: '#fff'}">
  63. <Menu active-name="1-2" theme="light" width="auto" :open-names="['1']">
  64. <Submenu name="1">
  65. <template slot="title">
  66. <Icon type="ios-navigate"></Icon>
  67. Item 1
  68. </template>
  69. <MenuItem name="1-1">Option 1</MenuItem>
  70. <MenuItem name="1-2">Option 2</MenuItem>
  71. <MenuItem name="1-3">Option 3</MenuItem>
  72. </Submenu>
  73. <Submenu name="2">
  74. <template slot="title">
  75. <Icon type="ios-keypad"></Icon>
  76. Item 2
  77. </template>
  78. <MenuItem name="2-1">Option 1</MenuItem>
  79. <MenuItem name="2-2">Option 2</MenuItem>
  80. </Submenu>
  81. <Submenu name="3">
  82. <template slot="title">
  83. <Icon type="ios-analytics"></Icon>
  84. Item 3
  85. </template>
  86. <MenuItem name="3-1">Option 1</MenuItem>
  87. <MenuItem name="3-2">Option 2</MenuItem>
  88. </Submenu>
  89. </Menu>
  90. </Sider>
  91. <Content :style="{padding: '24px', minHeight: '280px', background: '#fff'}">
  92. Content
  93. </Content>
  94. </Layout>
  95. </Content>
  96. </Layout>
  97. <Footer class="layout-footer-center">2011-2016 &copy; TalkingData</Footer>
  98. </Layout>
  99. </div>
  100. </div>
  101. </template>
  102. <script>
  103. export default {
  104. }
  105. </script>

Layout 布局 - 图5

侧边布局

侧边两列式布局。页面横向空间有限时,侧边导航可收起。

侧边导航在页面布局上采用的是左右的结构,一般主导航放置于页面的左侧固定位置,辅助菜单放置于工作区顶部。内容根据浏览器终端进行自适应,能提高横向空间的使用率,但是整个页面排版不稳定。侧边导航的模式层级扩展性强,一、二、三级导航项目可以更为顺畅且具关联性的被展示,同时侧边导航可以固定,使得用户在操作和浏览中可以快速的定位和切换当前位置,有很高的操作效率。但这类导航横向页面内容的空间会被牺牲一部份。

  1. <style scoped>
  2. .layout-con{
  3. height: 100%;
  4. width: 100%;
  5. }
  6. .menu-item span{
  7. display: inline-block;
  8. overflow: hidden;
  9. width: 69px;
  10. text-overflow: ellipsis;
  11. white-space: nowrap;
  12. vertical-align: bottom;
  13. transition: width .2s ease .2s;
  14. }
  15. .menu-item i{
  16. transform: translateX(0px);
  17. transition: font-size .2s ease, transform .2s ease;
  18. vertical-align: middle;
  19. font-size: 16px;
  20. }
  21. .collapsed-menu span{
  22. width: 0px;
  23. transition: width .2s ease;
  24. }
  25. .collapsed-menu i{
  26. transform: translateX(5px);
  27. transition: font-size .2s ease .2s, transform .2s ease .2s;
  28. vertical-align: middle;
  29. font-size: 22px;
  30. }
  31. </style>
  32. <template>
  33. <div class="layout">
  34. <Layout :style="{minHeight: '100vh'}">
  35. <Sider collapsible :collapsed-width="78" v-model="isCollapsed">
  36. <Menu active-name="1-2" theme="dark" width="auto" :class="menuitemClasses">
  37. <MenuItem name="1-1">
  38. <Icon type="ios-navigate"></Icon>
  39. <span>Option 1</span>
  40. </MenuItem>
  41. <MenuItem name="1-2">
  42. <Icon type="search"></Icon>
  43. <span>Option 2</span>
  44. </MenuItem>
  45. <MenuItem name="1-3">
  46. <Icon type="settings"></Icon>
  47. <span>Option 3</span>
  48. </MenuItem>
  49. </Menu>
  50. </Sider>
  51. <Layout>
  52. <Header :style="{background: '#fff', boxShadow: '0 2px 3px 2px rgba(0,0,0,.1)'}"></Header>
  53. <Content :style="{padding: '0 16px 16px'}">
  54. <Breadcrumb :style="{margin: '16px 0'}">
  55. <BreadcrumbItem>Home</BreadcrumbItem>
  56. <BreadcrumbItem>Components</BreadcrumbItem>
  57. <BreadcrumbItem>Layout</BreadcrumbItem>
  58. </Breadcrumb>
  59. <Card>
  60. <div style="height: 600px">Content</div>
  61. </Card>
  62. </Content>
  63. </Layout>
  64. </Layout>
  65. </div>
  66. </template>
  67. <script>
  68. export default {
  69. data () {
  70. return {
  71. isCollapsed: false
  72. };
  73. },
  74. computed: {
  75. menuitemClasses: function () {
  76. return [
  77. 'menu-item',
  78. this.isCollapsed ? 'collapsed-menu' : ''
  79. ]
  80. }
  81. }
  82. }
  83. </script>

Layout 布局 - 图6

自定义触发器

要使用自定义触发器,可以设置hide-trigger属性来隐藏默认触发器,也可以通过slot替换默认触发器。

  1. <style scoped>
  2. .layout{
  3. border: 1px solid #d7dde4;
  4. background: #f5f7f9;
  5. position: relative;
  6. border-radius: 4px;
  7. overflow: hidden;
  8. }
  9. .layout-header-bar{
  10. background: #fff;
  11. box-shadow: 0 1px 1px rgba(0,0,0,.1);
  12. }
  13. .layout-logo-left{
  14. width: 90%;
  15. height: 30px;
  16. background: #5b6270;
  17. border-radius: 3px;
  18. margin: 15px auto;
  19. }
  20. .menu-icon{
  21. transition: all .3s;
  22. }
  23. .rotate-icon{
  24. transform: rotate(-90deg);
  25. }
  26. .menu-item span{
  27. display: inline-block;
  28. overflow: hidden;
  29. width: 69px;
  30. text-overflow: ellipsis;
  31. white-space: nowrap;
  32. vertical-align: bottom;
  33. transition: width .2s ease .2s;
  34. }
  35. .menu-item i{
  36. transform: translateX(0px);
  37. transition: font-size .2s ease, transform .2s ease;
  38. vertical-align: middle;
  39. font-size: 16px;
  40. }
  41. .collapsed-menu span{
  42. width: 0px;
  43. transition: width .2s ease;
  44. }
  45. .collapsed-menu i{
  46. transform: translateX(5px);
  47. transition: font-size .2s ease .2s, transform .2s ease .2s;
  48. vertical-align: middle;
  49. font-size: 22px;
  50. }
  51. </style>
  52. <template>
  53. <div class="layout">
  54. <Layout>
  55. <Sider ref="side1" hide-trigger collapsible :collapsed-width="78" v-model="isCollapsed">
  56. <Menu active-name="1-2" theme="dark" width="auto" :class="menuitemClasses">
  57. <MenuItem name="1-1">
  58. <Icon type="ios-navigate"></Icon>
  59. <span>Option 1</span>
  60. </MenuItem>
  61. <MenuItem name="1-2">
  62. <Icon type="ios-search"></Icon>
  63. <span>Option 2</span>
  64. </MenuItem>
  65. <MenuItem name="1-3">
  66. <Icon type="ios-settings"></Icon>
  67. <span>Option 3</span>
  68. </MenuItem>
  69. </Menu>
  70. </Sider>
  71. <Layout>
  72. <Header :style="{padding: 0}" class="layout-header-bar">
  73. <Icon @click.native="collapsedSider" :class="rotateIcon" :style="{margin: '0 20px'}" type="md-menu" size="24"></Icon>
  74. </Header>
  75. <Content :style="{margin: '20px', background: '#fff', minHeight: '260px'}">
  76. Content
  77. </Content>
  78. </Layout>
  79. </Layout>
  80. </div>
  81. </template>
  82. <script>
  83. export default {
  84. data () {
  85. return {
  86. isCollapsed: false
  87. }
  88. },
  89. computed: {
  90. rotateIcon () {
  91. return [
  92. 'menu-icon',
  93. this.isCollapsed ? 'rotate-icon' : ''
  94. ];
  95. },
  96. menuitemClasses () {
  97. return [
  98. 'menu-item',
  99. this.isCollapsed ? 'collapsed-menu' : ''
  100. ]
  101. }
  102. },
  103. methods: {
  104. collapsedSider () {
  105. this.$refs.side1.toggleCollapse();
  106. }
  107. }
  108. }
  109. </script>

Layout 布局 - 图7

响应式布局

Sider支持响应式布局

说明:配置breakpoint 属性即生效,视窗宽度小于breakpoint 时 Sider 缩小为collapsedWidth 宽度,若将collapsedWidth 设置为零,会出现特殊 trigger。

  1. <style scoped>
  2. .layout{
  3. border: 1px solid #d7dde4;
  4. background: #f5f7f9;
  5. position: relative;
  6. border-radius: 4px;
  7. overflow: hidden;
  8. }
  9. .layout-header-bar{
  10. background: #fff;
  11. box-shadow: 0 1px 1px rgba(0,0,0,.1);
  12. }
  13. .menu-item span{
  14. display: inline-block;
  15. overflow: hidden;
  16. width: 69px;
  17. text-overflow: ellipsis;
  18. white-space: nowrap;
  19. vertical-align: bottom;
  20. transition: width .2s ease .2s;
  21. }
  22. .menu-item i{
  23. transform: translateX(0px);
  24. transition: font-size .2s ease, transform .2s ease;
  25. vertical-align: middle;
  26. font-size: 16px;
  27. }
  28. .collapsed-menu span{
  29. width: 0px;
  30. transition: width .2s ease;
  31. }
  32. .collapsed-menu i{
  33. transform: translateX(5px);
  34. transition: font-size .2s ease .2s, transform .2s ease .2s;
  35. vertical-align: middle;
  36. font-size: 22px;
  37. }
  38. </style>
  39. <template>
  40. <div class="layout">
  41. <Layout>
  42. <Sider breakpoint="md" collapsible :collapsed-width="78" v-model="isCollapsed">
  43. <Menu active-name="1-2" theme="dark" width="auto" :class="menuitemClasses">
  44. <MenuItem name="1-1">
  45. <Icon type="ios-navigate"></Icon>
  46. <span>Option 1</span>
  47. </MenuItem>
  48. <MenuItem name="1-2">
  49. <Icon type="ios-search"></Icon>
  50. <span>Option 2</span>
  51. </MenuItem>
  52. <MenuItem name="1-3">
  53. <Icon type="ios-settings"></Icon>
  54. <span>Option 3</span>
  55. </MenuItem>
  56. </Menu>
  57. <div slot="trigger"></div>
  58. </Sider>
  59. <Layout>
  60. <Header class="layout-header-bar"></Header>
  61. <Content :style="{margin: '20px', background: '#fff', minHeight: '220px'}">
  62. Content
  63. </Content>
  64. </Layout>
  65. </Layout>
  66. </div>
  67. </template>
  68. <script>
  69. export default {
  70. data () {
  71. return {
  72. isCollapsed: false
  73. };
  74. },
  75. computed: {
  76. menuitemClasses: function () {
  77. return [
  78. 'menu-item',
  79. this.isCollapsed ? 'collapsed-menu' : ''
  80. ]
  81. }
  82. }
  83. }
  84. </script>

Layout 布局 - 图8

固定头部

一般用于固定顶部导航,方便页面切换。

  1. <style scoped>
  2. .layout{
  3. border: 1px solid #d7dde4;
  4. background: #f5f7f9;
  5. position: relative;
  6. border-radius: 4px;
  7. overflow: hidden;
  8. }
  9. .layout-logo{
  10. width: 100px;
  11. height: 30px;
  12. background: #5b6270;
  13. border-radius: 3px;
  14. float: left;
  15. position: relative;
  16. top: 15px;
  17. left: 20px;
  18. }
  19. .layout-nav{
  20. width: 420px;
  21. margin: 0 auto;
  22. margin-right: 20px;
  23. }
  24. .layout-footer-center{
  25. text-align: center;
  26. }
  27. </style>
  28. <template>
  29. <div class="layout">
  30. <Layout>
  31. <Header :style="{position: 'fixed', width: '100%'}">
  32. <Menu mode="horizontal" theme="dark" active-name="1">
  33. <div class="layout-logo"></div>
  34. <div class="layout-nav">
  35. <MenuItem name="1">
  36. <Icon type="ios-navigate"></Icon>
  37. Item 1
  38. </MenuItem>
  39. <MenuItem name="2">
  40. <Icon type="ios-keypad"></Icon>
  41. Item 2
  42. </MenuItem>
  43. <MenuItem name="3">
  44. <Icon type="ios-analytics"></Icon>
  45. Item 3
  46. </MenuItem>
  47. <MenuItem name="4">
  48. <Icon type="ios-paper"></Icon>
  49. Item 4
  50. </MenuItem>
  51. </div>
  52. </Menu>
  53. </Header>
  54. <Content :style="{margin: '88px 20px 0', background: '#fff', minHeight: '500px'}">
  55. Content
  56. </Content>
  57. <Footer class="layout-footer-center">2011-2016 &copy; TalkingData</Footer>
  58. </Layout>
  59. </div>
  60. </template>
  61. <script>
  62. export default {
  63. }
  64. </script>

Layout 布局 - 图9

固定侧边栏

当内容较长时,使用固定侧边栏可以提供更好的体验。

  1. <style scoped>
  2. .layout{
  3. border: 1px solid #d7dde4;
  4. background: #f5f7f9;
  5. position: relative;
  6. border-radius: 4px;
  7. overflow: hidden;
  8. }
  9. .layout-header-bar{
  10. background: #fff;
  11. box-shadow: 0 1px 1px rgba(0,0,0,.1);
  12. }
  13. </style>
  14. <template>
  15. <div class="layout">
  16. <Sider :style="{position: 'fixed', height: '100vh', left: 0, overflow: 'auto'}">
  17. <Menu active-name="1-2" theme="dark" width="auto" :open-names="['1']">
  18. <Submenu name="1">
  19. <template slot="title">
  20. <Icon type="ios-navigate"></Icon>
  21. Item 1
  22. </template>
  23. <MenuItem name="1-1">Option 1</MenuItem>
  24. <MenuItem name="1-2">Option 2</MenuItem>
  25. <MenuItem name="1-3">Option 3</MenuItem>
  26. </Submenu>
  27. <Submenu name="2">
  28. <template slot="title">
  29. <Icon type="ios-keypad"></Icon>
  30. Item 2
  31. </template>
  32. <MenuItem name="2-1">Option 1</MenuItem>
  33. <MenuItem name="2-2">Option 2</MenuItem>
  34. </Submenu>
  35. <Submenu name="3">
  36. <template slot="title">
  37. <Icon type="ios-analytics"></Icon>
  38. Item 3
  39. </template>
  40. <MenuItem name="3-1">Option 1</MenuItem>
  41. <MenuItem name="3-2">Option 2</MenuItem>
  42. </Submenu>
  43. </Menu>
  44. </Sider>
  45. <Layout :style="{marginLeft: '200px'}">
  46. <Header :style="{background: '#fff', boxShadow: '0 2px 3px 2px rgba(0,0,0,.1)'}"></Header>
  47. <Content :style="{padding: '0 16px 16px'}">
  48. <Breadcrumb :style="{margin: '16px 0'}">
  49. <BreadcrumbItem>Home</BreadcrumbItem>
  50. <BreadcrumbItem>Components</BreadcrumbItem>
  51. <BreadcrumbItem>Layout</BreadcrumbItem>
  52. </Breadcrumb>
  53. <Card>
  54. <div style="height: 600px">Content</div>
  55. </Card>
  56. </Content>
  57. </Layout>
  58. </div>
  59. </template>
  60. <script>
  61. export default {
  62. }
  63. </script>

API

Sider props

属性说明类型默认值
breakpoint触发响应式布局的断点,可选值为xs,sm,md,lg,xlxxl,若不设此属性则不会触发响应式布局。String-
value侧边栏是否收起,可使用 v-model 双向绑定数据。Booleanfalse
width宽度Number200
collapsible是否可收起,设为false后,默认触发器会隐藏,且响应式布局不会触发Booleanfalse
collapsed-width收缩宽度,设置为 0 会出现特殊 triggerNumber64
hide-trigger隐藏默认触发器Booleanfalse
default-collapsed是否默认收起,设置了collapsible后设置此属性侧边栏仍会收起。Booleanfalse
reverse-arrow改变侧边栏触发器箭头方向,和改变侧边栏收起方向,当Sider在右边时可以使用。Booleanfalse

Sider events

事件名说明返回值
on-collapse展开-收起时的回调true / false

Sider slot

名称说明
trigger自定义触发器

Sider methods

方法名说明
toggleCollapse改变Sider展开-收起状态。

breakpoint width

  1. {
  2. xs: '480px',
  3. sm: '576px',
  4. md: '768px',
  5. lg: '992px',
  6. xl: '1200px',
  7. xxl: '1600px'
  8. }