【问题标题】:css grid with nested div structure [duplicate]具有嵌套div结构的css网格[重复]
【发布时间】:2018-06-21 19:06:57
【问题描述】:

我尝试构建一个 CSS Grid,其中一些条目嵌套在 div 结构中:

这样就可以了:

.wrapper {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-gap: 10px;
  grid-template-rows: 1;
}

.cent {
  grid-column: 2;
  grid-row: 1;
}

.left {
  grid-column: 1;
  grid-row: 1;
}

.right {
  grid-column: 3;
  grid-row: 1;
}
<div class="wrapper">
  <div class="cent">center</div>
  <div class="left">left</div>
  <div class="right">right</div>
</div>

但是如果我开始嵌套我的结构,我将无法访问我想要的列:

.wrapper {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-gap: 10px;
  grid-template-rows: 1;
}

.cent {
  grid-column: 2;
  grid-row: 1;
}

.left {
  grid-column: 1;
  grid-row: 1;
}

.right {
  grid-column: 3;
  grid-row: 1;
}
<div class="wrapper">
  <div class="cent">center</div>
  <div>
    <!-- in reality there would be more divs and rows, I already have problems with one -->
    <div class="left">left</div>
    <div class="right">right</div>
  </div>
</div>

有人可以告诉我如何使用嵌套结构实现网格吗?还是我有一个完全错误的方法? (不幸的是,在代码中更改元素的顺序和结构会非常耗时)

【问题讨论】:

    标签: html css css-grid


    【解决方案1】:

    嵌套网格是可能的,但请确保最内层 div 的父级本身确实具有display:grid。如果你不这样做,

    由于这些项目不是网格的直接子项,它们不参与网格布局,因此显示在正常的文档流中。

    (来自MDN: Basic concepts of grid layout。)

    所以您需要做的就是将这些样式分配给 leftright div 的父级。

    .wrapper {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      grid-gap: 10px;
      grid-template-rows: 1;
    }
    
    .cent {
      grid-column: 2;
      grid-row: 1;
    }
    
    .cent + div {   /* this works for now, but you should choose a better selector for this one */
      display: grid;
      grid-column: 1 / 4;
      grid-row: 1;
    }
    
    .left {
      grid-column: 1;
      grid-row: 1;
    }
    
    .right {
      grid-column: 3;
      grid-row: 1;
    }
    <div class="wrapper">
      <div class="cent">center</div>
      <div>
        <!-- in reality there would be more divs and rows, I already have problems with one -->
        <div class="left">left</div>
        <div class="right">right</div>
      </div>
    </div>

    【讨论】:

    • 一般来说使用这种嵌套网格是个好主意吗?例如,如果我正在尝试构建一个可以包含数百行的表,并且每一行都将是一个包含列列表的嵌套网格。是潜在的性能问题吗?
    • @LiauchukIvan 我认为这更多地取决于数据量而不是网格的嵌套。我的意思是,即使没有嵌套,数百行也可能是性能问题!您可能需要进行一些测试。
    • 很遗憾,答案不正确。因为它不允许从父级“访问”轨道。它只是随机地“足够接近”,如果您检查布局调试器,它们不会。允许传递模板定义的实际功能称为subgrids,迄今为止仅在 Firefox 中可用。
    • @Andrey 你能发布一个答案来证明你的评论,即使它只在 FF 中有效?
    猜你喜欢
    • 2021-06-26
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2022-01-24
    • 2022-11-15
    • 2015-03-25
    • 1970-01-01
    • 2021-12-02
    相关资源
    最近更新 更多