使 flexbox 中的项目占据所有垂直和水平空间

Posted

技术标签:

【中文标题】使 flexbox 中的项目占据所有垂直和水平空间【英文标题】:Make items in a flexbox take up all vertical and horizontal space 【发布时间】:2017-04-16 05:26:47 【问题描述】:

我目前在一个容器中有元素,每个元素都包含一个图像。我想使用 flexbox 将它们分配到四个角或容器中。图像在水平方向上正确分布,但不会垂直占用所有可用空间。

这是目前的样子:

这是我的标记:

<div class="container">
    <div class="photo">
        <img src="https://placehold.it/180">
    </div>
    <div class="photo">
        <img src="https://placehold.it/180">
    </div>
    <div class="photo">
        <img src="https://placehold.it/180">
    </div>
    <div class="photo">
        <img src="https://placehold.it/180">
    </div>
</div>

还有我的 (S)CSS:

div.container 
    width: 405px;
    height: 405px;
    background: rgba(0,0,0,0.1);
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;

    div.photo 
        width: 180px;
        height: 180px;
        overflow: hidden;
        border-radius: 5px;

        img 
            height: 100%;
                           
    

div.container 
  width: 405px;
  height: 405px;
  background: rgba(0, 0, 0, 0.1);
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;


div.container div.photo 
  width: 180px;
  height: 180px;
  overflow: hidden;
  border-radius: 5px;


div.container div.photo img 
  height: 100%;
<div class="container">
  <div class="photo">
    <img src="https://placehold.it/180">
  </div>
  <div class="photo">
    <img src="https://placehold.it/180">
  </div>
  <div class="photo">
    <img src="https://placehold.it/180">
  </div>
  <div class="photo">
    <img src="https://placehold.it/180">
  </div>
</div>

【问题讨论】:

【参考方案1】:

align-content: space-between 应用到您的flexbox 以执行此操作(这当然假设您有足够的可用 空间用于垂直对齐)- 请参见下面的演示:

align-content 属性修改了 flex-wrap 的行为 财产。它类似于 align-items,但不是对齐 flex 项目,它对齐柔性线。 (来源:W3schools)

div.container 
  width: 405px;
  height: 405px;
  background: rgba(0, 0, 0, 0.1);
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-content: space-between;

div.container div.photo 
  width: 180px;
  height: 180px;
  overflow: hidden;
  border-radius: 5px;

img 
  height: 100%;
<div class="container">
  <div class="photo">
    <img src="https://placehold.it/180">
  </div>
  <div class="photo">
    <img src="https://placehold.it/180">
  </div>
  <div class="photo">
    <img src="https://placehold.it/180">
  </div>
  <div class="photo">
    <img src="https://placehold.it/180">
  </div>
</div>

【讨论】:

这个解决方案将 flexmodel 引入了荒谬的境地。结果是静态大小。 Flex 应该在那里处理动态变量。对于这个结果,flex 是不必要的。 支持显示一个有效的解决方案。但这不是一个。对不起 @JanNahody 看在上帝的份上,这是一个有效的!!请阅读align-content 以及为什么使用它! Flex 已用于处理动态变量。您的解决方案为此提供了有效的解决方案。然而,这是不正确的,因为它不能处理动态变量。这是一个解决方案,但不是一个灵活的解决方案。这就是我演戏的原因。 @kukkuz 好像你在这个 cmets 部分过得很艰难! (我猜是一群艰难的人)无论如何谢谢你的回答!

以上是关于使 flexbox 中的项目占据所有垂直和水平空间的主要内容,如果未能解决你的问题,请参考以下文章

没有重叠项目的Flexbox包装列表

css3 Flex布局 学习

RN布局-Flexbox

如何使 DockPanel 中的项目扩展以适应 WPF 中的所有可用空间?

使图片行扩展以适应可用空间

如何使 flexbox 响应式?