代码是这样的:

.container {
  display: flex;
  flex-wrap: wrap;
  width: 400px;
  height: 400px;
  background-color: antiquewhite;
}

.first {
  width: 200px;
  background-color: aquamarine;
}

.second {
  width: 200px;
  background-color: rgb(122, 88, 177);
}

.third {
  width: 200px;
  height: 200px;
  background-color: rgb(79, 152, 91);
}
<div class="container">
  <div class="first"></div>
  <div class="second"></div>
  <div class="third"></div>
</div>

.container的宽度为400px时,.third块将换行到另一行,.first.second元素的高度为.containerpx,但当.container的宽度为200px时,.first.second元素的高度为66.6px.

我不明白为什么会发生这样的事情,也不明白它是如何运作的.

我试着用一种合乎逻辑的方式来解决这个问题,但尺寸不符合任何计算.

first case

second case

推荐答案

TL;DR Flexbox算法规范[1]提供了您正在寻找的答案,但它有点复杂.

首先,我们需要回答一个问题,为什么第一个和第二个div甚至有任何高度-因为它们没有任何内容,也没有定义height值.在正常情况下,它们应该是隐形的!但我们可以看到他们.这是因为弹性容器将try 沿横轴拉伸项目(默认情况下).

在所考虑的柔性容器中,主轴为X(与宽度相关),横轴为Y(与高度相关).换句话说,height是"交叉"维度.因此,在规范中,确定物品的高度被描述为"交叉尺寸确定".以下是摘录:

9.4.交叉口尺寸测定

  1. 通过用已用主尺寸和可用空间进行布局来确定每件物品的假设十字尺寸,处理自动 作为合身的内容.

  2. 计算每条折线的十字大小.

如果柔性容器是单线的并且具有确定的交叉尺寸, 挠性线的交叉大小是挠性容器的内十字 尺码.

否则,对于每条弹性线:

  1. 收集内联轴与主轴平行、对齐自身为基线、交叉轴的所有柔体项 利润率都是非汽车的.找出之间的最大距离 每个项目的基线及其假设的外交叉起点边缘,以及 每个项目的基线与其 假设外部十字端边,并将这两个值相加.

  2. 在上一步没有收集的所有物品中,找出最大的外部假设十字大小.

  3. 弹性线的使用交叉尺寸是前两个步骤中找到的最大数字,并且为零.

取材自:https://www.w3.org/TR/css-flexbox-1/#cross-sizing

你可以按照这些步骤来弄清楚你所要求的原则.你看到的66.6px很可能来自于上面步骤7中"假设的十字大小"的计算.

[1]https://www.w3.org/TR/css-flexbox-1/#layout-algorithm

Css相关问答推荐

容器内的中心固定元件

悬停时可展开的按钮与屏幕右侧对齐,如何保持未悬停的按钮正确对齐?

使用最小高度和边框使阴影DOM中的元素达到自定义元素高度的100%,如果溢出,还可以zoom 父元素

CSS 不要 Select 包含混合内容的 div 中的第一个元素

.SVG 文件对象在锚标签下可点击

我怎样才能将我的按钮向上移动,因为文本是

CSS 媒体查询不为桌面版的圣杯响应式布局包装 Flexbox 容器元素

BootStrap:右对齐嵌套手风琴

关键帧不能动画回来

无法更改 div 内链接的悬停 colored颜色

卡在 CSS 中的grid-template-columns中

如何在 nth-child 中正确传递 CSS 变量?

bootstrap 模式对话框中的谷歌 map 自动完成结果

twitter-bootstrap:当鼠标悬停在 -tag 中的 btn-group 上时,如何go 掉带下划线的按​​钮文本?

宽度和高度似乎不适用于 :before 伪元素

将未知大小的大图像居中在一个较小的 div 中,并隐藏溢出

CSS 表格 td 宽度 - 固定,不灵活

Unicode 通过 CSS :before

为什么我的 div 边距重叠,我该如何解决?

CSS背景图像不透明度?