You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

深度嵌套subgrid在不同浏览器中的行为不一致问题咨询

嵌套带内边距Subgrid时的浏览器行为差异与规范解析

当在Grid容器内的带内边距Subgrid中嵌套Subgrid时,不同浏览器出现了行为不一致的情况,以下是各浏览器的显示效果对比:

Chrome/Edge (Windows)Firefox (Windows)Safari MacOS
Chrome/Edge显示效果Firefox显示效果Safari显示效果

对应的代码实现

CSS代码

.grid {
  display: grid;
  grid-template-columns: [fullwidth-start] 100px [col1-start] 1fr [col1-end col2-start] 1fr [col2-end col3-start] 1fr [col3-end] 100px [fullwidth-end];
}
.grid .subgrid {
  display: grid;
  grid-column: fullwidth;
  grid-template-columns: subgrid;
}

.pad {
  padding-inline: 200px;
}

.setgap {
  padding-block: 1em;
  background-color: #def;
  display: grid;
  gap: 1em;
  grid-column: fullwidth;
  grid-template-columns: subgrid;
}

.col1_2 {
  background-color: #edf;
  padding: 1em;
  grid-column: col1-start/span 2;
}

.col3 {
  padding: 1em;
  background-color: #fde;
  grid-column: col3;
}

HTML代码

<div class="grid">
  <div class="subgrid pad">
    Padded content<br><br>
    <div class="setgap subgrid">
      <div class="col1_2">
        <h2>1-2</h2>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Sit doloremque, quae qui excepturi saepe blanditiis eveniet minus incidunt asperiores obcaecati repellat tempora doloribus inventore iure labore, neque soluta at ipsa?</p>
      </div>
      <div class="col3">
        <h3>3</h3>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos ipsa quas a cumque et impedit accusantium maxime, quis delectus molestiae, alias eveniet.</p>
      </div>
    </div> 
  </div>
</div>


<div class="grid">
  <div class="subgrid">
    Non-padded content<br><br>
    <div class="setgap subgrid">
      <div class="col1_2">
        <h2>1-2</h2>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Sit doloremque, quae qui excepturi saepe blanditiis eveniet minus incidunt asperiores obcaecati repellat tempora doloribus inventore iure labore, neque soluta at ipsa?</p>
      </div>
      <div class="col3">
        <h3>3</h3>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos ipsa quas a cumque et impedit accusantium maxime, quis delectus molestiae, alias eveniet.</p>
      </div>
    </div> 
  </div>
</div>

规范解析与正确行为判断

根据CSS Grid Level 2规范,Subgrid的轨道定义是继承自它作为Grid项所在的外层Grid容器,而非直接父级Subgrid的内容区域。

在你的代码中,嵌套的.setgap.subgrid作为Grid项,它所在的Grid容器是最外层的.grid,而非带内边距的.pad.subgrid。因此,嵌套Subgrid应该对齐最外层.grid定义的轨道(包括fullwidth、col1-start等线),不受父级Subgrid内边距的影响。

Chrome/Edge的表现符合这一规范:嵌套Subgrid的内容仍然对齐最外层Grid的原始轨道,父级Subgrid的内边距仅作用于自身的内容区域,不会改变嵌套Subgrid的轨道对齐基准。而Firefox和Safari的处理方式错误地将父级Subgrid的内边距纳入了嵌套Subgrid的轨道计算,导致对齐偏移。

所以,Chrome/Edge的行为是符合规范的正确表现。

内容的提问来源于stack exchange,提问作者yunzen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:08:12