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

如何使用HTML与CSS实现固定3×3网格 剩余元素右侧滚动展示

3×3固定网格+右侧滚动列表实现方案

实现思路

把原有单网格容器拆为左右两个独立区块:

  • 左侧为固定规格网格区,永远只展示前9个元素,不受屏幕尺寸变化影响
  • 右侧为独立滚动区,放置第10个及之后的所有元素,内容溢出时展示纵向滚动条

原有代码里的auto-fill+minmax列规则会随容器宽度自动调整列数,没法保证永远3列,需要替换成固定行列的网格配置。

完整代码

CSS样式

/* 外层全局容器,控制左右区块并排 */
.page-wrap {
  display: flex;
  gap: 10px;
  height: 100vh;
  padding: 10px;
  margin: 0;
  box-sizing: border-box;
}

/* 左侧3×3固定网格 */
.fixed-grid {
  flex: 1;
  display: grid;
  /* 强制固定3列等宽 */
  grid-template-columns: repeat(3, 1fr);
  /* 强制固定3行等高 */
  grid-template-rows: repeat(3, 1fr);
  gap: 5px;
  /* 超出9个的内容直接隐藏,保证网格布局不被撑坏 */
  overflow: hidden;
}

/* 右侧可滚动列表区 */
.scroll-panel {
  width: 170px;
  display: flex;
  flex-direction: column;
  gap: 5px;
  /* 内容超出时触发纵向滚动 */
  overflow-y: auto;
}

/* 通用卡片样式 */
.card {
  background-color: dodgerblue;
  color: white;
  padding: 1rem;
  height: 4rem;
  display: flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
}

HTML结构

<div class="page-wrap">
  <!-- 左侧网格区:仅放前9个元素 -->
  <div class="fixed-grid">
    <div class="card">ONE</div>
    <div class="card">TWO</div>
    <div class="card">THREE</div>
    <div class="card">FOUR</div>
    <div class="card">FIVE</div>
    <div class="card">SIX</div>
    <div class="card">SEVEN</div>
    <div class="card">EIGHT</div>
    <div class="card">NINE</div>
  </div>
  <!-- 右侧滚动区:放剩余所有元素 -->
  <div class="scroll-panel">
    <div class="card">TEN</div>
    <div class="card">ELEVEN</div>
    <div class="card">TWELVE</div>
    <!-- 剩余元素按顺序追加在此处即可,总计20个元素时这里放11个 -->
  </div>
</div>

效果说明

  • 左侧网格始终保持3行×3列的布局,窗口尺寸变化时只会调整网格整体大小,不会改变行列数,永远只展示9个元素
  • 右侧滚动区宽度固定,卡片纵向排列,元素过多时自动出现滚动条,不会挤占左侧网格空间
  • 这种手动拆分DOM的写法兼容性最好,不需要复杂的CSS选择器控制元素位置,后续维护调整也更方便。

内容的提问来源于stack exchange,提问作者Apurba HR Mondal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:15:42