html5中空元素共14个,包括、、、、、、、、、、、、、;它们无内容、不可嵌套子元素、禁止写结束标签。

HTML空元素必须写成自闭合形式(<img>),但浏览器实际接受无斜杠写法(<img>);是否加斜杠不决定功能,只影响规范兼容性。
哪些标签属于空元素
空元素没有内容、不能嵌套子元素、也不允许写结束标签。W3C HTML5 规范明确定义了 void elements 列表,包括:<area>、<base>、<br>、<col>、<embed></embed>、<hr>、<img>、<input>、<link>、<meta>、<param>、<source></source>、<track></track>、<wbr></wbr>。
常见误判:<script></script>、<style></style>、<textarea></textarea> 不是空元素——哪怕内容为空,也必须写成成对标签;<div>、<code><p></p> 更不是,它们是典型的容器元素。
写法差异:加斜杠 vs 不加斜杠
HTML5 允许两种写法:<br> 和 <br> 都合法,解析结果完全一致。
-
<br>是 HTML5 的简写推荐形式,更轻量,日常开发中更常见 -
<br>是 XHTML/XML 风格,对大小写敏感、要求严格闭合,在 polyglot HTML(兼顾 HTML 和 XML 解析器)场景下更安全 - 注意:
<br>(斜杠前有空格)是无效语法,某些校验工具会报错 - 浏览器不会因是否加斜杠而改变渲染行为,但构建工具或 Linter(如 ESLint + eslint-plugin-html)可能强制统一风格
为什么建议统一用 <img> 这种写法
不是因为功能需要,而是为规避三类现实问题:
- 团队协作时风格混乱:有人写
<input>,有人写<input>,代码审查成本上升 - 服务端模板或静态生成器(如 Jekyll、Hugo)在处理 XML 输出模式时,可能拒绝不闭合的标签
- 部分老旧的 XML 解析器(如某些 RSS 阅读器后端)会把
<meta>当作未闭合标签报错,而<meta>可直接通过 - Vue/Svelte 等框架的单文件组件(SFC)中,模板需符合 XML 语法,
<img>在某些配置下会触发警告
容易被忽略的细节
空元素的属性值仍需引号包裹,且推荐双引号;src、href、charset 等属性缺失或为空时,不要留空字符串占位——比如 <img src=""> 会触发 404 请求,应删掉该属性或用占位符。
另外,<meta charset="UTF-8"> 虽然没斜杠,但它是 HTML5 中少数被特例允许省略闭合的空元素之一;不过写成 <meta charset="UTF-8"> 依然完全正确,且更易被自动化工具识别为 void element。











