先记住这个答案
一篇博客、一条可独立阅读的新闻或评论,适合用 <article>;一篇文章里的“原因”“示例”等主题区域,适合用 <section>。判断方法是:把这块内容单独拿走,它还能以自己的标题、上下文成立吗?能,通常偏向 article;只是当前文档的一个主题分段,通常偏向 section。若只是为了挂 CSS 类名包一层,没有主题语义,用 <div> 即可。
<article>表示独立成篇内容<section>表示有主题的分区- 文章内可包含多个 section
- 纯样式容器通常用
<div>
博客列表与文章正文
首页展示多篇文章摘要,每个摘要都指向一篇完整作品,可以把每张卡视作独立内容。进入文章页后,正文里的不同主题再按章节分区。
<article>
<h2>图片为什么会影响首屏速度?</h2>
<section>
<h3>资源选择</h3>
<p>先按实际显示尺寸选择候选图片。</p>
</section>
</article>这里 <article> 脱离列表仍有标题和主题;内部 <section> 只说明这篇文章中的一个部分。语义元素可以嵌套,不存在“用了 article 就不能再用 section”的规则。
页面中也可以有多个 article,例如帖子下的独立评论。反过来,一个 section 可以收纳一组相关 article,比如“最新文章”。要按实际内容关系判断。
标题和边界要说得清
分区最好有能说明主题的标题,让读者和辅助技术知道这一块为何存在。只有一层背景色、圆角或间距的包装层,不会因为写成 <section> 就获得有意义的结构。
<article> 也应有可识别标题。不要因为 SEO 口号而机械地把每张小组件都写成 article;独立可复用性和内容完整性才是判断依据。
一个博客首页可以有多个独立的 <article>:每张文章卡片即使脱离列表,标题、摘要和链接仍能独立理解。文章详情页里“性能测试方法”“结果分析”这样的有标题章节适合用 <section>;仅为了加背景色或控制间距的包装层用 <div> 即可。<section> 不是给任意盒子增添高级语义的装饰,缺少可识别标题时常没有明确的文档结构价值。
容易答错的地方
- 把所有带边框的盒子都写成
<section> - 视觉分组不等于文档主题。没有明确主题的容器用
<div>更合适。 - 认为 article 与 section 互斥
- 文章可包含多个主题分区,分区也可以组织多篇独立文章。
面试官还会怎么问?
用户评论能用 <article> 吗?
如果评论本身可独立引用、分享和阅读,可以;简短装饰文本则未必需要。
页面主体与文章怎么区分?
<main> 标识当前页面主要内容,里面可以是一篇或多篇 <article>。
一个 section 一定要有标题吗?
通常应有可识别主题和标题;若无法说明主题,先考虑是否只是样式容器。
参考资料
示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。