Grid 栅格


概述

栅格化设计是按照一定的规则把页面分成固定的相同宽度,然后列出各种组合的可能性,以便于在进行页面呈现的时候能够快速的进行布局。市面上一般使用 12栅格 系统,也有采用 8栅格 系统的,但是随着设备屏幕越来越大,传统的 12栅格 系统在一些业务场景下,没办法很好的解决元素布局的问题,所以我们使用了 24栅格 系统。也就是将页面区域 24 等分。

栅格系统需要注重一致的外边距和间隙宽度,所以我们采用了 8dp 的栅格系统,即栅格系统中的所有组件都与间隔为 8dp 的基准网格对齐,一切距离、尺寸都应该是 8dp 的整数倍(AT-UI 在尽量遵守该规则,但存在部分元素不符合 8dp 的规范)。由于 8dp 对于文字排版可能会存在过宽的情况,所以文字排版使用 4dp 的基准。

8dp 栅格系统相关资源:The 8-Point Grid

Flex 布局

该栅格系统使用 Flexbox 实现,支持 Flex 布局,允许子元素在父节点内的水平对齐方式(居左,居中,居右)等

屏幕 Breakpoint

参考 BootstrapSemantic UIAT-UI 选用了如下 Breakpoint

Breakpoint设备类型
480pxMobile
768pxTablet
992pxDesktop
1200pxWide Desktop

基础栅格

使用单一的 row 和多个 col 组合,创建基础的栅格布局

Layout布局 - 图1

  1. <div class="row at-row no-gutter" v-for="n in 24/2">
  2. <div :class="`col-md-${n}`"><div class="at-box-row bg-c-brand-dark"></div></div>
  3. <div :class="`col-md-${24 - n}`"><div class="at-box-row bg-c-brand-light"></div></div>
  4. </div>

分隔布局

col 块之间增加间隔,默认添加间隔,如不需要间隔,可添加 class="no-gutter"

Layout布局 - 图2

  1. <div class="row at-row" v-for="n in 24/2">
  2. <div :class="`col-md-${n}`"><div class="at-box-row bg-c-brand-dark"></div></div>
  3. <div :class="`col-md-${24 - n}`"><div class="at-box-row bg-c-brand-light"></div></div>
  4. </div>

左右偏移

列与列之间可以通过设置 offset 来设定偏移值,例如:col-md-offset-3,意思是向左偏移 3 个单元格

Layout布局 - 图3

  1. <div class="row at-row" v-for="n in 6">
  2. <div class="col-md-2"><div class="at-box-row bg-c-brand-dark"></div></div>
  3. <div :class="`col-md-2 col-md-offset-${n}`"><div class="at-box-row bg-c-brand-dark"></div></div>
  4. </div>

Flex 布局

AT-UIGrid System 就是使用 Flexbox 实现的,如果要针对某些元素设置 Flex 布局,可使用 class="flex"。子元素通过添加不同的值 flex-startflex-centerflex-endflex-topflex-middleflex-aroundflex-between ,分别定义其在父元素中的排列方式。

Layout布局 - 图4

  1. <p class="demo-desc">flex-start</p>
  2. <div class="row at-row no-gutter">
  3. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  4. <div class="col-md-4"><div class="at-box-row bg-c-brand-light"></div></div>
  5. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  6. <div class="col-md-4"><div class="at-box-row bg-c-brand-light"></div></div>
  7. </div>
  8. <p class="demo-desc">flex-center</p>
  9. <div class="row at-row no-gutter flex-center">
  10. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  11. <div class="col-md-4"><div class="at-box-row bg-c-brand-light"></div></div>
  12. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  13. <div class="col-md-4"><div class="at-box-row bg-c-brand-light"></div></div>
  14. </div>
  15. <p class="demo-desc">flex-end</p>
  16. <div class="row at-row no-gutter flex-end">
  17. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  18. <div class="col-md-4"><div class="at-box-row bg-c-brand-light"></div></div>
  19. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  20. <div class="col-md-4"><div class="at-box-row bg-c-brand-light"></div></div>
  21. </div>
  22. <p class="demo-desc">flex-around</p>
  23. <div class="row at-row no-gutter flex-around">
  24. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  25. <div class="col-md-4"><div class="at-box-row bg-c-brand-light"></div></div>
  26. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  27. <div class="col-md-4"><div class="at-box-row bg-c-brand-light"></div></div>
  28. </div>
  29. <p class="demo-desc">flex-between</p>
  30. <div class="row at-row no-gutter flex-between">
  31. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  32. <div class="col-md-4"><div class="at-box-row bg-c-brand-light"></div></div>
  33. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  34. <div class="col-md-4"><div class="at-box-row bg-c-brand-light"></div></div>
  35. </div>

栅格列的对齐方式

row 中的子元素 col 的对齐方式,支持三种对齐方式:flex-topflex-middleflex-bottom

Layout布局 - 图5

  1. <p class="demo-desc">flex-top</p>
  2. <div class="row at-row flex-center">
  3. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  4. <div class="col-md-4"><div class="at-box-row bg-c-brand-light" style="height: 100px"></div></div>
  5. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark" style="height: 70px"></div></div>
  6. <div class="col-md-4"><div class="at-box-row bg-c-brand-light" style="height: 120px"></div></div>
  7. </div>
  8. <p class="demo-desc">flex-middle</p>
  9. <div class="row at-row flex-center flex-middle">
  10. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  11. <div class="col-md-4"><div class="at-box-row bg-c-brand-light" style="height: 100px"></div></div>
  12. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark" style="height: 70px"></div></div>
  13. <div class="col-md-4"><div class="at-box-row bg-c-brand-light" style="height: 120px"></div></div>
  14. </div>
  15. <p class="demo-desc">flex-bottom</p>
  16. <div class="row at-row flex-center flex-bottom">
  17. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark"></div></div>
  18. <div class="col-md-4"><div class="at-box-row bg-c-brand-light" style="height: 100px"></div></div>
  19. <div class="col-md-4"><div class="at-box-row bg-c-brand-dark" style="height: 70px"></div></div>
  20. <div class="col-md-4"><div class="at-box-row bg-c-brand-light" style="height: 120px"></div></div>
  21. </div>

类名说明

classname说明
.containerGrid 容器,相对父容器居中对齐
.container-fluid容器左右两边预留 24px 的间隙
.no-gutter默认 col 之间会设置 8px 的间隔,添加此类名可去除默认的间隔
.row包裹 col 的容器
.row.reverse反向排列子元素
.flex使用 flexbox 布局