doctype必须顶格且无bom,否则ie/edge legacy强制进入quirks mode;html5语义标签需html5shiv+display:block;应使用normalize.css而非reset.css;js需api检测而非ua判断。

DOCTYPE必须顶格且无BOM,否则直接进怪异模式
这是所有兼容问题的开关。只要前面有空格、注释、UTF-8 BOM字节,IE/Edge Legacy 就会强制进入 Quirks Mode——盒模型错乱、<code>float行为异常、document.body.scrollTop读取失效,连调试都找不到根子。
实操建议:
- VS Code右下角确认文件编码是
UTF-8 without BOM(不是UTF-8) - 光标移到第一行最左,按←键确认无隐形字符
- 删掉
前所有内容,包括<code><!-->、PHP输出空白、甚至空行 - 别用
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">这类旧声明,现代浏览器反而解析更分裂
IE8–IE11中语义标签需手动设display: block
html5shiv只让IE“知道”<main>、<section>等标签存在,但IE9–11默认仍当inline元素处理,布局直接塌陷;IE8及以下连DOM节点都创建不出来。
实操建议:
- 条件加载
html5shiv:<!--[if lt IE 9]><script src="js/html5shiv.min.js"></script><![endif]--> - 必须补CSS规则:
main, section, article, aside, nav, header, footer { display: block; } - 别依赖
document.createElement('main')——漏写难维护,且不解决渲染问题 - 2026年起,政企外项目可明确放弃IE支持,但内网系统仍需保留
CSS默认样式不一致?用normalize.css而非reset.css
Chrome给<button></button>设border: 2px outset,Firefox给<input type="date">加内边距,Safari对<select></select>强制滚动条……这些差异靠* { margin: 0; padding: 0; }根本压不住,还会破坏表单控件原生行为。
下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。
实操建议:
- 引入
normalize.css:<link rel="stylesheet" href="normalize.min.css"> - 必须放在所有自定义CSS之前
- 补全局
* { box-sizing: border-box; },否则IE宽高计算和现代浏览器差一个padding - 别用
all: unset——Safari 9.1–13.1会让<button></button>失焦不可点
JS特性检测不能靠navigator.userAgent,得查API存在性
UA字符串极易伪造、过时、不可靠。比如某Android WebView声称是Chrome却缺失localStorage;新版Safari可能伪装成旧版绕过限制。硬写if (navigator.userAgent.includes('MSIE'))等于埋雷。
实操建议:
- 检测能力本身:
if ('IntersectionObserver' in window) { /* 原生 */ } else { /* 加polyfill */ } - 关键布局降级:先写
display: flex,再用@supports (display: grid)增强,避免IE11因不支持@supports语法而跳过整段CSS - 避免ES6+语法直出——Babel转译仍是政企/老系统刚需,尤其涉及
async/await或class声明
真正容易被忽略的是:兼容性不是“加补丁”,而是从第一字开始就守住底线。BOM、语义标签默认样式、API检测这三件事没做对,后面加多少<code>polyfill和hack都只是把楼盖在流沙上。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










