HTML5通过语义化标签(如<header>、<nav>、<main>、<section>)、简化DOCTYPE声明(<!DOCTYPE html>)、增强表单控件(type="email"等)及全局属性(contenteditable、data-*等)提升可访问性与开发效率,同时废弃<font>等非语义元素。

HTML5 新增语义化标签替代 <div> 布局
HTML4 依赖大量 <div id="header">、<div class="nav"> 实现结构,缺乏语义。HTML5 引入原生语义标签,浏览器和读屏工具能直接识别内容角色:
-
<header>替代<div id="header">(但一个页面可有多个<header>,不只顶部) -
<nav>专指导航链接区块,不是所有菜单都适用(例如页脚的“友情链接”一般不用<nav>) -
<main>必须且仅出现一次,表示页面核心内容;若误用多次或嵌套在<article>内,会破坏 ARIA 隐式角色 -
<section>要求有标题(<h1>–<h6>),否则语义弱于<div>—— 这点常被忽略
<doctype> 和 <html> 声明大幅简化
HTML4 需引用 DTD(如 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">),区分 Strict / Transitional / Frameset,且大小写敏感。HTML5 彻底移除 DTD 依赖:
<!DOCTYPE html> <html lang="zh-CN">
注意:<!DOCTYPE html> 必须全小写,且前面不能有任何字符(包括空格、注释),否则触发怪异模式(Quirks Mode),导致盒模型、字体渲染异常。
表单控件和属性原生支持增强
HTML4 表单严重依赖 JavaScript 实现校验和输入类型控制;HTML5 将常用逻辑下沉为原生能力:
立即学习“前端免费学习笔记(深入)”;
-
<input type="email">、<input type="url">、<input type="date">:触发设备原生输入面板(iOS 日期滚轮、安卓邮箱键盘),但 Safari 对type="date"支持有限,需降级方案 -
required、minlength、pattern属性:提交前自动校验,但pattern值是正则字面量(无/g标志),且不支持 Unicode 属性转义(如\p{Han}) -
<output>元素:专为 JS 动态计算结果设计,配合for属性关联输入源,比用<span>更语义清晰
全局属性和废弃元素的实际影响
HTML5 定义了 contenteditable、hidden、data-* 等全局属性,同时明确废弃部分 HTML4 元素:
-
<font>、<center>、<u>(带下划线)被废除:现代 CSS 可完全替代,但旧 CMS 输出的<u>在 Chrome 中仍渲染为下划线(非语义),而 Firefox 默认不显示 —— 存在兼容性偏差 -
data-*属性允许任意命名(如data-user-id="123"),JS 通过element.dataset.userId访问(驼峰转换),但 IE11 不支持连字符后大写字母(data-userId无法读取) -
hidden属性等效于display: none,但优先级高于 CSS,且支持 JS 动态切换(el.hidden = true),比操作className更轻量
语义标签不是“用了就更好”,关键在是否匹配内容本质。比如把侧边栏广告包装成 <aside> 是合理语义,但把主导航塞进 <aside> 反而误导辅助技术。










