如何使父div包装(并收缩)其浮动子?

Vla*_*eys 5 html css responsive-design

我有一个响应式布局,由一堆元素组成.这是代码的一个非常简化的版本:

HTML:

<div class="parent">
  <div class="header"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.parent {
  background: red;
  display:inline-block;
}

.child {
  background: green;
  width:100px;
  height:100px;
  float:left;
}

.header {
  background: yellow;
  width:100%;
  height:30px;
}
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

我想要实现的是使标题(黄色框)与子div(绿色框)的宽度相同.当首先渲染布局时,它运行良好,这是JSFiddle的截图 在此输入图像描述

但是当屏幕尺寸变得更窄时,标题不会正确缩小,这里是一个较小区域的屏幕截图:

在此输入图像描述

我花了几个小时试图搞清楚,但我做不到.部分挑战是我不知道绿色盒子的数量是什么,因为它们是由.NET动态呈现的

更新1

需要绿色框包装的事实,我想要实现的是黄色框具有与绿色框的组合宽度相同的宽度.期望的结果:

在此输入图像描述

Laz*_*vić 2

我认为用纯 CSS 不可能做你想做的事。悬空空间之所以存在,是因为这就是剩余的空间。该框只是位于下方,因为上面没有空间,您无法缩小黄色标题,因为它不“知道”绿色框不适合的事实。我尝试了一些技巧,但无法让它发挥作用。最安全的选择是选择 JS。

然而,如果您能够灵活地稍微改变您的设计,那么您可能会发现以下一些替代方案值得检查。

1. 完全不指定尺寸

你可以让它flex-box做它的事情。JSFiddle。适用于各种元素,但它们会变得太大或太小,具体取决于父元素的大小和子元素的数量。

2. 留出空间

flex-box为了再次救援,您可以使用justify-content: space-between正确地将标题从最左边的框保持到最右边的框,但在之间引入空格。JSFiddle

  • 不,抱歉,事实上它们的包装是完美的。我只希望标题(黄色框)的宽度与绿色框的组合宽度相同。让我更新一下问题。 (2认同)
  • 我现在明白了。我认为用纯 CSS 不可能做你想做的事。悬空的红色空间在那里,因为这就是_剩余_的空间。该框只是位于下方,因为上面没有空间,您无法缩小黄色标题,因为它不“知道”绿色框不适合的事实。我尝试了一些技巧,但无法让它发挥作用。最安全的选择是选择 JS;虽然我很想看到一个纯 CSS 的解决方案。 (2认同)
  • 谢谢你,拉扎尔,我也得出同样的结论。这有点烦人,因为第一次渲染时黄色框具有正确的宽度,因此它知道绿色框在某个时间点的组合宽度,但不知道它们开始换行时的宽度。 (2认同)