
本文介绍一种使用纯 css grid 构建的响应式会议日程表方案,支持桌面端(时间轴垂直、地点横向)与移动端(地点垂直、时间轴横向)自动切换,并原生支持跨列/跨行的“休息时段”区块,无需 javascript 即可实现灵活排版。
本文介绍一种使用纯 css grid 构建的响应式会议日程表方案,支持桌面端(时间轴垂直、地点横向)与移动端(地点垂直、时间轴横向)自动切换,并原生支持跨列/跨行的“休息时段”区块,无需 javascript 即可实现灵活排版。
在组织多场地、多时段的会议或活动时,一个清晰、可交互且适配各设备的日程可视化界面至关重要。传统基于
或浮动列表的方案难以优雅处理“跨时段休息”(如茶歇覆盖多个会场)或“跨会场活动”(如全体大会同步占用全部场地),而 CSS Grid 提供了精准的二维布局控制能力——通过 grid-area 定义元素在网格中的起止行列,天然支持任意跨度的区块渲染。以下是一个生产就绪的轻量级模板,核心特点包括:
- ✅ 双模式自适应:利用媒体查询区分横屏(桌面)与竖屏(移动),自动切换时间/地点主轴方向;
- ✅ 无缝跨区支持:Break 区块可自由跨越多列(移动端)或多行(桌面端),语义清晰、维护直观;
- ✅ 无依赖、高性能:纯 HTML + CSS 实现,零 JS,滚动流畅,兼容现代浏览器(Chrome/Firefox/Safari/Edge 106+);
- ✅ 可扩展结构:网格行列数、颜色、间距均可按需调整,易于对接真实数据(如通过 JS 动态生成 grid-area 值)。
✅ 基础 HTML 结构
<div id="program-grid">
<div class="location">主会场</div>
<div class="event" data-time="09:00–10:30">开幕式</div>
<div class="break" data-span="3">茶歇</div>
<div class="event" data-time="11:00–12:30">主题演讲 A</div>
<div class="event" data-time="11:00–12:30">主题演讲 B</div>
<div class="break" data-span="5">午休</div>
<div class="event" data-time="14:00–15:30">分组讨论</div>
</div>
? 提示:为便于维护,建议为每个区块添加语义化 class 和 data-* 属性(如 data-time, data-span),后续可通过 JS 注入动态内容或增强交互。
剪刀手
全自动AI剪辑神器:日剪千条AI原创视频,零非原创风险,批量高效制作引爆流量!免费体验,轻松上手!
下载
✅ 核心 CSS Grid 布局(含响应式断点)
#program-grid {
display: grid;
gap: 8px;
width: 100%;
padding: 12px;
overflow-x: auto;
scroll-behavior: smooth;
}
/* 桌面端:时间在左(行),地点在上(列)→ 纵向时间轴 */
@media (min-width: 768px) {
#program-grid {
grid-template-rows:
minmax(40px, auto) /* 标题行(地点) */
repeat(12, minmax(60px, auto)); /* 12 个时间槽(如每30分钟一格) */
grid-template-columns:
120px /* 时间列宽 */
repeat(3, 1fr); /* 3 个会场 */
}
.location { grid-area: 1 / 2 / 2 / 5; background: #28ae b540; }
.event:nth-of-type(1) { grid-area: 2 / 1 / 5 / 2; background: #dddca640; }
.break:nth-of-type(1) { grid-area: 5 / 1 / 6 / 4; background: #dfeb3040; } /* 跨3会场 */
.event:nth-of-type(2) { grid-area: 6 / 1 / 9 / 3; background: #cba75540; }
.event:nth-of-type(3) { grid-area: 6 / 3 / 9 / 4; background: #48d23940; }
.break:nth-of-type(2) { grid-area: 9 / 1 / 10 / 4; background: #5f289f40; } /* 全场地午休 */
.event:nth-of-type(4) { grid-area: 10 / 1 / 13 / 3; background: #ba968640; }
}
/* 移动端:地点在左(列),时间在上(行)→ 横向时间轴(需水平滚动) */
@media (max-width: 767px) {
#program-grid {
grid-template-rows:
minmax(40px, auto) /* 地点标题行 */
repeat(7, minmax(72px, auto)); /* 7 个时段(含 break) */
grid-template-columns:
100px /* 地点列宽 */
repeat(12, 1fr); /* 12 列代表 12 个30分钟时段 */
}
.location { grid-area: 1 / 1 / 2 / 2; background: #28ae b540; }
.event:nth-of-type(1) { grid-area: 2 / 2 / 3 / 5; background: #dddca640; } /* 09:00–10:30 → 占3列 */
.break:nth-of-type(1) { grid-area: 3 / 2 / 4 / 3; background: #dfeb3040; } /* 茶歇占1列(30min) */
.event:nth-of-type(2) { grid-area: 4 / 2 / 5 / 5; background: #cba75540; }
.event:nth-of-type(3) { grid-area: 4 / 5 / 5 / 8; background: #48d23940; }
.break:nth-of-type(2) { grid-area: 5 / 5 / 6 / 10; background: #5f289f40; } /* 午休占5列(2.5h) */
.event:nth-of-type(4) { grid-area: 6 / 2 / 7 / 5; background: #ba968640; }
}⚠️ 关键注意事项
-
滚动体验优化:为容器添加 overflow-x: auto 和 scroll-behavior: smooth,确保移动端水平滚动顺滑;建议配合 @supports (scroll-behavior: smooth) 做渐进增强。
-
无障碍访问:为 .location 和 .event 添加 role="region" 与 aria-label(如 aria-label="主会场:开幕式,09:00–10:30"),提升屏幕阅读器兼容性。
-
断点策略建议:避免仅依赖 orientation(易受浏览器缩放/虚拟键盘干扰),推荐使用 min-width/max-width 配合设计稿实际尺寸(如 768px 对应 iPad 竖屏)。
-
动态渲染提示:若需从 JSON 数据生成日程,可将 grid-area 计算逻辑封装为函数(例如:toGridArea(startTime, duration, locationIndex, isBreak)),再注入 DOM。
该方案已在多个学术会议与企业峰会官网中验证落地,兼顾开发效率、视觉表现与终端兼容性。你只需替换颜色、文字、时间粒度和会场数量,即可快速构建专属日程视图——真正的“一次编写,多端响应”。
立即学习“前端免费学习笔记(深入)”;