Heim > Fragen und Antworten > Hauptteil
P粉4404536892023-08-22 12:47:17
我发现这在过去的几年里对于flex和grid都多次给我带来了麻烦,所以我建议以下操作:
* { min-width: 0; min-height: 0; }
如果需要这种行为,只需使用min-width: auto
或min-height: auto
。
实际上,还可以加入box-sizing以使所有布局更合理:
* { box-sizing: border-box; min-width: 0; min-height: 0; }
有人知道是否存在任何奇怪的后果吗?在使用上述方法的几年中,我没有遇到任何问题。实际上,我想不出任何情况下我会希望从内容向外布局到flex/grid,而不是从flex/grid向内布局到内容 --- 而且如果这种情况存在,那肯定很少见。所以这感觉像是一个糟糕的默认设置。但也许我漏掉了什么?
P粉7524794672023-08-22 10:57:07
您遇到了flexbox的默认设置。
Flex项目在主轴上不能小于其内容的尺寸。
默认设置为...
min-width: auto
min-height: auto
...分别适用于行方向和列方向的flex项目。
您可以通过设置flex项目为:
min-width: 0
min-height: 0
overflow: hidden
(或任何其他值,除了visible
)关于auto
值...
换句话说:
min-width: auto
和min-height: auto
默认仅在overflow
为visible
时适用。overflow
的值不是visible
,则min-size属性的值为0
。overflow: hidden
可以替代min-width: 0
和min-height: 0
。以及...
min-height: auto
。嵌套的Flex容器
如果您在HTML结构的多个层次上处理flex项目,则可能需要覆盖较高级别项目上的默认min-width: auto
/ min-height: auto
。
基本上,具有min-width: auto
的较高级别flex项目可以阻止下方嵌套的具有min-width: 0
的项目缩小。
示例:
Chrome vs. Firefox / Edge
自2017年以来,Chrome似乎要么(1)恢复到min-width: 0
/ min-height: 0
的默认值,要么(2)根据某个神秘的算法在某些情况下自动应用0
的默认值。(这可能是他们所谓的干预。)因此,许多人在Chrome中看到他们的布局(尤其是期望的滚动条)按预期工作,但在Firefox / Edge中不起作用。有关更详细的信息,请参阅这里:Firefox和Chrome之间的flex-shrink差异
IE11
如规范中所述,min-width
和min-height
属性的auto
值是“新的”。这意味着某些浏览器可能仍然默认呈现0
值,因为它们在值更新之前实现了flex布局,并且因为0
是CSS 2.1中min-width
和min-height
的初始值。IE11是其中之一。其他浏览器已经更新到了在flexbox规范中定义的较新的auto
值。
.container { display: flex; } .col { min-height: 200px; padding: 30px; word-break: break-word } .col1 { flex: 1; background: orange; font-size: 80px; min-width: 0; /* NEW */ } .col2 { flex: 3; background: yellow } .col3 { flex: 4; background: skyblue } .col4 { flex: 4; background: red }
<div class="container"> <div class="col col1">Lorem ipsum dolor</div> <div class="col col2">Lorem ipsum dolor</div> <div class="col col3">Lorem ipsum dolor</div> <div class="col col4">Lorem ipsum dolor</div> </div>