Flexbox:如何使div无需包装即可填充容器宽度的100%?


79

我正在将必须使用的旧inline-block的网格模型更新为我创建的较新的Flexbox。除了一点点障碍之外,一切都运转良好,这已成为一个大问题:

我有一堆CSS控制的滑块;因此,有一个宽度为100%的包含包装器,而内部是另一个div:其宽度也是100%,但将其white-space设置为nowrap。使用inline-block,这意味着内部div(设置为100%宽度)将不受父母约束的约束,并缠绕到下一行-他们将继续进行操作。这正是我想要的。但是,我根本无法使它与flexbox一起使用。供参考,这是一张图片:

Flexbox问题

作为参考,这是使用inline-block的jsFiddle:http : //jsfiddle.net/5zzvqx4b/

...并且无法与Flexbox配合使用:http : //jsfiddle.net/5zzvqx4b/1/

我已经试过各种与变化flexflex-basisflex-wrapflex-grow,等。但对我的生活,我不能得到这个工作。

请注意,我可以通过将.boxcontainerwidth设置为强制它以一种怪异的,不灵活的方式执行我想要的操作200%。这适用于单个示例,但是在某些情况下,我事先不知道会有多少个子框,如果可能的话,我宁愿不对每个元素采用内联样式。


...不是一个答案,但是为什么您要更改flex,您已经有一个无前缀的有效代码,并且可以在更多浏览器上使用?
贴图

1
@sdcr:由于该项目的其他要求,在大约20,000行代码下,可能要花一些时间才能完成。
indextwo 2015年

1
哦,好吧只是说一些你设置的弯曲特性的存在甚至没有必要的,比如flex-direction: row;justify-content: flex-start;align-items: flex-start;这些都是默认规则,除非你覆盖它们。有一个很大的指导这里
贴纸

@sdcr:谢谢-在该示例中确实非常冗长,但这仅是因为我直接从样式表中复制粘贴了它,其中有很多条件和子类,等等。这就是为什么要显式设置属性的原因。我对flexbox的了解还不够,还无法将其写下来!
indextwo 2015年

请注意,浏览器对flex的支持是带有-ms *前缀的IE10 +。
贴纸

Answers:


77

为防止弹性项目收缩,请将弹性收缩因子设置为0

弹性收缩因素决定了有多少的柔性项目将收缩相对于其余部分弯曲的物品时负的自由空间,分布在柔性容器。省略时,设置为1。

.boxcontainer .box {
  flex-shrink: 0;
}


1
噢上帝谢谢你。我实际上忽略了该flex-shrink属性,因为我阅读的描述似乎并不相关。考虑自己在……6分钟内就被接受了!
indextwo 2015年

46

您可以使用简写的flex属性并将其设置为

flex: 0 0 100%;

那是flex-growflex-shrinkflex-basis在一行。上面描述了弯曲收缩,弯曲生长是相反的,弯曲基数是容器的大小。


太棒了!超级方便知道。
哈特利圣

23

就我而言,仅使用flex-shrink: 0是行不通的。但是添加flex-grow: 1它是可行的。

.item {
    flex-shrink: 0;
    flex-grow: 1;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.