【CSS】如何理解 flex-basis ?
一、flex-basis 的含义
CSS 属性
flex-basis
指定了 flex 元素在主轴方向上的初始大小。如果不使用box-sizing
改变盒模型的话,那么这个属性就决定了 flex 元素的内容盒(content-box)的尺寸。
Note: 当一个元素同时被设置了 flex-basis
(除值为 auto
外) 和 width
(或者在 flex-direction: column
情况下设置了height
) , flex-basis
具有更高的优先级.
二、flex-basis 的使用
2.1. 取值
值/类型 | 描述 |
---|---|
auto | 默认值,意为“参照我的 width 和 height 属性” |
number | 宽度值,可以是长度单位(如10px、10em等)或百分数(基于其父弹性盒容器主轴尺寸,若父容器尺寸依赖于子元素,则效果同 auto ) |
content | 基于 flex 的元素的内容自动调整大小 |
尺寸关键词 | fill , max-content , min-content , fit-content 等; |
全局数值 | inherit , initial , unset 等。 |
2.2. 举例说明
1 | <style type="text/css"> |
父容器主轴宽度为 600px;
三个子元素基础宽度分别为 0%(即 0)、auto(同 width,100px )、 200px,合计 300px;
父容器剩余空间为 600px - 300px = 300px;
根据 flex-grow 权重 2:2:1,各 item 元素分得的空间宽度分别为
item-1:(2/(2+2+1)) * 300px = 120px
item-2:(2/(2+2+1)) * 300px = 120px
item-3:(1/(2+2+1)) * 300px = 60px
故各 item 元素在父 flex 容器内的实际宽度分别为
item-1:0% + 120px = 0 + 120px = 120px
item-2:auto + 120px = 100px + 120px = 220px
item-3:200px + 120px = 320px
flex-basis 可以视为 flex 元素在放进父级 flex 容器之前的大小,是 flex 元素在主轴上伸缩变化的基础值,元素的 grow 和 shrink 都基于这个基础值来确定。
三、flex-basis 与 width 的区别
Flex Items 的应用准则,即
content –> width –> flex-basis (limted by max|min-width)
。
也就是说,
若没有设置 flex-basis,则 flex-basis 的值就是 flex 元素的 width;
若没有设置 width,则 flex-basis 的值就是 flex 元素内容 content 的尺寸;
若同时设置了 flex-basis 和 width,width 属性将被忽略,元素的伸缩基于 flex-basis 的值。
Note:flex-basis 受 min-width/max-width/min-height/max-height 限制。
四、参考
4.2. Flex Basis与Width的区别