HTML5废弃了、等表现型标签及align等属性,须用CSS替代;语义标签如需配标题,不可盲目替换div;DOCTYPE必须为,编码声明用且置于head最前;表单新属性需JS降级兼容。

HTML5 中废弃的 HTML4 标签和属性必须移除
HTML5 不再支持 <font></font>、<center></center>、<u></u>、<strike></strike> 等纯表现型标签,也不再允许在 <img alt="html5改格式版本差异_html5与html4转换注意点【说明】" > 上使用 align、border,或在 <table> 上用 <code>cellpadding、cellspacing。这些不是“可选”,而是被规范明确废弃——浏览器可能仍渲染,但校验失败,且未来兼容性无保障。
实操建议:
- 用 CSS 替代:比如
text-align: center代替<center></center>,font-family和color代替<font></font> - 检查所有内联样式属性,特别是老 CMS 或 Dreamweaver 导出的页面,常残留
width、height在<img alt="html5改格式版本差异_html5与html4转换注意点【说明】" >上,应转为 CSS 或保留为语义化尺寸(如响应式需用max-width: 100%) - 用
validator.w3.org扫描,重点看 “obsolete” 类错误,不要忽略
HTML5 新增语义化标签不能盲目替换 div
很多人一上来就把所有 <div class="header"> 换成 <code><header></header>,结果反而破坏结构逻辑。HTML5 语义标签是“有含义的容器”,不是“换皮工具”。例如:<section></section> 要求有标题(<h1>–<h6></h6>
</h1>),<article></article> 应代表独立可复用的内容单元(如一篇博客、一条新闻),而 <aside></aside> 必须与主内容相关但非核心。
常见误用现象:
立即学习“前端免费学习笔记(深入)”;
- 把导航栏外层包一层
<section></section>却没配标题 → 应用<nav></nav> - 整个页脚写成
<footer></footer>,但里面混着广告位、友情链接等无关内容 → 需拆分,仅版权信息部分用<footer></footer> - 用
<main></main>包含侧边栏或页头 →<main></main>必须只含页面唯一主导内容,且不可嵌套
DOCTYPE 和字符编码声明必须精简且正确
HTML4 常见的长 DOCTYPE(如 XHTML 1.0 Strict)在 HTML5 中不仅多余,还可能触发怪异模式。HTML5 只接受一种写法:,大小写不敏感,但必须顶格、无空格、无注释前缀。
字符编码也必须用 <meta charset="utf-8">,且放在 最前面(早于任何其他标签,包括 <title></title>)。旧式写法如 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 虽仍生效,但冗余且易因顺序错位导致乱码。
关键细节:
- 服务器返回的 HTTP
Content-Type头若含charset,需与 HTML 内声明一致,否则以 HTTP 头为准,可能覆盖 meta 设置 - UTF-8 不带 BOM;用 VS Code、Sublime 等编辑器保存时选 “UTF-8” 而非 “UTF-8 with BOM”
- 如果页面含中文路径、CSS/JS 文件名或 URL 参数,确保 Web 服务器也默认 UTF-8 解析(如 Apache 的
AddDefaultCharset UTF-8)
表单控件和验证行为变化直接影响 JS 交互
HTML5 新增了 required、email、number、date 等输入类型及属性,它们不只是加个样式,而是改变原生验证逻辑和移动端键盘类型。但问题在于:不同浏览器对这些特性的支持程度和报错方式差异极大,尤其在 Android WebView 或旧版 Safari 中。
实际踩坑点:
-
<input type="date">在 Chrome 显示日期选择器,在 Firefox 仍为文本框,iOS Safari 支持但可能不触发change事件 → 必须配合 JS 做降级(如用type="text"+ 第三方日历库) -
required属性触发表单提交前验证,但form.checkValidity()返回true并不表示后端安全 —— 它只校验 HTML5 规则,不替代服务端验证 - 自定义
input的valueAsNumber或valueAsDate属性在 IE 完全无效,需用parseFloat()或Date.parse()兜底
onclick="doSubmit()")是否与新语义标签的冒泡行为冲突,或是否依赖已废弃的 DOM 属性(如 document.all)。这类问题往往上线后才暴露,且难以复现。


















