前言

  flexible box即为可伸缩的盒模型,让容器能让其子元素自由改变宽高或顺序,以最佳的方式填充容器。可以让子元素扩展来填满可用空间,缩小来防止溢出。flexible box由伸缩容器和伸缩项目组成。

  兼容性:IE10+、firefox、chrome、safari

基本术语

  下面是一张伸缩盒模型的概念图:

 

伸缩性架构 伸缩结构产品_html

  1、flex container:伸缩容器

  2、flex item:伸缩项目

  3、main-axis:主轴

  4、main-start:主轴起点

  5、main-end:主轴终点

  6、main-size:主轴尺寸

  7、cross-axis:侧轴

  8、cross-start:侧轴起点

  9、cross-end:侧轴终点

  10、cross-size:侧轴尺寸

相关属性介绍

1、display:flex | inline-flex:定义伸缩容器

   取值:

    1、flex:将元素定义为弹性盒模型

    2、inline-flex:将元素定义为内联块级弹性盒模型

2、flex-direction:适用于伸缩容器,定义伸缩项目排列在伸缩容器上的方向

   取值:

    1、row:默认值,当文字排版时ltr时从左向右,当文字排版时rtl时从右向左

    2、row-reverse:方向与row相反

    3、column:从上向下

    4、column-reverse:从下往上

伸缩性架构 伸缩结构产品_取值_02

伸缩性架构 伸缩结构产品_取值_03

1 <!DOCTYPE html>
 2 <html>
 3 <head lang="zh-cn">
 4   <meta charset="UTF-8">
 5   <title>flexible</title>
 6   <style>
 7     .wrap {
 8       display: -webkit-flex;
 9       /*-webkit-flex-direction: row;*/
10       /*-webkit-flex-direction: row-reverse;*/
11       /*-webkit-flex-direction: column;*/
12       -webkit-flex-direction: column-reverse;
13 
14       background: pink;
15       width: 600px;
16       margin: 50px auto;
17     }
18 
19     .item {
20       height: 100px;
21       width: 98px;
22       border: 1px solid #000;
23     }
24   </style>
25 </head>
26 <body>
27   <div class="wrap">
28     <div class="item">1</div>
29     <div class="item">2</div>
30     <div class="item">3</div>
31     <div class="item">4</div>
32     <div class="item">5</div>
33   </div>
34 </body>
35 </html>

View Code

3、flex-wrap:适用于伸缩容器,定义伸缩容器是单行还是多行。

   取值:

    1、nowrap:默认,单行

    2、wrap:多行,新增相沿着侧轴方向添加

    3、wrap-reverse:多行,侧轴起点与终点方向交换

伸缩性架构 伸缩结构产品_取值_02

伸缩性架构 伸缩结构产品_取值_03

1 <!DOCTYPE html>
 2 <html>
 3 <head lang="zh-cn">
 4   <meta charset="UTF-8">
 5   <title>flexible</title>
 6   <style>
 7     .wrap {
 8       display: -webkit-flex;
 9       -webkit-flex-direction: row;
10       /*-webkit-flex-wrap: nowrap;*/
11       /*-webkit-flex-wrap: wrap;*/
12       -webkit-flex-wrap: wrap-reverse;
13 
14       background: pink;
15       width: 400px;
16       margin: 50px auto;
17     }
18 
19     .item {
20       height: 100px;
21       width: 98px;
22       border: 1px solid #000;
23     }
24   </style>
25 </head>
26 <body>
27   <div class="wrap">
28     <div class="item">1</div>
29     <div class="item">2</div>
30     <div class="item">3</div>
31     <div class="item">4</div>
32     <div class="item">5</div>
33     <div class="item">6</div>
34     <div class="item">7</div>
35     <div class="item">8</div>
36     <div class="item">9</div>
37   </div>
38 </body>
39 </html>

View Code

4、justif-content:适用于伸缩容器,定义伸缩项目沿着主轴的对齐方式

   取值:

    1、flex-start:默认值,伸缩项目向一行的起始位置靠齐

    2、flex-end:伸缩项目向一行的结束位置靠齐

    3、center:伸缩项目向一行的中间靠齐

    4、space-between:第一个在开始位置,第二个在结束位置,中间的平均分配

    5、space-around:两端一半空位,中间平均分配

伸缩性架构 伸缩结构产品_取值_02

伸缩性架构 伸缩结构产品_取值_03

1 <!DOCTYPE html>
 2 <html>
 3 <head lang="zh-cn">
 4   <meta charset="UTF-8">
 5   <title>flexible</title>
 6   <style>
 7     .wrap {
 8       display: -webkit-flex;
 9       -webkit-flex-direction: row;
10       -webkit-flex-wrap: nowrap;
11       /*-webkit-justify-content: flex-start;*/
12       /*-webkit-justify-content: flex-end;*/
13       /*-webkit-justify-content: center;*/
14       /*-webkit-justify-content: space-between;*/
15       -webkit-justify-content: space-around;
16 
17       background: pink;
18       width: 500px;
19       margin: 50px auto;
20     }
21 
22     .item {
23       height: 100px;
24       width: 98px;
25       border: 1px solid #000;
26     }
27   </style>
28 </head>
29 <body>
30   <div class="wrap">
31     <div class="item">1</div>
32     <div class="item">2</div>
33     <div class="item">3</div>
34     <div class="item">4</div>
35   </div>
36 </body>
37 </html>

View Code

5、align-items:适用于伸缩项目,定义在侧轴上的对齐方式

   取值:

    1、flex-start:侧轴方向向起始位置靠齐

    2、flex-end:侧轴方向向结束位置靠齐

    3、center:侧轴方向居中靠齐

    4、baseline:侧轴方向基线对齐

    5、stretch:默认值,侧轴方向拉伸填充伸缩容器

伸缩性架构 伸缩结构产品_取值_02

伸缩性架构 伸缩结构产品_取值_03

1 <!DOCTYPE html>
 2 <html>
 3 <head lang="zh-cn">
 4   <meta charset="UTF-8">
 5   <title>flexible</title>
 6   <style>
 7     .wrap {
 8       display: -webkit-flex;
 9       -webkit-flex-direction: row;
10       -webkit-flex-wrap: wrap;
11       -webkit-align-items: flex-start;
12       -webkit-align-items: flex-end;
13       -webkit-align-items: center;
14       -webkit-align-items: stretch;
15       -webkit-align-items: baseline;
16 
17       background: pink;
18       width: 400px;
19       height: 400px;
20       margin: 50px auto;
21     }
22 
23     .item {
24       width: 98px;
25       border: 1px solid #000;
26     }
27   </style>
28 </head>
29 <body>
30   <div class="wrap">
31     <div class="item">1<br />1</div>
32     <div class="item">2</div>
33     <div class="item">3</div>
34     <div class="item">4</div>
35     <div class="item">5</div>
36     <div class="item">6</div>
37     <div class="item">7</div>
38     <div class="item">8</div>
39     <div class="item">9</div>
40   </div>
41 </body>
42 </html>

View Code

6、align-content:适用于伸缩容器,指定多行伸缩容器的对齐

   取值:

    1、flex-start:各行向伸缩容器的起点位置堆叠。

    2、flex-end:各行向伸缩容器的结束位置堆叠。

    3、center:各行向伸缩容器的中间位置堆叠。

    4、space-between:首行靠开始,末行靠结尾, 中间平均分配间隔

    5、space-around:首末一半,中间平均分配间隔

    6、stretch:默认值,各行伸缩占满剩余空间

伸缩性架构 伸缩结构产品_取值_02

伸缩性架构 伸缩结构产品_取值_03

1 <!DOCTYPE html>
 2 <html>
 3 <head lang="zh-cn">
 4   <meta charset="UTF-8">
 5   <title>flexible</title>
 6   <style>
 7     .wrap {
 8       display: -webkit-flex;
 9       -webkit-flex-direction: row;
10       -webkit-flex-wrap: wrap;
11       -webkit-align-content: flex-start;
12       -webkit-align-content: flex-end;
13       -webkit-align-content: center;
14       -webkit-align-content: space-between;
15       -webkit-align-content: space-around;
16       -webkit-align-content: stretch;
17 
18       background: pink;
19       width: 400px;
20       height: 400px;
21       margin: 50px auto;
22     }
23 
24     .item {
25       width: 98px;
26       border: 1px solid #000;
27     }
28   </style>
29 </head>
30 <body>
31   <div class="wrap">
32     <div class="item">1<br />1</div>
33     <div class="item">2</div>
34     <div class="item">3</div>
35     <div class="item">4</div>
36     <div class="item">5</div>
37     <div class="item">6</div>
38     <div class="item">7</div>
39     <div class="item">8</div>
40     <div class="item">9</div>
41   </div>
42 </body>
43 </html>

View Code

7、order:适用于伸缩项目,控制伸缩项目在伸缩容器中出现的顺序。

   取值:默认0,正整数和0。

伸缩性架构 伸缩结构产品_取值_02

伸缩性架构 伸缩结构产品_取值_03

1 <!DOCTYPE html>
 2 <html>
 3 <head lang="zh-cn">
 4   <meta charset="UTF-8">
 5   <title>flexible</title>
 6   <style>
 7     .wrap {
 8       display: -webkit-flex;
 9       -webkit-flex-direction: row;
10       background: pink;
11       width: 400px;
12       height: 400px;
13       margin: 50px auto;
14     }
15 
16     .item {
17       width: 98px;
18       border: 1px solid #000;
19     }
20   </style>
21 </head>
22 <body>
23   <div class="wrap">
24     <div class="item" style="-webkit-order: 3">1<br />1</div>
25     <div class="item" style="-webkit-order: 4">2</div>
26     <div class="item" style="-webkit-order: 1">3</div>
27     <div class="item" style="-webkit-order: 0">4</div>
28     <div class="item">5</div>
29     <div class="item">6</div>
30     <div class="item">7</div>
31     <div class="item">8</div>
32     <div class="item">9</div>
33   </div>
34 </body>
35 </html>

View Code

8、flex-grow:适用于伸缩项目,定义伸缩项目的扩展能力,对剩余空间所占的比例分配。

   取值:默认0,正整数和0

伸缩性架构 伸缩结构产品_取值_02

伸缩性架构 伸缩结构产品_取值_03

1 <!DOCTYPE html>
 2 <html>
 3 <head lang="zh-cn">
 4   <meta charset="UTF-8">
 5   <title>flexible</title>
 6   <style>
 7     .wrap {
 8       display: -webkit-flex;
 9       -webkit-flex-direction: row;
10       background: pink;
11       width: 400px;
12       height: 400px;
13       margin: 50px auto;
14     }
15 
16     .item {
17       width: 50px;
18       border: 1px solid #000;
19     }
20   </style>
21 </head>
22 <body>
23   <div class="wrap">
24     <div class="item" style="-webkit-flex-grow: 1">1<br />1</div>
25     <div class="item" style="-webkit-flex-grow: 2">2</div>
26     <div class="item">3</div>
27   </div>
28 </body>
29 </html>

View Code

9、flex-shrink:适用于伸缩项目,定义伸缩项目收缩的能力,伸缩项目超出伸缩容器后收缩的比例。

   取值:默认0,正整数和0

伸缩性架构 伸缩结构产品_取值_02

伸缩性架构 伸缩结构产品_取值_03

1 <!DOCTYPE html>
 2 <html>
 3 <head lang="zh-cn">
 4   <meta charset="UTF-8">
 5   <title>flexible</title>
 6   <style>
 7     .wrap {
 8       display: -webkit-flex;
 9       -webkit-flex-direction: row;
10       background: pink;
11       width: 400px;
12       height: 400px;
13       margin: 50px auto;
14     }
15 
16     .item {
17       width: 300px;
18       border: 1px solid #000;
19     }
20   </style>
21 </head>
22 <body>
23   <div class="wrap">
24     <div class="item" style="-webkit-flex-shrink: 1">1<br />1</div>
25     <div class="item" style="-webkit-flex-shrink: 2">2</div>
26     <div class="item">3</div>
27   </div>
28 </body>
29 </html>

View Code

使用于伸缩项目的其他属性:

  flex-basis、flex、align-self