HTML5中只有14个void elements(area、base、br、col、embed、hr、img、input、link、meta、param、source、track、wbr),它们语法上禁止写/或结束标签;<img>等必须写成无斜杠形式,<textarea>等normal elements则必须成对闭合,否则导致DOM错乱。

HTML里没有“自闭合标签”这个概念,只有「void elements(空元素)」——它们语法上禁止写/、也禁止写结束标签,写了就是违反规范。
哪些标签属于 void elements 且必须不写/
HTML5 明确列出 14 个 void elements: area、base、br、col、embed、hr、img、input、link、meta、param、source、track、wbr。这些标签:
- 不能有子节点,也不能包裹任何内容(包括空格、换行、注释)
-
<img src="a.jpg">是唯一符合 HTML5 规范的写法 -
<img src="a.jpg" />虽被浏览器容错接受,但属于 XHTML 风格,不是 HTML5 推荐形式 -
<img src="a.jpg"></img>是非法的:浏览器会忽略</img>,后续 HTML 可能被错误地嵌套进img节点中
<textarea>、<select>、<script> 为什么不能写成自闭合
它们不是 void elements,而是 normal elements —— 即使内容为空,语义和 DOM 行为也依赖开始与结束标签之间的结构。
-
<textarea>默认值</textarea>的value初始为"默认值";写成<textarea />后,value永远是空字符串,placeholder也不生效 -
<select><option value="a">A</option></select>才能渲染选项;<select />会让所有<option>被丢弃或解析失败 -
<script src="a.js"></script>是唯一可靠写法;<script src="a.js" />会导致脚本完全不执行
斜杠写法<img /> vs <img> 的实际影响
两者在浏览器渲染层面无差别,但差异体现在工具链和协作场景中:
立即学习“前端免费学习笔记(深入)”;
- HTML5 规范明确允许
<img>(不带/)作为标准写法,更轻量、更常见 -
<img />属于 polyglot HTML(兼顾 HTML 和 XML 解析器)风格,在某些构建工具、校验器或 SSR 框架中可能触发警告 -
<img / >(斜杠前有空格)是无效语法,部分 linter 会直接报错 - 团队若混用两种风格,容易引发代码审查分歧,建议统一采用
<img>形式
最容易被忽略的是:浏览器的容错能力掩盖了语法错误,但 DOM 结构错乱、JS 获取不到预期节点、SEO 工具解析失败等问题,往往在上线后才暴露。写对 void elements,不是为了“看起来规范”,而是避免不可见的解析陷阱。



















