display: flex;
将对象做为弹性伸缩盒展现,用于块级元素display: inline-flex;
将对象做为弹性伸缩盒展现,用于行内元素注意兼容问题:javascript
-webkit
-ms
,IE10浏览器中容器定义成弹性伸缩盒时,需使用display: -ms-flexbox
示例的dom结构:java
<div class="box"> <!--容器--> <div class="item">1</div> <!--子项--> <div class="item">2</div> <div class="item">3</div> </div>复制代码
基础样式设计:git
.box {
width: 200px;
height: 200px;
background-color: #58a;
}
.item {
width: 50px;
height: 50px;
margin: 2px;
background-color: #fb3;
}复制代码
一、flex-directiongithub
用于指定Flex主轴的方向,继而决定 Flex子项在Flex容器中的位置web
取值:row | row-reverse | column | column-reverse浏览器
flex-direction
四种取值的效果图以下:dom
二、flex-wrap布局
用于指定Flex子项是否换行flex
取值:nowrap | wrap | wrap-reverseflexbox
flex-wrap
三种取值的效果图以下:
从示例图中不难发现,换行之后两行之间产生了很大的间距,这个问题,在后面介绍的 align-content
属性中能够获得很好的解决。
三、flex-flow
复合属性,是flex-direction
和 flex-wrap
的简写属性,是用于指定Flex子项的排列方式
四、justify-content
用于指定主轴(水平方向)上Flex子项的对齐方式
取值:flex-start | flex-end | center | space-between | space-around
flex-start
center
justify-content
的前三种取值的效果图以下:
justify-content
取值为 space-between
的效果图以下(注意特殊状况下效果等同于flex-start):
justify-content
取值为 space-around
的效果图以下(注意特殊状况下效果等同于center):
五、align-items
用于指定侧轴(垂直方向)上Flex子项的对齐方式
取值:stretch | flex-start | flex-end | center | baseline
flex-start
align-items
取值为 stretch
的效果图以下:
align-items
取值为 flex-start flex-end center
的效果图以下:
align-items
取值为 baseline
的效果图以下:
六、align-content
该属性只做用于多行的状况下,用于多行的对齐方式
取值:stretch | flex-start | flex-end | center | space-between | space-around
flex-start
center
再次强调:该属性只做用于多行的状况,在只有一行的Flex容器上无效,另外该属性能够很好的处理,换行之后相邻行之间产生的间距。
align-content
各个取值的效果图以下:
一、order
该属性用来指定Flex子项的排列顺序,数值越小,越靠前,能够为负数
取值:数值,默认值为0
二、flex-grow
用来指定Flex子项的扩展比例,不能够为负数,Flex容器会根据Flex子项设置的扩展比例做为比率来分配剩余空间
取值:数值,默认值为0,表示即便存在剩余空间,Flex子项也不会扩展
以下图中,按照1:3分配剩余空间:
三、flex-shrink
用来指定Flex子项的收缩比例,不能够为负数,Flex容器会根据Flex子项设置的收缩比例做为比率来收缩各个Flex子项
取值:数值,默认值为1,表示全部子项在剩余空间为负数时,等比例收缩
注意:flex-shrink
只能在不换行的状况下使用
以下图中,按照1:3收缩:
四、flex-basis
用来指定Flex子项的占据的空间,不能够为负数
取值:auto | length | percentage | content
以下图中,为Item设置 flex-basis: 50%;
,在按照1:3分配剩余空间:
容器宽度为200px,Item1原始宽度为50px,设置 flex-basis: 50%;
后宽度变成100px,扩展后宽度为110.5px;而Item2原始宽度为50px,扩展后为81.5px,比例正好是1:3
注意:
设置flex-grow
进行分配剩余空间,或者使用flex-shrink
进行收缩都是在flex-basis的基础上进行的;
当flex-basis
的值以及width(或者height)的值均为非auto时,
flex-basis
的值以及width(或者height)的值,此时以flex-basis
与width(或者height)中值大的为准 ,可是,若是子项设置了overflow: hidden;
或者overflow: auto;
,此时以flex-basis
值为准;flex-basis
的值以及width(或者height)的值,此时以flex-basis
值为准;flex-basis
的值,大于width(或者height)的值,此时以flex-basis
值为准;flex-basis
的值,小于width(或者height)的值,此时以content自身长度值为准;当width(或者height)的值为auto时,且内容的长度大于flex-basis
设置的值,此时以content自身长度值为准,且不能进行flex-shrink收缩。相反若是内容的长度小于flex-basis
设置的值,则会使用flex-basis
设置的值;
min-width
(min-height
)时,且 flex-basis
的值小于最小值时,宽度以最小值为准,当 flex-basis
的值大于最小值时,以 flex-basis
的值为准五、flex
复合属性,是flex-grow
、 flex-shrink
和 flex-basis
的简写属性,用来指定Flex子项如何分配空间
取值:none | 各拆分项属性
注意:
六、align-self
用来单独指定某Flex子项的对齐方式
取值:auto | flex-start | flex-end | center | baseline | stretch
align-items
值,若是没有则取值为stretch
align-items
若是想了解更多关于Flex布局的内容,能够查看Flex布局应用