ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于flex-grow的陷阱

2020-06-11 13:53:26  阅读:359  来源: 互联网

标签:flex item 比例 陷阱 空间 grow 属性


前一阵在使用flex布局进行宽度处理时,发现了flex-grow并不是按照预期的情况进行比例处理,顿时觉得有点懵逼。

stackoverflow搜索之后,终于搞明白了其中的奥秘。

话不多说,直接上代码:

.flex-container {
    display: flex;
    width: 100%;
}
.flex-item {
    flex-grow: 1;
    list-style-type: none;
}
.big {
    flex-grow: 3;
}
<ul class="flex-container">
    <li class="flex-item big">理论应该是小的三倍长</li>
    <li class="flex-item">但实际并不是这样</li>
</ul>

我们参照阮一峰的flex教程就可以看到对于这个属性的解释:

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

按照正常理解我们的代码没有问题啊,怎么比例并不是设置的那样呢?

重点来了,这里的剩余空间才是关键。
对于一个flex-item来说,它的初始空间并不是0,而是另一个属性值auto(元素内容占用的空间)。

这样就导致了我们设置了flex-grow的效果并不是将整个宽度进行等比例的拆分,而是对去除内容的宽度进行了比例划分。

而如果想要打到我们实际所想的效果,我们就需要使用flex属性来代替原来的。
因为根据MDN文档的描述,我们就知道了

flex规定了弹性元素如何伸长或缩短以适应flex容器中的可用空间。这是一个简写属性,可以同时设置flex-grow,flex-shrinkflex-basis

这样我们使用flex时只指定一个数字(宽度值会转化成flex-basis)时,flex-basis会自动转换为0%,而数字正好转换成了要设置的比例(flex-grow值)。

于是修改css代码如下:

.flex-item {
    flex: 1;
}
.big {
    flex: 3;
}

这样设置的比例就如我们所愿的显示出来了。

ps.stackoverflow原问题链接

标签:flex,item,比例,陷阱,空间,grow,属性
来源: https://www.cnblogs.com/webshare2020/p/13092771.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有