html - 如何包装 flex 盒子项,以便多个子项堆叠在另一个子项旁边?

标签 html css flexbox

我有一个使用 Flexbox 的类似表格的布局:

+--------------+---------------+-----------------+---------------+
|      1       |       2       |        3        |       4       |
|              |               |                 |               |
+--------------+---------------+-----------------+---------------+

随着页面变小,我想将内容包装起来,最终得到如下所示的内容:

+--------------+-------------------------------------------------+
|              |                        2                        |
|              |                                                 |
|              +-------------------------------------------------+
|      1       |                        3                        |
|              |                                                 |
|              +-------------------------------------------------+
|              |                        4                        |
|              |                                                 |
+--------------+-------------------------------------------------+

我尝试使用 flex-wrap:wrap 并扩展尾随子项的宽度以强制它们换行,但这只会产生类似以下内容的内容:

+-----------+--------------------------------------+
|           |                   2                  |
|           |                                      |
|     1     +--------------------------------------+
|           |
|           |
+-----------+--------------------------------------+
|                        3                         |
|                                                  |
+--------------------------------------------------+
|                        4                         |
|                                                  |
+--------------------------------------------------+

这是我当前的尝试:

.container {
  display: flex;
  flex-wrap: wrap;
}

.controls {
  flex: 0 0 25%;
  max-width: 25%;  
}

.name, .artist, .album {
  flex: 0 0 75%;
  max-width: 75%;
}

@media screen and (min-width: 600px) {  
  .name, .artist, .album {
    flex: 0 0 25%;
    max-width: 25%;
  }
}
<div class="container">
  <div class="controls">PLAY</div>
  <div class="name">NAME</div>
  <div class="artist">ARTIST</div>
  <div class="album">ALBUM</div>
</div>

( JSFiddle )

我更喜欢在 IE11+ 中工作的纯 CSS 解决方案。

最佳答案

考虑使用嵌套 Flex 容器,将元素 2、3 和 4 切换到较小屏幕上的列。

这是一个基于您的代码的示例:

HTML

<div class="container">
    <div class="controls">PLAY</div>
    <div class="inner-container"><!-- nested flex container -->
        <div class="name">NAME</div>
        <div class="artist">ARTIST</div>
        <div class="album">ALBUM</div>
    </div>
</div>

CSS

.container {
    display: flex;
    flex-wrap: wrap;
}

.inner-container {
    display: flex;
    flex: 0 0 75%;
}

.controls {
    flex: 0 0 25%;
}

.name,
.artist,
.album {
    flex: 1;
}

@media screen and (max-width: 600px) {
     .inner-container { flex-direction: column; }
     .controls { align-self: center; }
}

Revised Fiddle

关于html - 如何包装 flex 盒子项,以便多个子项堆叠在另一个子项旁边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35227874/

相关文章:

javascript - polymer 网络组件未注册

javascript - 悬停时具有边框半径和不透明度的图像

html - 如何扩展一个 <div> 来填充它的父级,而不是根据它自己的内容扩展?

html - flex 方向等高行 : column

python - 正则表达式:匹配两个项目之间的文本

html - 覆盖特定区域的 CSS 规则

javascript - Bootstrap 4 - 我无法在 div 中拉伸(stretch)背景图像

javascript - jQuery 和 css 两步注册来自

css - DIV 未正确排列的问题

javascript - React Native 适配文本组件