Flex布局总结

2020-03-10  本文已影响0人  moofyu

传统布局基于盒模型:display+position+float,特殊布局不方便,比如垂直居中。

主要概念

容器属性

元素属性

容器剩余宽度:50px
分成每份:50px / (3+2) = 10px (两个元素 flex-grow分别为3 和2)
元素1放大为:50px + 3 * 10 = 80px

总结: 放大的计算方法并没有与缩小一样,将元素大小纳入考虑。
仅仅按flex-grow声明的份数算出每个需分配多少,叠加到原来的尺寸上。

容器剩余宽度:-70px
缩小因子的分母:1*50 + 1*100 + 1*120 = 270 (1为各元素flex-shrink的值)
元素1的缩小因子:1*50/270
元素1的缩小宽度为缩小因子乘于容器剩余宽度:1*50/270 * (-70)
元素1最后则缩小为:50px + (1*50/270 *(-70)) = 37.03px

加入弹性元素本身大小作为计算方法的考虑因素,原因是避免将一些本身宽度较小的元素在收缩之后宽度变为0的情况出现。

flex-basis: 0 //根据内容撑开,设置了width 也无效
flex-basis: auto // 若设置了width 由width 决定,若没有,则有内容决定
flex-basis优先级高于width 和height
默认值: 0 1 auto
flex:none = flex: 0 0 auto
flex: auto = flex: 1 1 auto
flex: 1 = flex: 1 1 0%
flex: 0% = flex: 1 1 0%
flex:2 3 = flex: 2 3 0%
flex: 2333 3222px  = flex:2333 1 3222px

flex:1 和 flex:auto 的区别?
也就是flex-basis: 0;与flex-basis: auto的区别
flex-basis指元素的初始尺寸,若设置0(绝对弹性元素),在放大或者缩小时,不考虑自身尺寸;若设置auto(相对弹性元素),此时放大和缩小的比例要考虑元素自身的尺寸。

上一篇 下一篇

猜你喜欢

热点阅读