section 表示有主题、带标题的独立内容单元,浏览器和辅助技术将其视为逻辑单元;div 是无语义纯容器,仅用于样式或脚本挂载。
不是“哪个更好用”,而是“浏览器和辅助技术怎么理解它”。div 是纯容器,不带任何含义;section 表示文档中一个有主题的独立部分,必须自带标题(),否则语义失效。–
section 当作一个逻辑单元处理,div 则完全忽略section 不能用于单纯样式分组或 JS 挂载点——那是 div 或 span 的职责section
当该区域满足「主题明确 + 可被单独引用 + 有层级标题」三个条件时,section 才成立。比如文章目录页的每个章节、产品页的「核心功能」「客户案例」「技术参数」区块。
—— 导航栏不是内容主题,用
nav 更准确—— 纯为 JS 控制而设,无语义,应改用
div
兼容性说明
支持 Chrome 90+…
它们不是 div 的替代品,而是分工明确的语义构件:main 表示页面主体内容唯一区域;article 是可独立分发的内容单元(如一篇博客);aside 是与当前内容相关但非核心的补充信息(如侧边栏推荐、术语解释)。
div 依然大量存在:用于包裹 article 内部的样式层、栅格容器、动画 wrapper 等article > div > section 是常见且合理写法,div 在这里只是布局辅助main 有隐式 ARIA 角色(main),但只允许出现一次;多个 main 会导致可访问性工具报错问自己三个问题,按顺序判断:
section;无 → 补标题或改用 div
nav / aside / footer
div,别硬套语义标签语义标签的价值不在“看起来更标准”,而在可访问性、SEO 基础支持和长期维护时的结构自解释性。强行替换 div 反而会让结构更难懂。