目录
但是传统布局方式虽然在各个浏览器中兼容性好,但是其布局繁琐,在移动端不能很好的布局,有一定的局限性;
2009年,W3C提出一种新的方案---flex布局,其操作方便,布局非常简单,通常多用于移动端,目前在各大浏览器中也得到了很好的兼容(不支持或部分支持IE11或更低版本);
注意:当为父盒子设置为flex布局后,子元素的float、clear、vertical-align属性都将失效
采用flex布局的元素,称为flex容器(flex container),简称容器。它的所有子元素自动称为容器成员,称为flex项目(flex item),简称项目;
通过给父元素添加flex属性,来控制子元素的位置和排列方式;
常见的父元素属性主要有6种:
用于设置主轴的方向;在flex布局中,分为主轴和侧轴,参数是row(行)、column(列)、row-reverse(行的反方向)、column-reverse(列的反方向)
- <template>
- <div class="book">
- <div class="item1"></div>
- <div class="item2"></div>
- </div>
- </template>
- <script>
- .book {
- display: flex;
- flex-direction: column;
- width: 400px;
- height: 300px;
- margin: 20px;
- border: 1px dotted red;
- }
- .item1 {
- height: 100px;
- width: 150px;
- background-color: burlywood;
- }
- .item2 {
- height: 100px;
- width: 150px;
- background-color: skyblue;
- }
- </script>
![]() | ![]() |
![]() | ![]() |
用于设置主轴上的子元素排列方式,主要有五个参数可供使用:
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
space-around是指每个子元素在主轴上的margin值相同。
![]() | ![]() |
注意: 如果在主轴上排不下的话,就会压缩各子元素的体积大小;
用于设置子元素在排不下的时候是否换行,否则就会压缩体积;默认是不换行(nowrap),另外两个属性是wrap和wrap-reverse
![]() | ![]() |
图中大盒子宽度为400,小盒子宽度是150,一行放三个放不开,若不设置换行就是左侧(压缩),设置了就会换行,显示在下一行;
用于设置侧轴上的排列方式,用于子元素为单行的时候使用;有如下参数可供选择:
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
|
要把侧轴的长度或宽度注释掉,stretch才生效 | ![]() |
用于设置侧轴上的子元素的排列方式,应用于子元素是多行的情况;有如下参数可供选择:
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
|
是flex-direction和flex-wrap的复合属性,即可同时定义这两种属性,如:
flex-flow: row wrap; // 表示以行为主轴,并且换行
默认值为row nowrap
常见的子元素属性主要有6种:
定义子元素占剩余空间的份数,默认是0;并不是指某个子元素是另一个子元素的几倍,重点是剩余空间,当所有的子元素flex-grow都设置为1时,表示平均分配剩余空间
![]() | ![]() |
![]() | ![]() |
表示当空间不够时,子元素压缩的比例,若某个子元素设置了为0,则在空间不够时,此元素并不会被压缩;默认所有的子元素flex-shrink都是1,在空间不够时,等比例进行压缩;
|
1正常显示,2超出部分被隐藏 | ![]() |
|
1被压缩,2正常显示了出来 | ![]() |
flex-basis定义了在分配多余空间之前,子元素占据的主轴空间;(不常用)
以主轴为行为例:
若单独设置了width,则正常使用,超出部分的子元素不显示;
若单独使用flex-basis,则超出部分会自动变大,不会被限制;
若同时使用width和flex-basis,则实际宽度为二者中的最大值,并且会限制,内容超出部分直接溢出;
flex属性是flex-grow, flex-shrink 和 flex-basis的合写,默认值为0 1 auto。后两个属性可选。
| 未加flex,默认占剩余空间份数为0
|
|
| 加了flex,item1占两份,item2占一份(注意:并不是item1是item2的两倍,是剩余空间)
| ![]() |
该属性允许单个子元素与其它子元素不一样的在侧轴方向的排列方式,能够覆盖align-items属性;默认值是auto,即继承父元素的align-items属性;
![]() | ![]() |
用于表示子元素的排列顺序,数值越小越靠前排列,默认是0,可以有负值;
![]() | ![]() |