flex布局中设置子元素宽度失效

897 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

前言:

成功没有捷径但成长有路径

css必备场景。专注积累,每天记录一个知识点,老概念新理解,重点记录一下

你需要首先理解 flex:1,快去查 www.ruanyifeng.com/blog/2015/0…

背景

当我们用flex去实现两个div,左边固定宽,右边自适应的时候,有没有遇到一个设置子元素宽度失效的问题

image.png

当你的最外层box设置了display:flex,你再设置div1固定宽度,div2宽度自适应,正式时,也就是div2中内容没超长,是没问题的,一旦div2内容特别特别长就会压缩左侧div1的宽度,导致左边变小,固定宽度失效。

这其实是flex:1这种写法的问题,要明白他的组成结构

也就是他隐含了三个属性

1 flex-grow:1 //放大比例
2 flex-shrink:1 //收缩比例
3 flex-basis:auto //伸缩比例

flex-grow

flex-grow:当子容器的宽度小于父容器,就会产生剩余空间。(默认0)

设置0,即如果存在剩余空间,也不放大。

设置1,即剩余空间将会等比例分配给子容器。

设置2,如果其他子容器设置了1,则按2:1分配

flex-shrink

flex-shrink:当子容器的宽度大于父容器时,就会产生一个缺少空间。如果不改,默认是1,即空间不足的时候子容器会等比例进行收缩。

当你使用flex:1时,他代表设置了flex-grow为1等分剩余空间, flex-shrink还是默认值,所以会产生上面的问题,超长造成子容器等比例收缩,设置子容器(div1)的宽度失效。

明白了这个问题解决方案就很简单了,

只需要给子容器(固定宽度的这个)设置flex-shrink:0即可,让他不收缩

结语

终于赶上了掘金的更文活动,知识是学不完的,脚踏实地,基于业务学习,梳理好每个知识点,把做过的东西吃透,多多产出。

如果文章有错误请多多指出,感谢!