css - 等高嵌套 flexbox 列

标签 css flexbox

我有一个有两列的 flexbox 容器,第二列包含另一个有两列的 flexbox 容器。我希望两个嵌套列的高度与包含它们的列的高度相同,后者与另一个外部列的高度相同。

基本上,我希望它看起来像三个等高的柱子,它们之间有一个装订线,如下所示:

three equal-height columns

我在 JSFiddle 中完成了这项工作和 CodePen通过将内部 flexbox 容器的高度设置为 100%。

HTML:

<div>
  <div class="flex-container">
    <div class="flex-col">
      <div class="box">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tortor metus, ultrices ut egestas eget, lacinia ut tellus. Duis consectetur velit ut aliquam convallis. Donec erat ex, interdum et justo in, varius pharetra nunc. Integer rutrum, ante nec gravida scelerisque, urna massa convallis enim, et tincidunt leo odio eget nisl. Ut et blandit velit, ac tristique massa. Integer leo mi, tincidunt in bibendum eu, blandit eget est. Cras convallis elit id urna convallis euismod.</div>
    </div>
    <div class="flex-col">
      <div class="flex-container list-container">
        <div class="flex-col list">Content</div>
        <div class="flex-col list">Content</div>
      </div>
    </div>
  </div>
</div>

和 CSS:

.box {
  background-color: blue;
}

.list-container {
  height: 100%;
}

.flex-col.list {
  background-color: lightblue;
}

.flex-container {
  display: flex;
  flex-direction: row;
  -webkit-flex-direction: row;
  flex-wrap: wrap;
  -webkit-flex-wrap: wrap;
  margin-left: -1em;
}

.flex-col {
  -webkit-flex: 1;
  flex: 1;
  margin-left: 1em;
}

但这里有一个奇怪的部分:在 Chrome 上,它似乎只适用于这些网站,而在 Safari 中根本不起作用。如果我在 Safari 中打开 JSFiddle 或 CodePen 链接,右侧两列的内容将折叠。同时,如果我将相同的代码粘贴到一个 HTML 文件中,并在 Chrome 或 Safari 中打开它,右侧的两列会拉伸(stretch)到视口(viewport)高度。但是,文件和 JSFiddle/CodePen 链接在 Firefox 中都可以正常工作。

所以我的问题是:

  1. 这是怎么回事?
  2. 在不设置固定高度或牺牲排水沟或嵌套的情况下,实现我想要的外观的最佳方式是什么?

最佳答案

这是怎么回事?

您的 .flex-col 不是 flex-container,它只是一个 flex-item。然后在 flex-item 中使用 flex-container,它按预期工作,它填充了自己内容的高度。


在不设置 固定高度还是牺牲排水沟或嵌套?

您还需要将 flex-item 设为 flex-container

.box {
  background-color: blue;
}
.flex-col.list {
  background-color: lightblue;
}
.flex-container {
  display: flex;
  flex-direction: row;
  -webkit-flex-direction: row;
  flex-wrap: wrap;
  -webkit-flex-wrap: wrap;
  margin-left: -1em;
}
.flex-col {
  -webkit-flex: 1;
  flex: 1;
  margin-left: 1em;
}
.flex-col.flex-container {
  margin-left: 0;
}
<div>
  <div class="flex-container">
    <div class="flex-col">
      <div class="box">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tortor metus, ultrices ut egestas eget, lacinia ut tellus. Duis consectetur velit ut aliquam convallis. Donec erat ex, interdum et justo in, varius pharetra nunc. Integer rutrum, ante
        nec gravida scelerisque, urna massa convallis enim, et tincidunt leo odio eget nisl. Ut et blandit velit, ac tristique massa. Integer leo mi, tincidunt in bibendum eu, blandit eget est. Cras convallis elit id urna convallis euismod.</div>
    </div>
    <div class="flex-col flex-container">
      <div class="flex-col list">Content</div>
      <div class="flex-col list">Content</div>
    </div>
  </div>
</div>

关于css - 等高嵌套 flexbox 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40115916/

相关文章:

javascript - 使用 javascript 将自动编号添加到 HTML 表

html - 将多种ttf字体添加到HTML2PDF并通过css在它们之间切换

css - Bootstrap 4 Flexbox 侧边栏在使用位置 :fixed 时变薄

html - 使 flexbox 中的元素占据所有垂直和水平空间

javascript - 如何计算盒子的px值?

javascript - 如何根据高度 float 元素

html - 适用于任何设备的固定高度 slider

html - 将六列 flex 布局转换为三列

html - 如何在 flexbox 中设置行高?

html - flexbox/网格布局中的最后边距/填充折叠