【问题标题】:Making an element span all columns on a grid with automatic columns [duplicate]使用自动列使元素跨越网格上的所有列[重复]
【发布时间】:2018-12-11 22:08:07
【问题描述】:

我有一个带有自动列和 2 行的 CSS 网格,其中除了特定元素之外的所有元素都进入第一行。特殊元素放在第二行,应该填满所有列使用的整个空间。

目前的实现是这样的:

.TabArea {
  display: grid;
  grid-auto-columns: auto;
  grid-template-rows: auto 1fr;
  grid-auto-flow: column;
  
  /* for visualization purposes */
  background: gainsboro;
}

.Tab-title {
  grid-row: 1;
}

.Tab-body {
  grid-row: 2;
  grid-column: 1 / -1;
  
  /* for visualization purposes */
  background: beige;
}
<div class="TabArea">
  <div class="Tab-title">Title A</div>
  <div class="Tab-title">Title B</div>
  <div class="Tab-title">Title B</div>
  <div class="Tab-body">content</div>
</div>

但正如您所见,Tab-body 仅放置在第一列,尽管事实上还有其他列。如何让它跨越所有列?

https://stackoverflow.com/a/44052563/1045510 中的解决方案在这里不起作用,因为列数是可变的,并且列最后会占用空间,将 Tab-titles 推到左侧。

【问题讨论】:

  • 您应该阅读the post you referenced 中的所有解决方案。接受的答案只是一个,在我看来,这是一个丑陋而无用的黑客。你会更好地理解其他人的问题。

标签: css css-grid


【解决方案1】:

我认为您需要使用 span 以使其跨列,因为您只能在 explicit grid 中使用负整数:

.TabArea {
  display: grid;
  grid-auto-columns: auto;
  grid-template-rows: auto 1fr;
  grid-auto-flow: column;
  
  /* for visualization purposes */
  background: gainsboro;
}

.Tab-title {
  grid-row: 1;
}

.Tab-body {
  grid-row: 2;
  grid-column-start: 1;
  grid-column-end: span 3;
  
  /* for visualization purposes */
  background: beige;
}
<div class="TabArea">
  <div class="Tab-title">Title A</div>
  <div class="Tab-title">Title B</div>
  <div class="Tab-title">Title B</div>
  <div class="Tab-body">content</div>
</div>

【讨论】:

  • 我担心这就是答案。猜猜我必须从 JS 提供列数,因为在实际情况下,列数是不固定的。我明天会接受这个,以防万一有人找到解决方法。
  • @Kroltan 如果您使用服务器端代码来创建标题,您可以计算它们的数量并在标签正文上创建一个内联样式,这样您就不必等待js 在样式显示之前启动
  • @Pete 这基本上是我的想法,但它是一个 React 应用程序,因此它兼作服务器端和客户端。
  • 啊酷,使用 js 放入 span 应该不是什么大问题
  • @Pete 我的错,我认为您不能使用span 创建新列。我删除了最后一条评论
猜你喜欢
  • 1970-01-01
  • 2013-11-01
  • 1970-01-01
  • 2018-04-29
  • 2017-07-03
  • 2021-03-13
  • 1970-01-01
  • 2020-07-04
  • 2019-10-27
相关资源
最近更新 更多