弹性布局

一、启用弹性行为

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

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

  1. 在父元素里面内容的简单的垂直对齐
  2. 通过使用媒体查询,可以简单的根据设备和屏幕分辨率来对内容重新排序
  3. CSS就能实现等高列布局以及垂直处理

中文版的FlexBox布局教程可见:https://www.z01.com/help/web/3234.shtml (译者注)

I'm a flexbox container!
I'm an inline flexbox container!

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

二、方向

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

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

Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2Flex item 2Flex item 2Flex item 2Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3

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

Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3

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

三、内容对齐与对准

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

Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3
d-flex justify-content-between
Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3

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

四、对齐项目

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

Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3

选择flex-direction: column则从x轴开始

Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3

上下左右居中

Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3
Flex item 1
Flex item 2
Flex item 3

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

五、自对齐

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

Flex item
Aligned flex item
Flex item
Flex item
Aligned flex item
Flex item
Flex item
Aligned flex item
Flex item
Flex item
Aligned flex item
Flex item
Flex item
Aligned flex item
Flex item

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

六、自相等

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

.flex-fill
.flex-fill.flex-fill.flex-fill
.flex-fill

响应变化也存在flex-fill

七、等宽变幻

flex:1和flex:auto详解
首先明确一点是, flex 是 flex-grow、flex-shrink、flex-basis的缩写。
flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

实现一侧固定宽度,一侧自适应,使用flex:1;实现,发现左侧无论多少内容,右侧宽度都是固定的,没有被挤压

style="flex:1;"
style="width:200px;"
style="flex:1; "style="flex:1;"style="flex:1;"style="flex:1;"style="flex:1;"style="f lex:1;"style="flex:1;"style="flex:1;"style="flex:1;"style="flex:1;"style="fle x:1;"style="flex:1;"style="flex:1;"
style="width:200px;"

flex-grow:0;flex-shrink;1;flex-basis:auto;缺一不可,如果没有flex-basis:auto;

style="flex:1;"
style="width:200px;"

实现一侧固定宽度,一侧自适应,利用Bootstrap已封装的css实现(发现实现不了

style="flex:1;"
style="width:200px;"
flex-grow-0 flex-shrink-1
style="width:200px;"
flex-grow-0 flex-shrink-1flex-grow-0 flex-shrink-1flex-grow-0 flex-shrink-1flex-grow-0 flex-shrink-1flex-grow-0 flex-shrink-1flex-grow-0 flex-shrink-1
style="width:200px;"
flex-grow-0 flex-shrink-1style="flex-basis:auto;"
style="width:200px;"
style="flex-basis:auto;"flex-grow-0 flex-shrink-1flex-grow-0 flex-shrink-1flex-grow-0 flex-shrink-1flex-grow-0 flex-shrink-1flex-grow-0 flex-shrink-1flex-grow-0 flex-shrink-1
style="width:200px;"

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

flex-grow-1
Flex item
Third flex item
flex-grow-0flex-grow-0flex-grow-0flex-grow-0
Flex item
Third flex item
Third flex itemThird flex item
flex-grow-1

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

Flex item
flex-shrink-1flex-shrink-1
Flex item
flex-shrink-0flex-shrink-0

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

八、自浮动Auto margins

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

Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item

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

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

Flex item1
Flex item2
Flex item3
Flex item1
Flex item2
Flex item3

十、Wrap包裹

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

Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item1
Flex item2
Flex item3
Flex item4
Flex item5
Flex item6
Flex item7
Flex item8
Flex item9
Flex item10
Flex item11
Flex item12
Flex item13
Flex item14
Flex item15

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

十一、Order排序

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

Flex item1
Flex item2
Flex item3

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

十二、对齐内容

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

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

Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item

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