摘要是对论文内容不加注释和评论的简短陈述,须扼要说明研究目的、方法、结果与结论,重点在结论,具有独立性与完整性,字数通常为200–300字,适用于检索、审稿与快速获取核心信息。

为什么<main></main>不能嵌套在<header></header>或<nav></nav>里
浏览器和辅助技术(比如屏幕阅读器)把<main></main>识别为“整页唯一主内容入口”,一旦它被包进导航或页眉,语义就坍缩成“某个局部的主内容”——这既违反规范,也导致语音朗读时跳过真正主体。实际项目中常见错误是:把整个页面用<div class="wrapper">包住,再在里面写<code><header><nav>…</nav></header><main>…</main>,看起来没问题,但若<main></main>外层意外加了display: none或aria-hidden="true",内容就彻底不可访问。
正确做法只有一条:<main></main>必须是的直接子元素,或至少确保其父容器没有隐藏、禁用或语义污染行为。
<article></article>和<section></section>到底怎么选
判断依据不是“要不要加边框”或“有没有标题”,而是内容能否独立存在、是否可被聚合分发:
立即学习“前端免费学习笔记(深入)”;
-
<article></article>:博客正文、新闻稿、用户评论、论坛帖子——复制整段 HTML 到 RSS 阅读器或另一个网站,依然成立 -
<section></section>:产品介绍区、FAQ 列表、用户评价汇总——它依赖上下文,单独拎出来语义不完整 - 一个
<article></article>内部可以嵌套多个<section></section>(如长文分章节),但<section></section>里不应塞进另一篇完整文章 - 没标题的
<section></section>是无效语义:搜索引擎和屏幕阅读器会忽略它,CSS 选择器section:not(:has(h1, h2, h3))能帮你批量检测
<time></time>不写datetime就等于没写
<time>2025-06-05</time>对机器来说只是四个汉字;只有加上datetime属性,才具备结构化时间语义:
<time datetime="2025-06-05T14:30">今天下午2:30</time>
这个值会被日历应用识别、被爬虫提取用于时效性排序、被语音助手读作“六月五日下午两点三十分”。漏掉datetime,<time></time>退化为纯视觉标签,和<span class="date"></span>没区别。
注意点:
- 日期格式必须符合 ISO 8601(
YYYY-MM-DD),带时区更佳(2025-06-05T14:30+08:00) - 不要用中文写年月日,如
<time datetime="二零二五年六月五日">完全无效 - 动态生成时,后端模板或 JS 必须输出合法值,否则前端补 CSS 也救不回语义
IE9 兼容不是加document.createElement就完事
仅靠 JS 创建语义标签,只能让 IE9 认得这些标签名,但默认仍当行内元素处理——<header></header>设width: 100%无效,<main></main>加margin-top不生效,布局全乱。
必须配合以下两步:
- CSS 全局重置:
header, nav, main, section, article, aside, footer { display: block; } - HTML 开头加
<meta http-equiv="X-UA-Compatible" content="IE=edge">,否则 IE9 可能降级到 IE7 模式渲染
如果项目还要支持 IE8,就得放弃原生语义标签,改用role属性模拟(如<div role="main">),因为 IE8 连document.createElement都不可靠。
语义化最难的不是记住标签名,而是每次写<div>前,多问一句:“这个容器,有没有不可替代的含义?” —— 答案是“没有”,那就继续用<div>;答案是“有”,就得翻规范确认该用<article></article>还是<section></section>,而不是凭感觉套个 class。



















