Flex 布局中,咱们知道 flex-basis
属性是用来设置 Flex 项目的初始主轴尺寸(initial main size)的。css
但经过实践发现,在 Flex 项目上使用 flex-basis
和 width
属性时,获得的效果是同样的。html
如下面的结构为例:布局
<div style="display: flex;">
<div class="item">Item 1</div>
<div class="item">Item 2 的内容有点多</div>
<div class="item">Item 3</div>
</div>
复制代码
.item
设置 flex-basis: 0
或者 width: 0
都能获得这个效果。.item { flex-basis:0; /* 与设置 width: 0 的效果同样 */ flex-grow: 1;}
复制代码
.item:first-child, .item:last-child { flex-basis: 100px; /* 与设置 width: 100px 的效果同样 */ }
.item:nth-child(2) { flex-grow: 1;}
复制代码
经过观察可以发现:两种布局方式下,无论在 Flex 项目上使用 flex-basis
仍是 width
,获得的效果都是同样的。flex
事实也是这样子,问题来了:有 width
不就够了吗?为何还要多设计一个 flex-basis
属性呢?flexbox
其实,仍是有区别的:spa
注意:为了方便描述,假设当前文档是按照从左到右,从上到下的方式排版的,即处在水平书写模式(horizontal writing modes)下。设计
flex-basis
设置的是 Flex 项目的主轴尺寸,当 flex-direction
取值 column
或 column-reverse
时,flex-basis
表示的就不是 width
,而是 height
了。flex
简写属性,咱们能够同时设置 flex-grow
、flex-shrink
、flex-basis
这三个属性,若是使用 width,就不得不分开设置了。flex-basis
只会在 Flex
项目上生效,对定位了的 Flex 项目还不起做用。flex-basis
和 width
/height
时,生效的会是 flex-basis
。flex-basis
的默认值是 auto
,与另外一个可取值 content
的差异微乎其微。code
当 flex-basis: auto
时,会查看当前 Flex 项目是否设置 width
/height
属性。没有设置的话,就会回退到 flex-basis: content
。cdn
flex-basis: content
的意思是 automatic sizing,意思 Flex 项目的尺寸根据当前可用空间发生变化的,不超过 max-width/height
,不小于 min``-width/height
。htm
即 flex-basis: content
的效果等于 flex-basis: auto; width/height: auto;
,在我看来,整数型值没有任何实际意义,挺鸡肋的。
flex-basis
解析效果与 width
彻底相同(前提是 flex-basis
的值不是 auto
或 content
)。flex-basis
只对(非绝对定位的)Flex 项目 生效flex-basis
设置的是 主轴尺寸,根据 flex-direction
的取值不一样,可能表示 width
,也可能表示 height
flex-basis
**支持简写属性 **flex**
**flex-basis
与 width
/height
同时使用时,优先级更高。(正文完)
广告时间(长期有效)
我有一位好朋友开了一间猫舍,在此帮她宣传一下。如今猫舍里养的都是布偶猫。若是你也是个爱猫人士而且有须要的话,不妨扫一扫她的【闲鱼】二维码。不买也没关系,看看也行。
(完)