求基于Grid的响应式活动日程表模板(支持跨列休息块)
响应式跨列日程表(Grid实现)
以下是基于CSS Grid实现的符合需求的日程表模板,完美支持跨列休息块、响应式布局切换:
HTML 结构
<div class="schedule-container"> <!-- 时间轴区域 --> <div class="time-column"> <div class="time-slot">09:00</div> <div class="time-slot">09:30</div> <div class="time-slot">10:00</div> <div class="time-slot">10:30</div> <div class="time-slot">11:00</div> <div class="time-slot">11:30</div> <div class="time-slot">12:00</div> <div class="time-slot">12:30</div> <div class="time-slot">13:00</div> <div class="time-slot">13:30</div> <div class="time-slot">14:00</div> </div> <!-- 场地与日程内容区域 --> <div class="schedule-content"> <!-- 场地标题行 --> <div class="venue-row"> <div class="venue">场地A</div> <div class="venue">场地B</div> <div class="venue">场地C</div> </div> <!-- 日程网格 --> <div class="schedule-grid"> <!-- 普通活动项 --> <div class="event" style="grid-row: 1 / 3; grid-column: 1;">活动A1</div> <div class="event" style="grid-row: 1 / 2; grid-column: 2;">活动B1</div> <div class="event" style="grid-row: 2 / 4; grid-column: 2;">活动B2</div> <div class="event" style="grid-row: 1 / 4; grid-column: 3;">活动C1</div> <!-- 跨列休息块 --> <div class="event break" style="grid-row: 3 / 5; grid-column: 1 / 4;">茶歇时间</div> <div class="event" style="grid-row: 5 / 7; grid-column: 1;">活动A2</div> <div class="event" style="grid-row: 5 / 6; grid-column: 2;">活动B3</div> <div class="event" style="grid-row: 6 / 8; grid-column: 3;">活动C2</div> <div class="event break" style="grid-row: 7 / 9; grid-column: 1 / 4;">午餐休息</div> <div class="event" style="grid-row: 9 / 11; grid-column: 1;">活动A3</div> <div class="event" style="grid-row: 9 / 11; grid-column: 2;">活动B4</div> <div class="event" style="grid-row: 9 / 10; grid-column: 3;">活动C3</div> </div> </div> </div>
CSS 样式
/* 基础样式重置 */ * { margin: 0; padding: 0; box-sizing: border-box; font-family: sans-serif; } .schedule-container { display: flex; margin: 2rem; gap: 1rem; } /* 时间轴样式 */ .time-column { display: flex; flex-direction: column; gap: 2rem; padding-right: 1rem; text-align: right; } .time-slot { height: 2rem; line-height: 2rem; color: #666; } /* 内容区域容器 */ .schedule-content { flex: 1; min-width: 0; } .venue-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: #eee; } .venue { padding: 0.5rem; text-align: center; background: #fff; font-weight: bold; } /* 核心日程网格 */ .schedule-grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-auto-rows: 2rem; gap: 1px; background: #eee; margin-top: 0.5rem; } .event { background: #4285f4; color: #fff; padding: 0.25rem; overflow: hidden; display: flex; align-items: center; padding-left: 0.5rem; } .event.break { background: #fbbc05; color: #333; font-weight: bold; justify-content: center; } /* 移动端响应式调整 */ @media (max-width: 768px) { .schedule-container { flex-direction: column; overflow-x: auto; } .time-column { flex-direction: row; padding-right: 0; padding-bottom: 1rem; text-align: center; } .schedule-content { min-width: 600px; /* 保证横向滚动空间 */ } }
关键特性说明
- 跨列实现:通过
grid-column: 1 / 4直接让休息块占据3个场地列,完美解决列表结构无法跨列的问题 - 响应式切换:
- 桌面端:时间轴在左侧固定,场地标题在顶部,日程内容按网格排列
- 移动端:时间轴切换为横向排列在顶部,场地列保持纵向,整个容器支持横向滚动
- 灵活布局:通过
grid-row控制活动的时间跨度,grid-template-columns定义场地数量,可根据实际场地数调整repeat(3, 1fr)中的数字
内容的提问来源于stack exchange,提问作者debachl23
相关产品推荐
相关产品推荐

