教育网站HTML布局须用语义标签+流式控制:课程模块用带标题的<section>,时间用<time datetime>,导航用带aria-label的<nav>(限2–3个),主结构用grid、内部对齐用flex。
教育网站的 HTML 布局不是“怎么堆元素”,而是「用对语义标签 + 控制好容器流式行为」。错用 <div> 套一层再加 class,或硬塞 <table> 排课程表,会导致结构不可读、屏幕阅读器失效、响应式改起来像拆炸弹。
<section> 包裹,且带标题每门课(含标题、简介、时间、教师、报名按钮)是一个独立主题单元,<section> 是唯一符合语义的标签。用 <div class="course-item"> 看似一样,但搜索引擎和读屏软件无法识别其内容边界。
<section> 内必须有 <h2>~<h6>,不能空着;没有标题就不是“节”<section>,但层级别超两层<section>,也别把单个时间点单独抽成 <section>
<section><p>Python 入门</p></section> → 缺标题,语义断裂<time datetime> 标记纯文本“每周三 19:00–20:30”对机器毫无意义。搜索引擎、日历工具、语音助手依赖 datetime 属性提取结构化时间。
<time datetime="T19:00">19:00</time>–<time datetime="T20:30">20:30</time>
<time datetime="2026-05-10">5月10日</time>
<time datetime="P8W">8周</time>
<p>开课时间:2026-05-10</p> → 无 datetime,不被解析为日期<nav>,但限 2–3 个且带 aria-label
顶部课程类别栏(如“编程|设计|语言”)或侧边难度筛选(“入门|实战”)属于站点级导航,该用 <nav>。但滥用会污染辅助技术上下文。
立即学习“前端免费学习笔记(深入)”;
<nav>,每个必须加 aria-label 区分用途,例如:<nav aria-label="课程分类导航">
<nav> 场景,后者应放在 <footer> 或用更轻量方式处理<nav> 内,不能动态移出display: grid 划区域,内部用 display: flex 对齐教育网站常见结构是 header + nav + main(课程列表)+ aside(侧边筛选)+ footer,Grid 天然适合这种二维划分;而课程卡片内按钮组、讲师头像+姓名排列,则用 Flex 更自然。
display: grid,用 grid-template-columns 和 grid-template-rows 定义骨架,比 grid-template-areas 更易维护grid-area 却忘了父容器没设 display: grid —— 这是最常发生的“完全没效果”原因display: flex 对齐按钮或讲师信息,注意加 min-width: 0 防止长 URL 撑破容器最容易被忽略的是:语义标签不是“锦上添花”,而是布局生效的前提。比如 <main> 的存在会影响某些 screen reader 的跳转逻辑,<time datetime> 缺失会让课程日历集成直接失败——这些都不是样式问题,而是结构契约。