【问题标题】:How to span a grid cell across all dynamic rows? [duplicate]如何跨越所有动态行的网格单元格? [复制]
【发布时间】:2021-03-13 10:09:15
【问题描述】:

所附示例工作正常,.container 的第一个子代跨越所有行,但问题是 grid-row-end 值取决于 div.container 的多个子代。是否可以在不使用魔法常量 (4) 且不更改 HTML 结构的情况下做到这一点。不幸的是,grid-row-end:-1 只能用于显式网格。

    .container {
        display:grid;
        grid-gap: 0.4em;
    }
    .container > * {
        background-color: lightgray;
    }
    .container *:first-child {
        grid-column: 1;
        grid-row-start: 1;
        grid-row-end: 4;
    }
    .container *:not(:first-child) {
        grid-column: 2;
    }
 
<div class="container">
    <div>IMG</div>
    <div>A</div>
    <div>B</div>
    <div>...</div>
</div>

【问题讨论】:

  • 这个问题已经被问过了stackoverflow.com/q/44052336/383904
  • 如果您删除间隙属性并调度子级上的边距(站在第二列和第二行,您可以设置一个可能的数字永远不会匹配或最多的hudge值相同数量

标签: css css-grid


【解决方案1】:

这已经被问过了Make a grid item span to the last row / column - Roko C. Buljan

如果您删除 gap 属性并改为在子级上调度 margin(站在第二列和第二行中,您可以设置一个可能的数字永远不会匹配或最多匹配的 hudge 值网格的实际行数相同– G-Cyrillus

链接的问题没有考虑差距集。

sn-p 绘图我的评论:

.container {
        display:grid;  
    }
    .container > * {
        background-color: lightgray;
    }
    .container *:first-child {
        grid-column: 1;
        grid-row-start: 1;
        grid-row-end: 100;/* use a value that will over the expected numbers of row */
        grid-gap:0; /* empty rows will collapse to none height */
        grid-auto-rows:auto; /* do not give an height here , else empty rows will use space */
        margin-right:0.2em;
    }
    .container :nth-child(2)   {
        margin-left:0.2em;
        grid-column:2;
    }
    .container :nth-child(2) ~ div  {
        grid-column:2;
        margin-top:0.4em;
        margin-left:0.2em;
    }
<div class="container">
    <div>IMG</div>
    <div>A</div>
    <div>B</div>
    <div>...</div>
    <div>...</div>
    <div>...</div>
    <div>...</div>
    <div>...</div>
    <div>...</div>
    <div>...</div>
</div>

编辑

如果 javascript 适合你

let rowsToSpan = document.querySelectorAll(".container>*");
rowsToSpan[0].style.gridRowEnd = rowsToSpan.length
.container {
  display: grid;
  grid-gap: 0.4em;
}

.container>* {
  background-color: lightgray;
}

.container *:first-child {
  grid-column: 1;
  grid-row-start: 1;
  /*grid-row-end: 4;*/
}

.container *:not(:first-child) {
  grid-column: 2;
}
<div class="container">
  <div>IMG</div>
  <div>A</div>
  <div>B</div>
  <div>...</div>
  <div>...</div>
  <div>...</div>
  <div>...</div>
  <div>...</div>
  <div>...</div>
</div>

灵感来自https://codepen.io/gc-nomade/pen/pRYPwK

【讨论】:

  • 谢谢。我还找到了 grid-row-end:BIG_NUMBER 的解决方案。这不是一个好的解决方案,我将不得不找到一个不同的解决方案......
  • @LiBorecek 一个不同的解决方案是使用 javascript 来设置正确数量的跨行...你没有使用 javascript 标签,那是你的另一个选择吗?
  • 是的,我使用 javascript 来设置 grid-row-end 值。我只想用 CSS 来解决它。 CSS Grid 布局非常强大,我很惊讶它不能解决这么简单的情况。
  • @LiBorecek un -幸运的是,CSS 并不意味着通过 dom 来重写或更新一些规则。浏览器在渲染 dom 结构及其内容时也会应用与 dom 元素匹配的 CSS 选择器(如果可以/如果有效)。例如,无法选择父级或更新 colspan/rowspan 属性,也无法计算它找到的元素的数量,它可以增加一个计数器(CSS 计数器)但不知道该值并且不能在其他地方重用它。 这是一个典型的 javascript 工作,即使 span all 似乎在规范中严重缺失 ;)
猜你喜欢
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 2011-11-21
  • 2021-05-05
  • 1970-01-01
相关资源
最近更新 更多