section与div的本质区别在于语义有无而非功能强弱:section表明“有主题的内容区块”,需含h1–h6标题;div则明确表示“无语义的通用容器”,适用于纯布局或交互场景。

section 和 div 的本质区别:语义有无,不是功能强弱
它们都能当容器用,都能加 class、设样式、绑事件——功能上几乎没差别。真正区别在于:section 告诉浏览器和开发者“这里是一块有主题的内容”,而 div 什么也没说,纯属“我只是一个盒子”。搜索引擎、阅读器、代码审查工具都靠这个信号做判断。
什么时候必须用 section,而不是 div?
当你这段内容满足以下任意一条,就该用 section:
- 它有明确的主题,且自带一个
<h1>–<h6>标题(比如“产品介绍”“用户评价”) - 它在文档大纲中会独立成一节(用浏览器的“大纲视图”或插件如 HTML5 Outliner 可验证)
- 它可能被单独抽取、复用或 RSS 推送(例如官网首页的“新闻动态”区块)
反例:<div class="dropdown-menu"> 或 <div id="modal-overlay"> —— 这类纯交互/布局容器,没有内容主题,用 div 更准确。
div 不是“过时标签”,而是“精准工具”
很多人误以为 HTML5 推出语义标签后,div 就该淘汰了。其实完全相反:div 是唯一一个**明确声明“此处无语义”** 的标签。它的价值恰恰在于“不说话”。
立即学习“前端免费学习笔记(深入)”;
- 当你只是为某几行文字加个背景色或浮动,不涉及内容结构 → 用
div - 你在写 CSS Grid / Flex 容器,只负责排版不承载主题 → 用
div - 你封装一个 React/Vue 组件的根节点,内部逻辑自洽但对外无语义 → 用
div
强行把所有 div 换成 section,反而会让语义混乱——大纲里冒出一堆“无意义的章节”,阅读器会读得莫名其妙。
容易踩的坑:section 套 section,却没标题
这是最常被忽略的硬性规则:section 必须有标题(<h1>–<h6>),否则它就失去了语义依据。W3C 规范明确指出:“A section without a heading is questionable.”
<!-- ❌ 错误:无标题的 section,语义失效 --> <section> <p>这是一段产品描述</p> </section> <p><!-- ✅ 正确:带标题,语义清晰 --> <section> <h3>核心功能</h3> <p>支持实时同步与离线编辑</p> </section>
如果实在不想显示视觉标题,可用 <h3 class="visually-hidden"> 配合 CSS 隐藏,但不能省略语义标题元素。










