新版HTML需分层兼容旧浏览器:IE8–IE11不支持querySelector、classList、fetch等API,须降级为getElementById、className、XMLHttpRequest;需添加X-UA-Compatible meta(置于head最前)、html5shiv(仅IE8-)、Flex/Grid回退方案,并避免ES6+语法。
新版 HTML 在低版本浏览器(比如 IE8–IE11、旧版 Safari/Android Browser)中直接打开会出问题,不是空白页就是样式错乱、脚本报错——这不是“加个 meta 标签就能解决”的事,而是得按浏览器实际能力分层处理。
document.querySelector 都不支持,必须降级 API新版 HTML 常依赖 querySelector、classList、fetch 等原生 API,但 IE11 及以下根本不认识这些。硬写会直接报 Object doesn't support property or method 'querySelector'。
document.getElementById 或 document.getElementsByTagName 替代 querySelector,尤其在 DOM 初始化逻辑里element.classList.add('active') 要改成 element.className += ' active'(注意空格防重复)fetch 必须换为 XMLHttpRequest,或引入轻量 polyfill(如 whatwg-fetch),但需确保它在 中**最前加载**const/let(IE11 支持 let,但 IE10 及以下不支持;统一用 var 更稳妥) 不能少,但也不万能这个标签只对 IE 有效,作用
是让 IE 强制启用最高可用文档模式(比如 IE11 下用 Edge 模式)。但它不解决 JS/CSS 兼容性,只是“别用怪异模式渲染”这一步。
最前面,**在所有其他 和 之前**,否则可能被忽略X-UA-Compatible HTTP 头,它会覆盖 HTML 中的 ,要检查响应头是否冲突display: flex 在 IE10+ 有部分支持(需 -ms- 前缀),但行为差异大;display: grid 在 IE 中完全不支持(哪怕加前缀也没用)。
display: -ms-flexbox 并配合 -ms-flex-align 等前缀属性,但建议只用于简单排列,复杂嵌套放弃@supports (display: grid) 包裹新写法,旧浏览器自动跳过gap、place-items 等新属性,它们在 IE 中无等效替代、)在 IE8 及以下需要 document.createElement
IE8 不识别 这类标签,导致 CSS 选择器失效(header { color: red; } 不生效),且无法通过 JS 获取元素。
中引入 html5shiv(或手动执行 document.createElement('header') 等)html5shiv 必须通过 加载,且**仅在条件注释中给 IE8- 执行**,避免影响现代浏览器兼容旧浏览器不是“让所有功能一模一样”,而是判断哪些交互可降级(比如用 onclick 替代 addEventListener)、哪些样式可舍弃(比如阴影、圆角)、哪些 JS 功能必须关掉(比如 WebSocket)。最常被忽略的是:没验证目标浏览器的真实 UA 和实际能力,只靠“听说 IE11 支持 ES6”就写 const,结果在企业内网的 IE11 兼容模式下直接挂掉。