bwshqh 2019-06-28
Flexible Box 模型,通常被称为 flexbox,是一种一维的布局模型。它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力。
容器属性
更改垂直对齐 ==change vertical alignment==
flex元素上的属性
Flexbox,也称为灵活盒模块,是两个现代布局系统之一,还有CSS Grid。与CSS Grid(二维)相比,flexbox是一维布局模型。它将基于行或列控制布局,但不能同时控制布局。flexbox的主要目标是允许项目填充其容器提供的整个空间,具体取决于您设置的一些规则。Flexbox不兼容IE10以下,IE10以下可以使用如下方式:
IE10以下不兼容,一些浏览器需要使用-webkit或者display:-webkit-box兼容处理。
display:flexbox
或者
display:inline-flexbox
flex-direction决定容器以行对齐还是列对齐。
如下图所示:
flex-direction默认是row,从左向右,当其属性值为column时,是从上到下,可以使用justify-content和align-items改变水平和垂直对齐。
justify-content有5个属性值:
align-items有5个属性值:
关于align-items:baseline,可以看看codepen:https://codepen.io/flaviocopes/pen/oExoJR
默认情况下,flexbox容器中的项目保留在一行中,缩小它们以适合容器。
可以使用flex-wrap:wrap或者flex-wrap:wrap-reverse对容器中的元素进行换行处理。
一种简写方式:flex-flow:row wrap;即flex-direction:row && flex-wrap:wrap
flex-grow:默认值为0,当某个元素flex-grow为1,另一个为2,则为flex-grow:2的元素占用flex-grow:1的空间的2倍。
flex-shrink:默认值为1,如果没有显示定义该属性,将会自动按照默认值1在所有因子相加之后计算比率来进行空间收缩。
比如:有这么一个容器,div>.box13+.box22父容器定义宽度为500px,子元素定义宽度为120px,box1的flex-shrink为1,.box2的flex-shrink为2,那么子项相加之后即为 600 px,超出父容器 100px。那么超出的 100px 需要被 A、B、C、D、E 消化 通过收缩因子,所以加权综合可得 1001+1001+1001+1002+100*2=700px。
于是我们可以计算 A、B、C、D、E 将被移除的溢出量是多少: A 被移除溢出量:(100*1/700)*100,即约等于14px B 被移除溢出量:(100*1/700)*100,即约等于14px C 被移除溢出量:(100*1/700)*100,即约等于14px D 被移除溢出量:(100*2/700)*100,即约等于28px E 被移除溢出量:(100*2/700)*100,即约等于28px 最后A、B、C、D、E的实际宽度分别为:120-14=106px, 120-14=106px, 120-14=106px, 120-28=92px,120-28=92px
flex: 0 1 auto 分别对应flex-grow、flex-shrink、flex-basis
友情献上小游戏,通过游戏学习flexbox