用 CSS Grid 实现 H5 活动会场楼层模块化网格,核心是通过 repeat(auto-fit, minmax(260px, 1fr)) 实现列数自适应,配合 aspect-ratio、flex 居中、状态伪元素和 grid-auto-flow: dense 确保语义清晰、视觉对齐与交互友好,并以 @supports 提供 Flex 回退。

用 CSS Grid 实现 H5 活动会场楼层模块化网格,核心是让每个“楼层区域”(如A区、B区、VIP席、通道等)在不同屏幕下自动适配列数与比例,同时保持可点击区块的语义清晰、视觉对齐和交互友好。不靠媒体查询硬切断点,而是用现代 Grid 的自适应能力做结构级响应。
楼层区域按最小单元格动态分列
楼层平面图本质是二维空间划分,适合用 grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)) 控制横向布局:
- 260px 是单个展位/区域卡片的最小可读宽度(兼顾手机横屏与小平板)
-
auto-fit确保空列自动收起,避免小屏出现极窄列或错位 - 配合
gap: 1rem(推荐 rem,适配高 DPR 屏),保证区域之间呼吸感 - 容器本身设
width: 100%且祖先元素无max-width或overflow-x: hidden干扰计算宽度
每个楼层区块保持比例与点击热区稳定
会场模块常含不同形状区域(方形展位、长条通道、L形休息区),需统一视觉基线:
- 给每个楼层区块(如
.zone-a)设aspect-ratio: 4 / 3或按设计稿设定(如 VIP 区用16 / 9) - 内部内容(文字标签、图标、状态徽章)用
display: flex; flex-direction: column; justify-content: center; align-items: center居中定位 - 禁用
width/height固定值,所有尺寸用rem或%,字体随视口缩放(如配合vw或rem动态根字号) - 点击区域包裹层加
cursor: pointer和min-width: 0,防文本撑宽导致网格错行
多楼层切换与状态可视化集成
活动会场常含 1F / 2F / B1 等多层,Grid 可配合状态驱动实现平滑切换:
- 各楼层数据用独立
section包裹,通过display: none或visibility: hidden控制显隐(避免 DOM 重排) - 当前楼层容器加
grid-auto-flow: dense,允许小区域(如楼梯口、电梯)自动填入空隙,提升空间利用率 - 已预约/已售罄/施工中等状态,用伪元素
::after叠加角标,不破坏 Grid 轨道结构 - 选中某区域时,用
outline: 2px solid #ff6b35+outline-offset: 4px高亮,不改变布局流
兼容性与降级处理要点
部分低端安卓 WebView 或旧版 iOS Safari 对 Grid 支持有限,需轻量兜底:
- 基础样式保留
display: flex; flex-wrap: wrap作为 fallback,确保仍为流式排列 - 用
@supports (display: grid)包裹 Grid 专属规则,避免覆盖 Flex 样式 - 关键交互按钮(如“导航到A区”)始终脱离 Grid 容器单独定位,保障可触达性
- 所有颜色、间距、圆角使用 CSS 自定义属性(
--zone-bg,--gap-sm),便于主题切换与 A/B 测试


















