弯曲方向的相等高度行:列

And*_*i V 9 html css css3 flexbox flex-direction

我有一个flex布局,有两个flex项,显示为rows(flex-direction: column).这些物品应具有最小高度,但它们应保持与其中一个物体需要生长的高度相同.看到这个小提琴并减小结果窗格的宽度; 这会强制第二个.component元素增加其高度,但第一个.component元素的高度保持不变.

是否可以强制柔性物品保持相同的高度?请注意,主要的是两个.component元素的堆叠,这是我无法实现的flex-direction: column; flex-direction: row可能会使相同的高度成为可能,但堆叠不起作用.

这是我到目前为止的结果:

div {
  border: 1px solid black;
  box-sizing: border-box;
}
.container {
  display: flex;
  flex-direction: column;
  align-content: stretch;
}
.component {
  min-height: 300px;
}
.left {
  margin-left: 50px;
  margin-top: 50px;
  margin-right: 100px;
  background-color: lightyellow;
}
.right {
  margin-left: 100px;
  margin-top: -250px;
  margin-right: 50px;
  background-color: lightgreen;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="component left">

  </div>
  <div class="component right">
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent sed orci scelerisque, scelerisque enim at, ullamcorper ipsum. Cras eget sapien mi. Aliquam ultrices, ligula ut mollis maximus, ligula massa imperdiet libero, at faucibus mauris ante non
      magna. Sed ex lacus, efficitur sit amet neque ut, venenatis hendrerit libero. Suspendisse ornare orci mi. Nulla iaculis egestas libero, eu tincidunt urna tristique et. Quisque nec odio non elit molestie facilisis.
    </p>
    <p>
      Vestibulum scelerisque justo urna, a semper nisi sollicitudin in. Cras congue enim eu euismod semper. Proin consequat gravida felis, quis tincidunt massa pulvinar quis. Morbi nec diam eget orci vestibulum malesuada. Sed volutpat metus eget mattis commodo.
      Nulla facilisi. Praesent lectus mauris, consequat eu varius vitae, cursus vitae leo. Vivamus sagittis lacinia tortor eu ullamcorper. Integer eget velit magna. Duis vestibulum molestie posuere.
    </p>

  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

Mic*_*l_B 8

flex 等高列特性——这是align-items: stretchflex 容器的默认设置的结果——仅适用于同一行上的 flex 项目。

它不适用于多行 flex 容器中的项目。此行为在规范中定义:

6. 弹性线

在多行 flex 容器(即使只有一行)中,每行的交叉大小是包含行上的 flex 项目所需的最小大小(由于 对齐后align-self),并且行在具有align-content 属性的flex 容器。

换句话说,当基于行的弹性容器中有多行时,每行的高度(“交叉尺寸”)是“包含行上弹性项目所需的最小尺寸”

另外,因为align-items: stretch是沿着横轴工作,所以等高列特征在flex-direction: column横轴是水平的情况下是没有用的。

要在多行中实现等高的列/行,请考虑使用 Javascript 解决方案。


但是,在不太了解您的总体目标的情况下,这里有一种在当前布局中实现等高行的简单方法:

在两个 div 中添加重复的内容。在.component.leftdiv 中,使用visibility: hidden.

修正小提琴


Jac*_*ard 7

您可以将这些 Flexbox 列包装在另一个作为一行的 Flexbox 中,没有理由不能让项目同时成为 Flexbox 和 Flex 项目。

#container {
  display: flex;
}

#container .col {
  flex-grow: 1;
  display: flex;
  flex-direction: column;
  background: grey;
}
Run Code Online (Sandbox Code Playgroud)
<div id="container">
  <div class="col">
    <a href="">asdf</a>
    <a href="">asdf</a>
    <a href="">asdf</a>
  </div>
  <div class="col">
    <a href="">asdf</a>
    <a href="">asdf</a>
    <a href="">asdf</a>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/1dp87bm2/1/