article 表示可独立分发、引用、订阅的内容单元,如博客正文、新闻、评论;section 仅是文档内部逻辑分块,如“产品特性”,不构成完整信息单元。
区别不在嵌套规则或外观表现,而在内容是否具备「独立分发」能力。article 表示能脱离当前页面被单独引用、重用、订阅的内容单元,比如一篇博客正文、一条新闻、一个用户评论;section 只是文档内部的逻辑分块,比如“产品特性”“用户反馈”“技术参数”这些为组织内容服务的区块,本身不构成完整信息单元。
常见误用现象:
– 把整页导航栏、页脚包裹进 section(应直接用 nav / footer)
– 把带标题的列表项强行套 article(如“热门标签”列表里的每个标签不是独立内容)
– 在 article 内部又用 section 做小节划分(这完全合理,且推荐)
HTML4 没有语义化区块元素,开发者只能靠 div + class 名模拟,比如:
标题
正文...
小节标题
内容...
但仅靠 class 不会被屏幕阅读器或搜索引擎识别为内容结构,也无法触发现代浏览器的语义化解析行为(如自动生成大纲、辅助导航)。若需兼容旧环境又想保留语义,可配合 ARIA 属性临时补救:
role="article" 加在 div 上,部分读屏软件可识别role="region" 或 aria-labelledby 可替代 section 的作用,但不如原生语义可靠判断依
据只有一个:这个内容块能否被 RSS 订阅、被第三方聚合、被单独 URL 引用。满足就用 article,否则优先考虑 section 或更具体的语义元素(如 aside、nav)。
article
article 应包裹在 main 或 section 中(例如“最新文章列表”本身是 section,里面每篇是 article)section,每条评论是 article(因每条评论可被单独引用、回复、转发)article 内部可包含 header、footer、section,但不能把 article 当作样式容器滥用article 和 section 在 IE8 及更早版本完全不识别,连基本样式支持都没有;IE9+ 开始支持,但不支持其语义化行为(如大纲生成)。不过,只要不依赖 CSS 选择器 article 或 JS 查询 document.querySelector('article'),降级到 div 并加 class 是安全的。
真正的影响在可访问性与 SEO:
article 的 header h1 作为摘要标题article 自动添加 itemprop 微数据如果项目必须支持 IE8,别硬套 HTML5 语义——先确保功能可用,再通过 Modernizr 或条件注释渐进增强。