CSS3——弹性盒模型- flex-grow、flex-shrink、flex-basis

本文:flex的扩展属性及其应用

-----------------------分界线-----------------------

flex-grow:(用来瓜分父级宽度剩余的宽度,,默认值为0)

 容器宽度为400px,子元素1的宽度为100px,子元素2的宽度为100px,子元素3的宽度为100px,总宽度为100 + 100 + 100 = 300px。容器还剩余100px,剩余的宽度需要被每个子元素根据自己设置的flex-grow进行瓜分,将容器填满。子元素1的flex-grow设置为1,子元素2flex-gorw设置为1,子元素3flex-gorw设置为2,子元素1瓜分的宽度为(100 * 1)/(100 * 1 + 100 *  1 + 100  *  2) *  100 = 25px,子元素1真实的宽度为100 + 25 = 125px。同理子元素2瓜分的宽度为(100*1)/(100*1 + 100* 1 + 100 * 2) *  100 = 25px,子元素的真实宽度为100 + 25 = 125px。子元素3瓜分的宽度为(100 * 2)/(100 * 2 + 100 *  1 + 100 * 2) *  100 = 50px,子元素3的真实宽度为100 + 50 = 150px

flex-shrink:(用来吸收父级宽度超出的宽度,默认值为1)

容器的宽度为400px, 子元素1的宽度为250px,子元素2的宽度为150px,子元素3的宽度为100px,总的宽度为 250 + 150 + 100 = 500px。容器放不下,多出来的宽度需要被每个子元素根据自己设置的flex-shrink 进行吸收。 子元素1的flex-shrink: 1(未设置默认为1), 子元素2 flex-shrink: 2,子元素3 flex-shrink: 2。子元素1需要吸收的的宽度为 (250 * 1)/(250 * 1 + 150 * 2 + 100 * 2) * 100 = 33.33px,子元素1真实的宽度为 250 - 33.33 = 216.67px。同理子元素2吸收的空间为(150 * 2) / (250 * 1 + 150 * 2 + 100 * 2) * 100 = 40px,子元素2真实宽度为 150 - 40 = 110px。子元素3吸收的宽度为(100 * 2)/(250 * 1 + 150 * 2 + 100 * 2) * 100 = 26.67px,真实的宽度为100 - 26.67 = 73.33px

flex-basis:(用于设置子元素的宽度)

flex-basis会覆盖掉width属性设置的宽度,显示flex-basis设置宽的度。

下面我们通过几个例子来了解具体:

basis > width     

显示basis的宽度

 basis < width 

显示basis的宽度

只设置了width在本文区添加内容

我们可以看到只设置了width在文本区添加内容如果超出,文本会出现溢出情况

只设置了basis在文本区里添加内容

文本会撑开宽度

如果在设置basis比width小的内容里面添加文本呢

basis会被撑开至width值一样大,但是文本会溢出

 flex开发应用(自适应动态布局,后来添加了元素也不用添加样式)

flex:可以直接设置3个值,就是 flex-grow、flex-shrink、flex-basis

可以这样使用:

flex:1 1 auto;就是子元素填满父级宽度,其余两个为默认值

原文地址:https://www.cnblogs.com/yangpeixian/p/11210951.html