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

CSS Grid布局元素显示顺序不符合预期问题咨询

CSS Grid布局元素显示顺序异常问题分析

我在使用CSS Grid布局时遇到元素显示顺序异常问题,第二个class为main、文本为「Main 1/3」的div显示顺序不符合预期。

HTML结构

<div class="container">
  <div class="block top">Top</div>
  <div class="block main">Main 1/3</div>
  <div class="block main">Main 2/3</div>
  <div class="block bottom">Bottom</div>
</div>

SCSS代码

.container{
  height: 100%;
  display: grid;
  grid-template-rows: min-content 1fr min-content;
  grid-template-columns: repeat(3, 1fr); 
  grid-gap: 8px;
}
.top{
  grid-row: 1;
  grid-column: 1 / -1;
}
.bottom{
  grid-row: 3;
  grid-column: 1 / -1;
}
.main{
  grid-row: 2;
  grid-column: 1 / 2;
      
  &:nth-child(2){
    grid-column: 2 / 4;
  }
}
.block{
  padding: 8px;;
  background: lightgrey;
  border: 1px solid red;
}

异常显示效果

布局显示异常截图

问题原因

问题出在:nth-child(2)选择器的逻辑上:

  • 父容器的子元素顺序是:.top(第1个)、第一个.main(第2个)、第二个.main(第3个)、.bottom(第4个)。
  • 代码里的.main:nth-child(2)选中的是父容器中第2个子元素,也就是文本为「Main 1/3」的那个.main,给它设置了grid-column: 2 / 4,让它占据右侧两列;而第二个.main是父容器的第3个子元素,没被这个选择器命中,所以用了.main默认的grid-column: 1 / 2,最终导致两个.main的位置颠倒。

解决方法

有两种常用修复方式:

  1. 使用:nth-of-type()选择器,针对.main元素自身的顺序来匹配:
.main{
  grid-row: 2;
  grid-column: 1 / 2;
      
  &:nth-of-type(2){
    grid-column: 2 / 4;
  }
}
  1. 给第二个.main单独添加类名(比如main--wide),通过类直接指定网格位置:
<div class="block main main--wide">Main 2/3</div>
.main--wide{
  grid-column: 2 / 4;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:36:25