3

考虑以下代码段:

#container{
  border: solid 1px black;
  display: inline-grid;
  grid-template-columns: repeat(3, auto);
}
<div id="container">
  <div class="row">
    <div class="item">A1111</div>
    <div class="item">B1</div>
    <div class="item">C1</div>
  </div>
  <div class="row">
    <div class="item">A2</div>
    <div class="item">B2222</div>
    <div class="item">C2</div>
  </div>
  <div class="row">
    <div class="item">A3</div>
    <div class="item">B3</div>
    <div class="item">C3333</div>
  </div>  
</div>

最终结果是一个类似表格的显示,其中每一行的每个项目都是该列中最宽项目的宽度。

A1111 A2    A3
B1    B2222 B3
C1    C2    C3333

这很棒 - 但我需要将表格布置成行......

A1111 B1    C1
A2    B2222 C2
A3    B3    C3333

display: table解决了这个问题 - 但表格在间距、对齐方式等方面存在一些缺点。因此,grid 和 flex 看起来很有吸引力。

唉,我无法弄清楚如何获得所需的信息。

添加display: grid.row有助于信息的顺序,但不保留相等的列宽。

项目内容会有所不同,因此不能使用固定宽度,并且不希望网格/弹性跨越整个页面/包含宽度。

4

3 回答 3

2

您可以使用 grid-column 定义网格项目应使用的列。这意味着该行不需要包含行 div。

工作示例...

#container{
  border: solid 1px black;
  display: inline-grid;
  grid-auto-flow: row;
  grid-gap: 10px;
  padding: 10px;
}

.col1{
  grid-column: 1;
}

.col2{
  grid-column: 2;
}

.col3{
  grid-column: 3;
}
<div id="container">
    <div class="col1">A11111</div>
    <div class="col2">B1</div>
    <div class="col3">C1</div>
    <div class="col1">A2</div>
    <div class="col2">B2222222</div>
    <div class="col3">C2</div>
    <div class="col1">A3</div>
    <div class="col2">B3</div>
    <div class="col3">C33333333</div>
  </div>
</div>

于 2017-03-29T14:56:54.273 回答
0

你的主要问题是你的标记太深了。你有类似表格的标记,三层深:表格、行和单元格。对于网格布局,您根本不需要“行”元素。

当您在一个元素上使用display: gridordisplay: inline-grid时,它会使该元素成为一个网格容器。然后它的每个子元素都成为网格项。网格项目将布置在由其容器定义的网格中。

你还说你想要等宽的列。为此,您应该使用fr单位而不是auto列大小:

grid-template-columns: repeat(3, 1fr);

…这将使每一列成为一个“分数”单位宽。

#container{
  border: solid 1px black;
  display: inline-grid;
  grid-template-columns: repeat(3, 1fr);
}
<div id="container">
  <div class="item">A1111</div>
  <div class="item">B1</div>
  <div class="item">C1</div>
  <div class="item">A2</div>
  <div class="item">B2222</div>
  <div class="item">C2</div>
  <div class="item">A3</div>
  <div class="item">B3</div>
  <div class="item">C3333</div>
</div>

于 2017-03-31T19:15:39.537 回答
-1

我有办法做到的。

附JSFiddle(点击)

.row {
  display: flex;
  flex-flow: row nowrap;
  justify-content: space-between;
}

.row > .item {
  display:block;
  flex: 1 1;

  border: 1px solid #000;
}

有这么棒的指南flex点击这里。

于 2017-03-29T11:28:28.833 回答