当前位置: 首页 > 知识库问答 >
问题:

使用CSS网格布局跨越所有列/行的项

贝成业
2023-03-14

随着CSS网格布局模块即将在Firefox和Chrome中发布,我想我应该尝试一下如何使用它。

我尝试创建一个简单的网格,其中一个项目a横跨所有行的左侧,其他项目(BCDE等)横跨各个行的右侧。横过行右侧的项的数量是可变的,因此可能存在bcde等的任何组合,因此我使用了Grid-auto-rows属性。因此,我无法为a定义要跨转的固定行数,但我希望a跨转所有可用行。

null

#container {
    display: grid;
    grid-auto-flow: column;
    grid-auto-rows: auto;
    grid-template-columns: [left] 4rem [right] 1fr;
    margin: 0rem auto;
    max-width: 32rem;
}
#a {
    background: lightgreen;
    grid-column: left;
    grid-row: 1 / auto;
    justify-self: center;
}
#b {
    grid-area: auto / right;
    background: yellow;
}
#c {
    grid-area: auto / right;
    background: pink;
}
#d {
    grid-area: auto / right;
    background: lightskyblue;
}
#e {
    background: plum;
    grid-area: auto / right;
}
<div id="container">
    <div id="a">a</div>
    <div id="b">b</div>
    <div id="c">c</div>
    <div id="d">d</div>
    <div id="e">e</div>
</div>

null

要使a跨越所有行而不知道最终会有多少行,我应该做什么?

共有2个答案

郑向阳
2023-03-14

您可以使用hudge值row to span(至少与您认为的最大行数相同):

网格-行:1/-1;12/19,在FF中仍不工作。

null

#container {
  display: grid;
  grid-auto-flow: column;
  grid-auto-rows: auto;
  grid-template-columns: [left] 4rem [right] 1fr;
  margin: 0rem auto;
  max-width: 32rem;
}
#a {
  background: lightgreen;
  grid-column: left;
  grid-row-start: 1;
  grid-row-end: span 1000;/* hudge value ... will at least span so many rows */
  justify-self: center;/* ? what did you mean here ? */
  /* did you mean : */
  display:flex;
  align-items:center;
}
#b {
  grid-area: auto / right;
  background: yellow;
}
#c {
  grid-area: auto / right;
  background: pink;
}
#d {
  grid-area: auto / right;
  background: lightskyblue;
}
#e {
  background: plum;
  grid-area: auto / right;
}
<div id="container">
  <div id="a">a</div>
  <div id="b">b</div>
  <div id="c">c</div>
  <div id="d">d</div>
  <div id="e">e</div>
</div>
鱼锦
2023-03-14

我也有过同样的情况,找到了一个干净的解决方案。

不要使用巨大的行跨度值,请尝试:

grid-column: 1/-1;

由于负数从右边开始计数,此代码将网格列指定到最后一列的末尾。

注意:如果这不适用,请查看下面评论中的Jonny Green的解决方案。

 类似资料:
  • 我正在使用CSS网格布局,在尝试使文本框填充它所在的div容器时遇到了困难。它对某些控件(如GridView/GoogleMap)似乎工作得很好,但当我尝试使用TextBox时,它只填充一列的宽度,即使div填充了3-4列。 下面是网格容器的示例CSS,以及用于填充所有列的示例 此GooleMap控件在填充屏幕的所有列中正确显示(GridViews也正确显示) 但是,当我尝试插入宽度为100%的T

  • 问题内容: 我认为使用Flexbox无法实现这一点,因为每一行只能是适合其元素的最小高度,但是可以使用更新的CSS Grid来实现吗? 明确地说,我希望网格中所有行的所有元素的高度相等,而不仅仅是每行。基本上,最高的“单元格”应规定所有单元格的高度,而不仅仅是其行中的单元格。 问题答案: 简短答案 如果目标是创建具有相等高度的行的网格,而网格中最高的单元格将设置所有行的高度,那么这是一种快速简单的

  • 我认为使用Flexbox是不可能实现这一点的,因为每一行只能是适合其元素所需的最小高度,但使用较新的CSS网格可以实现这一点吗? 明确地说,我希望网格中的所有元素在所有行上的高度相等,而不仅仅是每一行。基本上,最高的“单元格”应该指示所有单元格的高度,而不仅仅是其行中的单元格。

  • 问题内容: 我正在尝试让我的粘性标头具有过渡效果,因此它不仅易于移动,而且易于释放。 我究竟做错了什么? 基本上,以下代码将tiny类添加到我的包装器类中,这很好。 这是CSS部分: 所以标题确实会收缩,但是没有动画,我是否错过了某些东西,或者转换根本不适用于网格? 这是css-grid文档的链接。 问题答案: 根据规范,过渡应该在和上进行。 7.2。 明确的轨道尺寸:和 属性 可动画的: 作为长

  • 我需要Android TV的自定义键盘,就像下面图像中的这个。布局有一个带有网格布局管理器的回收器视图来自定义行和列。 但是当我运行应用程序时,布局在最后一行没有显示正确的按钮宽度。“空格”按钮的量程应为4,“移位”按钮2和“归零”按钮3。

  • 每一个网格项目都有一个矩形的网格区域,这个网格区域定义了该网格项的包含块,对齐属性(justify-self 和 align-self)确定其实际位置。 网格项占用的单元格也会影响网格的行和列的大小,参看网格尺寸(Grid Sizing)。 网格区域在网格内的位置通过1个网格位置和1个网格跨度属性来定义: grid position 表示网格项在网格中的位置。该属性可以是确定的(被显式定义)或自动