纯静态周历可用HTML+CSS实现:用table结构,th标记星期,td内嵌time和ul事件列表,配合table-layout:fixed与等宽列控制布局,语义化标签确保无障碍与打印友好。

用纯 HTML + CSS 实现周历,别碰 JavaScript 就能跑起来
纯静态周历完全可行,关键是把“周一到周日”和“日期+事件”拆成两层结构:表格行控制星期,单元格内用 <time> 标记日期、<ul> 列事件。不需要 JS 渲染,也不依赖任何框架——只要知道当前周的起止日期(比如 2024-06-10 到 2024-06-16),就能手写或服务端生成。
常见错误是硬编码 <tr> 套死七天,结果跨月时日期错位;或者把事件塞进 data-* 属性里却忘了显式渲染——HTML 本身不解析这些属性,必须靠 JS 才能读取,这就违背了“纯静态”前提。
- 用
<table>是最稳妥选择,语义清晰、屏幕阅读器友好、打印样式稳定 - 表头用
<th scope="col">明确标识星期几,避免<td>混用 - 每列第一行放日期(如
<time datetime="2024-06-10">6/10</time>),后续行放事件项 - 如果某天没事件,留空
<td></td>,别塞或占位符
CSS 控制周历宽度和对齐,别让文字挤成一团
默认表格会随内容撑开,导致周历在小屏上横向滚动——这不是预期行为。必须限制整体宽度,并让日期列等宽。
- 给
<table>设width: 100%和table-layout: fixed,强制列宽均分 - 给每个
<th>和<td>设width: 14.2857%(≈100% ÷ 7),避免浏览器自动计算偏差 - 日期文字用
font-size: 0.9em+line-height: 1.2,防止换行切字 - 事件列表用
margin: 0; padding: 0.25em 0 0;,去掉默认间距,紧凑堆叠
注意:不要对 <td> 设 white-space: nowrap,否则长事件名会撑破列宽;改用 text-overflow: ellipsis 配合 overflow: hidden 和 max-width 更可控。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
立即学习“前端免费学习笔记(深入)”;
填充真实日程数据时,用语义化标签替代 div 堆砌
很多人用一堆 <div class="event"> 塞事件,结果搜索、打印、无障碍访问全出问题。HTML5 提供了更合适的标记方式。
- 用
<time datetime="2024-06-10T14:00">14:00</time>标记时间点,比纯文本“下午2点”更可靠 - 事件主体用
<strong>包标题(如会议主题),普通文本描述放外面,不用额外 class - 重要日程加
aria-label="今日有团队站会,14:00-14:30",辅助技术可读,不影响视觉 - 避免嵌套
<div><p><span>多层包装,单个<li>足够承载一条日程
示例片段:
<td>
<time datetime="2024-06-10">6/10</time>
<ul>
<li><time datetime="2024-06-10T09:30">09:30</time> <strong>需求评审</strong></li>
<li><time datetime="2024-06-10T16:00">16:00</time> 同步接口文档</li>
</ul>
</td>
打印或导出 PDF 时日期错位?检查 media query 和字体继承
网页上看正常,一按 Ctrl+P 就日期偏移、事件重叠——大概率是打印样式未重置,或字体在无衬线环境下渲染异常。
- 加
@media print { table { font-size: 10pt; } },避免浏览器缩放干扰 - 为
<time>单独设font-family: "Segoe UI", system-ui, sans-serif;,防止打印时 fallback 到等宽字体拉宽单元格 - 删掉所有
background-color和阴影,PDF 打印机通常忽略或转成灰度,反而影响可读性 - 测试前先用 Chrome 的“另存为 PDF”,比直接打印机驱动更接近最终效果
真正难处理的是跨周日程(比如一个会议从周五持续到周一),纯 HTML 表格无法原生合并单元格横跨多列——这种必须拆成每日条目,或改用 JS 动态渲染。静态方案只适合单日独立事件。


















