使用 Flexbox 将列调整为最大单元格宽度

问题描述 投票:0回答:1

我正在尝试使用 CSS flexbox 创建一个两列表格布局。我希望第 1 列尽可能窄,紧密地容纳该列中的所有 3 个单元格。我希望第 2 列扩展到剩余宽度。

我能够创建这个:https://codepen.io/ptspts/pen/KKErzeL。这样做的问题是第一列中的每个单元格都有不同的宽度。我希望它们都自动变得与最宽一样宽。

DIV.CONV {
  display: flex;
  flex-flow: column nowrap;
  background-color: #888;
  margin: 0;
  padding: 0;
  border: none;
}
DIV.CONV > DIV.ROW {
  display: flex;
  flex-flow: row nowrap;
  width: 100%;
  background-color: #ff0;
  margin-top: 6px;
  margin-bottom: 6px;
}
DIV.CONV > DIV.ROW > DIV.C1 {
  display: inline;
  flex: 1;
  background-color: #800;
  align-self: start;  /* Vertical alignment. */
  flex-grow: 0;
  margin-right: 6px;
}
DIV.CONV > DIV.ROW > DIV.C2 {
  display: block;
  flex: 2;
  background-color: #080;
  align-self: stretch;  /* Vertical alignment. Default. */
}
<DIV CLASS=CONV>
  <DIV CLASS=ROW>
<DIV CLASS=C1>HI</DIV>
<DIV CLASS=C2>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</DIV>
  </DIV>
  <DIV CLASS=ROW>
<DIV CLASS=C1>FOOBAR</DIV>
<DIV CLASS=C2>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.</DIV>
  </DIV>
  <DIV CLASS=ROW>
<DIV CLASS=C1>LAST</DIV>
<DIV CLASS=C2>Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</DIV>
  </DIV>
</DIV>

CSS flexbox 是否可以做到这一点(如果可以,如何实现)?如果没有,是否可以使用表格而不使用 JavaScript(如果可以,如何实现)?如果没有,是否可以使用 CSS 网格(如果可以,如何实现)?

css flexbox
1个回答
1
投票

这更适合 CSS 网格。

只需删除所有

rows
,并使用单个
display: grid
并将模板列设置为
max-content 1fr
。本质上,第一列将与内容一样宽,第二列将是所有其他剩余空间。

DIV.ROW {
  display: grid;
  grid-gap: 6px;
  width: 100%;
  background-color: #ff0;
  grid-template-columns: max-content 1fr;
}

DIV.C1 {
  grid-column: 1;
  background-color: #800;
}

DIV.C2 {
  grid-column: 2;
  background-color: #080;
}
<DIV CLASS=CONV>
  <DIV CLASS=ROW>
    <DIV CLASS=C1>HI</DIV>
    <DIV CLASS=C2>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
      dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</DIV>

    <DIV CLASS=C1>FOOBAR</DIV>
    <DIV CLASS=C2>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
      voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.</DIV>

    <DIV CLASS=C1>LAST</DIV>
    <DIV CLASS=C2>Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem
      ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</DIV>
  </DIV>
</DIV>

© www.soinside.com 2019 - 2024. All rights reserved.