菁瑞优智干货来啦:flex-basis和width到底谁听谁的?

标签:
h5前端培训java培训ui设计培训菁瑞优智 |
以前看规范的时候,感觉这属性讲的太绕,没有去深究,不过不知其所以然的问题终究有一天还是要面对,毕竟明白自己无知就是学习的最大动力了。
学IT,选成都菁瑞优智,做优质教育,育智慧人才。
所以,还是老老实实自己动手研究一遍吧。
一、flex-basis的值
Value :
content
Initial
: auto
规范里面是这样定义的。
flex-basis的目的是设置flex item的初始的尺寸,默认是content
box的尺寸,如果设置了box-sizing,则以box-sizing的为主。比如设置了box-sizing:border-box,则flex-basis的默认值就是盒子的border
box的尺寸。(The
所以,flex-basis的auto这个初始值,默认就是没有设置box-sizing的盒模型下的cotent box的大小。也就是以内容为基准的。
再看value值,content不被谷歌浏览器支持,火狐倒是支持,可惜没啥用。所以这个属性值可以不管了。
<'width'>
二、和width共用的时候的优先级
这里以宽度为例子,高度的原理是一样的。
既然flex-basis可以设置flex item的宽度尺寸,width属性也可以,那到底同时设置的时候,谁听谁的呢?
所以就需要通过程序去验证。
1、当没有设置flex-basis的时候
设置width有用,当flex container的空间足够的时候,使用width的值,当空间不足够的时候,默认flex-shrink收缩起作用,不会溢出容器,此时flex item的宽度就不是width的值了。
2、设置flex-basis为auto的时候
这auto不就是默认值吗,设置与不设置,和第一种情况一样。
说明flex-basis : auto < width
3、设置flex-basis的值为非auto的时候
比如设置了width:200px,flex-basis:150px,则flex-basis的值优先。(in case
both
同样,当flex-basis的值足够大的时候,导致flex container装不下的时候,flex-shrink的收缩能力又让flex item收缩到合适的大小不溢出容器。
所以width < flex-basis为非auto的时候
4、设置了min/max-width的时候
当设置了min/max-width的时候,优先使用min/max-width的值。
所以可以得到这样一个结论:auto是默认值,由内容撑开。width是没有设置flex-basis时的替代选项,min/max-width是flex-basis的下限和上限,并且可以破坏flex-shrink和flex-grow的弹性。
5、当使用flex的时候
为flex设置number的时候,默认是flex:number 1 0,这个时候flex-basis为0%,所以设置width的值依然不起作用。
当flex:none的时候,等价于flex : 0 0 auto,这时width是有作用的。
当flex:auto的时候,等价于flex : 1 1 auto, 这时虽然flex-basis为auto,但是width不起作用。
所以官方文档鼓励作者使用flex速记而不是直接使用flex-basis来控制灵活性,因为该flex速记会正确地重置任何未指定的属性值以适应常见的用途。
Authors are encouraged to control flexibility using the
flex shorthand rather than with flex-basis directly, as the shorthand correctly resets any unspecified components to accommodate common uses.
好了,虽然没有直接的案例展示,但是逻辑讲清楚了,这篇文章适合已经了解了flexbox的人,如果是一无所知的小白,估计一头雾水。