【问题标题】:How to Make Two Flex Columns Behave like a Table in CSS?如何使两个 Flex 列表现得像 CSS 中的表格?
【发布时间】:2019-08-29 18:59:46
【问题描述】:

我不相信我所要求的在纯 CSS 中仍然可以实现,但无论如何我都会问,希望有另一种方法或我缺少的东西。

这是我当前布局的示意图,使用 flexbox 实现:

这非常有效。但是,如果我在“列中的列”div 下方的第 1 列中添加更多内容会怎样。然后我还想将内容添加到第 2 列,但我希望它与我刚刚添加到第 1 列的项目占用相同的垂直空间?换句话说,就好像所有东西都是一个表格,而那些在相邻表格单元格中的同一行中的项目?

这是布局表单时的常见问题,例如,您希望将项目(城市、州、邮编)分组到列中,并且您希望并排跟踪表单中的内容。

(我刚刚在列周围设置了灰色边框来帮助描绘标记,但通常它们不会是多列表单布局中列之间的边框)

因此,最终结果将如下图所示:

这是演示的结构 HTML:

.container {
  display: flex;
}

.column {
  flex-grow: 1;
  /* fill parent space based on child content */
  flex: 1 1 0;
  /* fill parent space equally regardless of child content*/
}

.column.row {
  display: flex;
  flex-wrap: wrap;
}

.column.row div {
  flex-grow: 1;
}

.column.row h2 {
  width: 100%;
}
<div class="container">
  <div class="column">
    <h1>Column 1 Layout Goes here</h1>
    <div>Form Field</div>
    <div>Form Field</div>
    <div>Form Field</div>
    <div class="column row">
      <h2>Column within column</h2>
      <div>Form Field</div>
      <div>Form Field</div>
      <div>Form Field</div>
    </div>
    <div>Form Field "Y" Added</div>
  </div>
  <div class="column">
    <h1>Column 2 layout goes here</h1>
    <div>Form Field</div>
    <div>Form Field</div>
    <div>Form Field</div>
    <div>Form Field Should Track with Form Field "Y" but How?</div>
  </div>
</div>

【问题讨论】:

  • 我突然想到,我可以选择在第一个容器元素下方添加另一个容器元素,这实际上会在需要垂直跟踪的元素的开头创建相当于表格行的元素
  • 不...这就是 subgrid 的用途 - stackoverflow.com/questions/56711501/…

标签: css flexbox


【解决方案1】:

您可以使具有flex-direction: column;.column 元素灵活容器(即将display: flex 也应用于.column 元素)并将margin-top: auto; 应用于第二列的最后一个div 移动它到容器的底部:

.container {
  display: flex;
}

.column {
  flex-grow: 1; /* fill parent space based on child content */
  flex: 1 1 0; /* fill parent space equally regardless of child content*/
  display: flex;
  flex-direction: column;
}

.column.row {
  display: flex;
  flex-wrap: wrap;
}

.column.row div {
  flex-grow: 1;
}

.column.row h2 {
  width: 100%;
}
.column > div:last-child {
margin-top: auto;
}
<div class="container">
<div class="column">
  <h1>Column 1 Layout Goes here</h1>
  <div>Form Field</div>
  <div>Form Field</div>
  <div>Form Field</div>
  <div class="column row">
    <h2>Column within column</h2>
    <div>Form Field</div>
    <div>Form Field</div>
    <div>Form Field</div>
  </div>
  <div>Form Field "Y" Added</div>
</div>
<div class="column">
  <h1>Column 2 layout goes here</h1>
  <div>Form Field</div>
  <div>Form Field</div>
  <div>Form Field</div>
  <div>Form Field Should Track with Form Field "Y" but How?</div>
</div>

【讨论】:

  • 我赞成你的回答。边缘顶部是一种巧妙的技术。但是,如果我需要在“Y”元素下方的第 1 列中添加另一个表单元素怎么办?在这种情况下,相邻字段不再跟踪,因为第 2 列的最后一个子项总是移动到容器的底部。到目前为止,我认为唯一的答案是启动一个新容器以等同于一个新的表行。
猜你喜欢
  • 2013-06-22
  • 1970-01-01
  • 2021-04-19
  • 2014-10-25
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 2013-04-14
  • 1970-01-01
相关资源
最近更新 更多