• Flex弹性布局
    • 启用弹性行为
    • 方向
    • 内容对齐与对准
    • 对齐项目
    • 自对齐
    • 自相等
    • 等宽变幻
    • 自浮动Auto margins
      • 与align-items结合实现垂直布局
    • Wrap包裹
    • Order排序
    • 对齐内容

    Flex弹性布局

    引入新的Flex弹性布局,可以实现通过一整套响应灵活的实用程序,快速管理栅格的列、导航、组件等的布局、对齐和大小。通过进一度的定义CSS,还可以实现更复杂的展示样式。

    启用弹性行为

    使用 display 通用属性来创建一个flxbox容器,并将 直属内部子元素 转换为flex属性。 flex元素的容器和子项目可以通过额外的flex属性定义来实现进一步修改。

    FlexBox布局提供了包括诸多优秀特性,其中包括:

    • 在父元素里面内容的简单的垂直对齐
    • 通过使用媒体查询,可以简单的根据设备和屏幕分辨率来对内容重新排序
    • CSS就能实现等高列布局以及垂直处理
      中文版的FlexBox布局教程可见:https://www.z01.com/help/web/3234.shtml (译者注)

    Flex弹性布局  - 图1

    1. <div class="d-flex p-2">I'm a flexbox container!</div>

    Flex弹性布局  - 图2

    1. <div class="d-inline-flex p-2">I'm an inline flexbox container!</div>

    响应式变化也存在于.d-flex and .d-inline-flex这两个通用Class上。

    • .d-flex
    • .d-inline-flex
    • .d-sm-flex
    • .d-sm-inline-flex
    • .d-md-flex
    • .d-md-inline-flex
    • .d-lg-flex
    • .d-lg-inline-flex
    • .d-xl-flex
    • .d-xl-inline-flex

    方向

    基于系统提供的通用样式定义,可以设定flex的容器与内部flex元素的方向,在大多数情况下你可以忽略水平的class样式定义,因为浏览器的默认值是 row-但在比如响应式布局时,可能需要进行显式设定此值。

    浏览器预默认值下,使用 .flex-row 可设置子元素水平方向排版呈现,或者使用.flex-row-reverse 可实现元素在水平上作反方向排列(右对齐、从右到左布局)。

    Flex弹性布局  - 图3

    1. <div class="d-flex flex-row">
    2. <div class="p-2">Flex item 1</div>
    3. <div class="p-2">Flex item 2</div>
    4. <div class="p-2">Flex item 3</div>
    5. </div>
    6. <div class="d-flex flex-row-reverse">
    7. <div class="p-2">Flex item 1</div>
    8. <div class="p-2">Flex item 2</div>
    9. <div class="p-2">Flex item 3</div>
    10. </div>

    使用 .flex-column 设置垂直方向布局,或使用 .flex-column-reverse 实现垂直方向的反转布局(从底向上铺开)。

    Flex弹性布局  - 图4

    1. <div class="d-flex flex-column">
    2. <div class="p-2">Flex item 1</div>
    3. <div class="p-2">Flex item 2</div>
    4. <div class="p-2">Flex item 3</div>
    5. </div>
    6. <div class="d-flex flex-column-reverse">
    7. <div class="p-2">Flex item 1</div>
    8. <div class="p-2">Flex item 2</div>
    9. <div class="p-2">Flex item 3</div>
    10. </div>

    flex-direction的响应式属性规范:

    • .flex-row
    • .flex-row-reverse
    • .flex-column
    • .flex-column-reverse
    • .flex-sm-row
    • .flex-sm-row-reverse
    • .flex-sm-column
    • .flex-sm-column-reverse
    • .flex-md-row
    • .flex-md-row-reverse
    • .flex-md-column
    • .flex-md-column-reverse
    • .flex-lg-row
    • .flex-lg-row-reverse
    • .flex-lg-column
    • .flex-lg-column-reverse
    • .flex-xl-row
    • .flex-xl-row-reverse
    • .flex-xl-column
    • .flex-xl-column-reverse

    内容对齐与对准

    使用flexbox弹性布局容器上的 justify-content-* 通用样式可以改变flx项目在主轴上的对齐(x轴开始,如果 flex-direction: column则为y轴),或选方向(值)包括: start (浏览器默认值),、endcenterbetweenaround

    Flex弹性布局  - 图5

    1. <div class="d-flex justify-content-start">...</div>
    2. <div class="d-flex justify-content-end">...</div>
    3. <div class="d-flex justify-content-center">...</div>
    4. <div class="d-flex justify-content-between">...</div>
    5. <div class="d-flex justify-content-around">...</div>

    justify-content-*样式也通用存在响应式属性规范:

    • .justify-content-start
    • .justify-content-end
    • .justify-content-center
    • .justify-content-between
    • .justify-content-around
    • .justify-content-sm-start
    • .justify-content-sm-end
    • .justify-content-sm-center
    • .justify-content-sm-between
    • .justify-content-sm-around
    • .justify-content-md-start
    • .justify-content-md-end
    • .justify-content-md-center
    • .justify-content-md-between
    • .justify-content-md-around
    • .justify-content-lg-start
    • .justify-content-lg-end
    • .justify-content-lg-center
    • .justify-content-lg-between
    • .justify-content-lg-around
    • .justify-content-xl-start
    • .justify-content-xl-end
    • .justify-content-xl-center
    • .justify-content-xl-between
    • .justify-content-xl-around

    对齐项目

    使用 align-items-* 通用样式可以在flxbox容器上实现flex项目的对齐(y轴开始,如果选择flex-direction: column则从x轴开始),可选参数有: startendcenterbaselinestretch (浏览器默认值)。

    Flex弹性布局  - 图6

    1. <div class="d-flex align-items-start">...</div>
    2. <div class="d-flex align-items-end">...</div>
    3. <div class="d-flex align-items-center">...</div>
    4. <div class="d-flex align-items-baseline">...</div>
    5. <div class="d-flex align-items-stretch">...</div>

    align-items的响应式属性规范:

    • .align-items-start
    • .align-items-end
    • .align-items-center
    • .align-items-baseline
    • .align-items-stretch
    • .align-items-sm-start
    • .align-items-sm-end
    • .align-items-sm-center
    • .align-items-sm-baseline
    • .align-items-sm-stretch
    • .align-items-md-start
    • .align-items-md-end
    • .align-items-md-center
    • .align-items-md-baseline
    • .align-items-md-stretch
    • .align-items-lg-start
    • .align-items-lg-end
    • .align-items-lg-center
    • .align-items-lg-baseline
    • .align-items-lg-stretch
    • .align-items-xl-start
    • .align-items-xl-end
    • .align-items-xl-center
    • .align-items-xl-baseline
    • .align-items-xl-stretch

    自对齐

    使用 align-self-* 通用样式可以使用flexbox上的项目单独改变在横轴上的对齐方式(y值开始,如果flex-direction: column则为x轴开始),其拥有与align-items相同的可选子项: startendcenterbaseline、 or stretch (浏览器默认值)。

    Flex弹性布局  - 图7

    1. <div class="align-self-start">Aligned flex item</div>
    2. <div class="align-self-end">Aligned flex item</div>
    3. <div class="align-self-center">Aligned flex item</div>
    4. <div class="align-self-baseline">Aligned flex item</div>
    5. <div class="align-self-stretch">Aligned flex item</div>

    align-self的响应式属性规范:

    • .align-self-start
    • .align-self-end
    • .align-self-center
    • .align-self-baseline
    • .align-self-stretch
    • .align-self-sm-start
    • .align-self-sm-end
    • .align-self-sm-center
    • .align-self-sm-baseline
    • .align-self-sm-stretch
    • .align-self-md-start
    • .align-self-md-end
    • .align-self-md-center
    • .align-self-md-baseline
    • .align-self-md-stretch
    • .align-self-lg-start
    • .align-self-lg-end
    • .align-self-lg-center
    • .align-self-lg-baseline
    • .align-self-lg-stretch
    • .align-self-xl-start
    • .align-self-xl-end
    • .align-self-xl-center
    • .align-self-xl-baseline
    • .align-self-xl-stretch

    自相等

    .flex-fill在一系列兄弟元素上使用该类来强制它们变成相等的宽度,同时占据所有可用的水平空间。特别适用于等宽或正确的导航。

    Flex弹性布局  - 图8

    1. <div class="d-flex bd-highlight">
    2. <div class="p-2 flex-fill bd-highlight">Flex item</div>
    3. <div class="p-2 flex-fill bd-highlight">Flex item</div>
    4. <div class="p-2 flex-fill bd-highlight">Flex item</div>
    5. </div>

    响应变化也存在flex-fill

    • .flex-fill
    • .flex-sm-fill
    • .flex-md-fill
    • .flex-lg-fill
    • .flex-xl-fill

    等宽变幻

    使用.flex-grow-*实用程序切换弹性项目的增长能力以填充可用空间。在下面的示例中,.flex-grow-1元素使用它可以使用的所有可用空间,同时允许剩余的两个Flex项目具有必要的空间。

    Flex弹性布局  - 图9

    1. <div class="d-flex bd-highlight">
    2. <div class="p-2 flex-grow-1 bd-highlight">Flex item</div>
    3. <div class="p-2 bd-highlight">Flex item</div>
    4. <div class="p-2 bd-highlight">Third flex item</div>
    5. </div>

    .flex-shrink-*如有必要,使用实用程序切换弹性项目的缩小能力。在下面的示例中,第二个Flex项目.flex-shrink-1被强制将其内容封装到一个新行中,“缩小”以允许前一个Flex项目具有更多空间.w-100

    Flex弹性布局  - 图10

    1. <div class="d-flex bd-highlight">
    2. <div class="p-2 w-100 bd-highlight">Flex item</div>
    3. <div class="p-2 flex-shrink-1 bd-highlight">Flex item</div>
    4. </div>

    响应变化也存在flex-grow和 flex-shrink。

    • .flex-{grow|shrink}-0
    • .flex-{grow|shrink}-1
    • .flex-sm-{grow|shrink}-0
    • .flex-sm-{grow|shrink}-1
    • .flex-md-{grow|shrink}-0
    • .flex-md-{grow|shrink}-1
    • .flex-lg-{grow|shrink}-0
    • .flex-lg-{grow|shrink}-1
    • .flex-xl-{grow|shrink}-0
    • .flex-xl-{grow|shrink}-1

    自浮动Auto margins

    当你将flex对齐与auto margin混在一起的时候,flexbox也能正常运行。以下是通过自动manrgin来控制flex项目的三种示例,分别是预设(无margin)、向右推两个项目(.mr-auto)、向左推两个项目 (.ml-auto):

    不幸的是,IE10和IE11不能正确支持在父层具有非默认的 justify-content 值自边距浮动auto margin ,可查阅 StackOverflow对此现象的解答 了解更多细节。

    Flex弹性布局  - 图11

    1. <div class="d-flex">
    2. <div class="p-2">Flex item</div>
    3. <div class="p-2">Flex item</div>
    4. <div class="p-2">Flex item</div>
    5. </div>
    6. <div class="d-flex">
    7. <div class="mr-auto p-2">Flex item</div>
    8. <div class="p-2">Flex item</div>
    9. <div class="p-2">Flex item</div>
    10. </div>
    11. <div class="d-flex">
    12. <div class="p-2">Flex item</div>
    13. <div class="p-2">Flex item</div>
    14. <div class="ml-auto p-2">Flex item</div>
    15. </div>

    与align-items结合实现垂直布局

    结合 align-itemsflex-direction: columnmargin-top: automargin-bottom: auto,可以垂直移动一个flex子容器到顶部或底部。

    Flex弹性布局  - 图12

    1. <div class="d-flex align-items-start flex-column" style="height: 200px;">
    2. <div class="mb-auto p-2">Flex item</div>
    3. <div class="p-2">Flex item</div>
    4. <div class="p-2">Flex item</div>
    5. </div>
    6. <div class="d-flex align-items-end flex-column" style="height: 200px;">
    7. <div class="p-2">Flex item</div>
    8. <div class="p-2">Flex item</div>
    9. <div class="mt-auto p-2">Flex item</div>
    10. </div>

    Wrap包裹

    改变flex项目在flex容器中的包裹方式(可以实现弹性布局),其中包括无包裹 .flex-nowrap(浏览器默认)、包裹 .flex-wrap,,或者反向包裹 .flex-wrap-reverse

    Flex弹性布局  - 图13

    1. <div class="d-flex flex-nowrap">
    2. ...
    3. </div>

    Flex弹性布局  - 图14

    1. <div class="d-flex flex-wrap">
    2. ...
    3. </div>

    Flex弹性布局  - 图15

    1. <div class="d-flex flex-wrap-reverse">
    2. ...
    3. </div>

    flex--wrap-的响应式规范:

    • .flex-nowrap
    • .flex-wrap
    • .flex-wrap-reverse
    • .flex-sm-nowrap
    • .flex-sm-wrap
    • .flex-sm-wrap-reverse
    • .flex-md-nowrap
    • .flex-md-wrap
    • .flex-md-wrap-reverse
    • .flex-lg-nowrap
    • .flex-lg-wrap
    • .flex-lg-wrap-reverse
    • .flex-xl-nowrap
    • .flex-xl-wrap
    • .flex-xl-wrap-reverse

    Order排序

    使用系统提供的通用样式定义可以实现弹性项目的 可视化 排序。我们仅提供将一个特件排在第一或最后,以及重置DOM顺序,由于order只能使用整数值(如:5),因此对于需要的任何额外值需要自定义CSS。

    Flex弹性布局  - 图16

    1. <div class="d-flex flex-nowrap">
    2. <div class="order-3 p-2">First flex item</div>
    3. <div class="order-2 p-2">Second flex item</div>
    4. <div class="order-1 p-2">Third flex item</div>
    5. </div>

    order-*排序方法的响应式属性:

    • .order-1
    • .order-2
    • .order-3
    • .order-4
    • .order-5
    • .order-6
    • .order-7
    • .order-8
    • .order-9
    • .order-10
    • .order-11
    • .order-12
    • .order-sm-1
    • .order-sm-2
    • .order-sm-3
    • .order-sm-4
    • .order-sm-5
    • .order-sm-6
    • .order-sm-7
    • .order-sm-8
    • .order-sm-9
    • .order-sm-10
    • .order-sm-11
    • .order-sm-12
    • .order-md-1
    • .order-md-2
    • .order-md-3
    • .order-md-4
    • .order-md-5
    • .order-md-6
    • .order-md-7
    • .order-md-8
    • .order-md-9
    • .order-md-10
    • .order-md-11
    • .order-md-12
    • .order-lg-1
    • .order-lg-2
    • .order-lg-3
    • .order-lg-4
    • .order-lg-5
    • .order-lg-6
    • .order-lg-7
    • .order-lg-8
    • .order-lg-9
    • .order-lg-10
    • .order-lg-11
    • .order-lg-12
    • .order-xl-1
    • .order-xl-2
    • .order-xl-3
    • .order-xl-4
    • .order-xl-5
    • .order-xl-6
    • .order-xl-7
    • .order-xl-8
    • .order-xl-9
    • .order-xl-10
    • .order-xl-11
    • .order-xl-12

    对齐内容

    使用flexbox容器上的 align-content 通用样式定义,可以将flex物价于横轴上 一起对齐,可选方向有 start (浏览器默认值)、 endcenterbetweenaroundstretch。为了展现这些效果,下面实例我们已经实施了flex-wrap: wrap定义并增加了很多子项目的数量,如下所示:

    注意! 此属性对于单行的Flex项目没有影响。

    Flex弹性布局  - 图17

    1. <div class="d-flex align-content-start flex-wrap">
    2. ...
    3. </div>

    Flex弹性布局  - 图18

    1. <div class="d-flex align-content-end flex-wrap">...</div>

    Flex弹性布局  - 图19

    1. <div class="d-flex align-content-center flex-wrap">...</div>

    Flex弹性布局  - 图20

    1. <div class="d-flex align-content-between flex-wrap">...</div>

    Flex弹性布局  - 图21

    1. <div class="d-flex align-content-around flex-wrap">...</div>

    Flex弹性布局  - 图22

    1. <div class="d-flex align-content-stretch flex-wrap">...</div>

    align-content-*方法的响应式属性:

    • .align-content-start
    • .align-content-end
    • .align-content-center
    • .align-content-around
    • .align-content-stretch
    • .align-content-sm-start
    • .align-content-sm-end
    • .align-content-sm-center
    • .align-content-sm-around
    • .align-content-sm-stretch
    • .align-content-md-start
    • .align-content-md-end
    • .align-content-md-center
    • .align-content-md-around
    • .align-content-md-stretch
    • .align-content-lg-start
    • .align-content-lg-end
    • .align-content-lg-center
    • .align-content-lg-around
    • .align-content-lg-stretch
    • .align-content-xl-start
    • .align-content-xl-end
    • .align-content-xl-center
    • .align-content-xl-around
    • .align-content-xl-stretch