我有一些div .testgrid-template-columns: auto auto auto;,因为我希望列宽度类似于依赖于元素宽度的Flex Effect,还希望justify-content: start;将列与左侧对齐,这也是我使用auto而不是1fr的原因,因为我不希望列被拉伸到可能的更长宽度.

问题是我不知道如何像表格那样整齐地对齐列,S,你可以从下面的例子中看到,第二个div.test的p.target比第一个长,我试图实现的是让所有其他列的宽度都跟随最长的列.

附言:我不想用桌子.我还可以使用JavaScript找到最长的一个,并将所有其他的宽度设置为这个值.我只是想看看是否有一个简单的解决方案,只用css.

p {
  margin: 0;
}

.test {
    column-gap: 30px;
    display: grid;
    grid-template-columns: auto auto auto;
    justify-content: start;
}

p:nth-child(2) {
    position: relative;
    width: 120px;
}

.flex {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    position: absolute;
    left: 0;
    right: 0;
}
<div class="test">
  <p class="target">Hello</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
</div>
<div class="test">
    <p class="target">Hellooo</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
</div>

例如,它在表格中如下所示:

td:nth-child(2) {
    position: relative;
  width: 120px;
}

.flex {
  white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
}
<table>
<tbody>
  <tr>
    <td>Hello</td>
    <td><span class="flex">Helloooooooooooooo</span></td>
    <td>Hello</td>
  </tr>
  <tr>
    <td>Hellooo</td>
    <td><span class="flex">Helloooooooooooooo</span></td>
    <td>Hello</td>
  </tr>
</tbody>
</table>

请注意,所有第二列一起开始,即使第一列"helloo"从第二行开始更长.

推荐答案

重构您的HTML,以便将所有项添加到单个网格中,并使用inline-grid:

<div class="test">
  <p class="target">Hello</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
  <p class="target">Hellooo</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
</div>
.test {
  display: inline-grid;
}

请注意,您必须将每行的第二个元素指定为更复杂的nth-child:

p:nth-child(3n + 2) {}

试试看:

.test {
  display: inline-grid;
}

p:nth-child(3n + 2) {
  position: relative;
  width: 120px;
}


/* Demo only */

p {
  margin: 0;
  background: #ddd;
}

.test {
  column-gap: 30px;
  grid-template-columns: auto auto auto;
  justify-content: start;
}

.flex {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  position: absolute;
  left: 0;
  right: 0;
}
<div class="test">
  <p class="target">Hello</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
  <p class="target">Hellooo</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
</div>

Css相关问答推荐

在React中使用Tailwind自定义组件着色

如何根据屏幕宽度覆盖SCSS变量?

如何阻止 Mud Blazor MudTable 列扩展以适合文本

如何使代码块输出在 quarto revealjs 演示文稿中水平滚动

如何在保持默认外观的同时更改 javaFX 中按钮的突出显示 colored颜色

如何使 css 不重复同一个类?

如何简化CSS?

每当键盘在react native 中打开时,如何使用 KeyboardAvoidingView 删除图像?

当我进入登录页面时,它处于桌面模式(响应式设计消失)

reactjs - 容器中水平行的png图像

有条件地覆盖 CSS 中的 AntD Select 样式

内联块在 Internet Explorer 7、6 中不起作用

纯 CSS 复选框图像替换

Div Size 自动调整内容大小

如何在不使用浮动的情况下垂直对齐 div?

使用 CSS 强制侧边栏高度 100%(带有粘性底部图像)?

Highcharts 图表选项 backgroundColor:'transparent' 在 IE 8 上显示黑色

Chrome 呈现 colored颜色 的方式与 Safari 和 Firefox 不同

在无序列表中的项目之后添加管道分隔符,除非该项目是最后一行

html元素(div)的全高,包括边框,填充和边距?