html所有版本共用不可替代的底层骨架:必须有根元素,其下直接包含(含)和,缺一不可;基础标签语义与行为一致,编码声明需前置且文件编码匹配,但语义新标签混用会导致校验与无障碍问题。

所有 HTML 版本(HTML4、XHTML1.0、HTML5)都共享一套不可替代的底层骨架,只要这个骨架完整,浏览器就能解析并渲染页面——它不依赖新标签,也不因 DOCTYPE 变化而失效。
必须存在的根元素与基本容器
无论哪个版本, 必须是文档最外层标签, 和 必须直接作为其子元素存在。缺失任一,浏览器会自动补全,但 DOM 结构不可控,脚本获取 document.body 可能失败或延迟。
-
里至少要有<title></title>(否则页面标题为空,影响 SEO 和标签页识别) -
可为空,但不能被省略;XHTML 要求闭合标签写法(),HTML4/HTML5 允许省略,但建议显式写出 - 嵌套错误如
<div> <p></p> <div></div> 在所有版本中都会被浏览器纠错,但纠错逻辑不一致:HTML5 按“树构建算法”修复,XHTML 直接报错不渲染 <h3>通用标签的语义与行为未变</h3> <p>像 <code><p></p>、<h1></h1>–<h6></h6>、<ul></ul>、<ol></ol>、<li>、<a></a>、<img>这些基础标签,在所有版本中含义和默认样式行为一致。它们不因 HTML5 引入<section></section>就失效,也不因 XHTML 要求小写就改变语义。-
<img>始终是 void 元素,HTML4 写<img src="x">、XHTML 写<img src="x">、HTML5 回归前者,但浏览器对两种写法都接受 -
<a></a>的href属性在所有版本中决定链接目标,target="_blank"行为一致,但 HTML5 新增rel="noopener"才真正解决安全问题 - 自定义属性名(如
data-id)在 HTML4 中无效,在 XHTML 中需声明命名空间,在 HTML5 中原生支持——但若只用id或class,跨版本完全兼容
字符编码声明的实际生效条件
<meta charset="utf-8">在 HTML5 中是标准写法,但它能在 HTML4/XHTML 页面中起作用,前提是它出现在最前面(通常前 1024 字节内),且文档本身保存为 UTF-8 编码。- HTML4 更常用
<meta http-equiv="content-type" content="text/html; charset=utf-8">,两者效果等价,但后者更冗长 - 如果文件以 UTF-8 BOM 开头,部分旧 IE 会忽略
<meta>,直接按 BOM 判定编码——这是跨版本都存在的陷阱 - XHTML 文档若通过 XML 解析器加载(如
application/xhtml+xmlMIME 类型),则编码由 HTTP 头或 XML 声明(<?xml version="1.0" encoding="UTF-8"?>)决定,<meta>被忽略
真正容易被忽略的是:共通点不等于“可混用”。比如把 HTML5 的
<header></header>放进一个声明为 HTML4 的 DOCTYPE 页面里,浏览器照常渲染,但校验器报错、SEO 工具可能降权、屏幕阅读器识别率下降——结构没崩,语义却断了。 -











