html4和html5是超文本标记语言发展过程中的两个重要版本,两者在语法规则、标签体系、功能支持等方面存在明显差异,html5作为后续升级版本,解决了html4存在的很多局限性,同时新增了大量适配现代网页开发的能力。

语法规范差异
html4的文档类型声明比较复杂,需要根据不同的规范选择对应的声明方式,而html5大幅简化了文档类型声明,只需要一行代码即可完成设置。
下面是两者的文档类型声明对比:
<!-- html4的严格模式文档声明 --> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!-- html5的文档声明 --> <!DOCTYPE html>
在语法容错性上,html5的解析规则更加宽松,即使代码存在少量语法不规范的情况,浏览器也能正常解析渲染,而html4对语法的要求相对更严格。
标签体系差异
新增语义化标签
html5新增了大量语义化标签,替代了html4中大量使用<div>标签布局的方式,让页面结构更清晰,也更利于搜索引擎抓取和无障碍访问。
常见的html5新增语义化标签如下:
<header>:定义页面或区块的头部<nav>:定义导航链接区域<section>:定义页面中的独立区块<article>:定义独立的文章内容<footer>:定义页面或区块的底部<aside>:定义侧边栏内容
废弃的标签
html5废弃了html4中很多仅用于样式控制的标签,这些标签的样式功能已经可以通过CSS实现,保留在标准中会造成语义混乱。
被废弃的html4标签包括<font>、<center>、<strike>、<u>等,开发者在html5开发中不应再使用这些标签。
新增功能型标签
html5新增了很多支持多媒体、图形绘制等功能的新标签,不需要依赖第三方插件就能实现对应能力。
比如<video>标签可以直接在页面中嵌入视频,<audio>标签可以嵌入音频,<canvas>标签支持通过脚本绘制图形,这些都是html4不具备的能力。
下面是一个使用<video>标签的示例:
<video controls width="320" height="240"> <source src="movie.mp4" type="video/mp4"> 您的浏览器不支持video标签 </video>
功能支持差异
本地存储能力
html4主要依赖Cookie来存储客户端数据,Cookie存在存储容量小、每次请求都会携带到服务端、操作复杂等问题。html5新增了localStorage和sessionStorage两种本地存储方案。
localStorage可以长期存储数据,除非主动删除否则不会过期;sessionStorage的数据仅在当前会话有效,关闭标签页后就会清除。两者的存储容量都比Cookie大很多,操作也更简单。
下面是localStorage的使用示例:
// 存储数据
localStorage.setItem("username", "张三");
// 读取数据
const name = localStorage.getItem("username");
// 删除数据
localStorage.removeItem("username");
表单增强能力
html5对表单做了大量增强,新增了很多输入类型和属性,减少了前端开发中的校验逻辑编写工作。
新增的输入类型包括email、url、number、date、range等,新增的属性包括placeholder、required、autofocus、pattern等。
下面是一个增强表单的示例:
<form> <label>邮箱:<input type="email" required placeholder="请输入邮箱"></label> <label>生日:<input type="date" required></label> <input type="submit" value="提交"> </form>
设备兼容能力
html5新增了很多适配移动端设备的API,比如地理定位API、设备方向API、摄像头调用能力等,这些都是html4完全不具备的。通过这些API,网页可以更好地调用设备的硬件能力,实现更丰富的功能。
其他差异
html5支持SVG矢量图形和MathML数学标记语言的嵌入,而html4不支持这两种内容的直接嵌入。同时html5对脚本和样式的加载规则也做了优化,比如支持async和defer属性控制脚本的加载执行时机,提升页面的加载性能。
总体来看,html5是对html4的全面升级,不仅简化了开发流程,还新增了大量适配现代网页开发的能力,现在的前端开发基本都基于html5标准进行,只有在维护非常老旧的项目时才会接触到html4相关的内容。