IE8及以下不识别HTML5标签,因Trident引擎仅支持HTML4/XHTML1元素,需用html5shiv.js通过document.createElement注册标签并注入display:block样式。

IE8及以下根本不认识 这类标签
不是样式没生效,是浏览器压根不解析这些标签——DOM里没有对应节点,CSS选择器匹配失败,document.querySelector('header') 返回 null。这是底层解析器限制,不是写错 CSS 或 JS 就能绕过的。
- IE6–IE8 使用旧版 Trident 渲染引擎,HTML 解析器只认 XHTML 1.0 / HTML 4.01 的元素列表
-
、、等在 IE8 中等同于未知自定义标签,被当作处理(即默认行内、无盒模型、无法设宽高) - 即使你写了
header { display: block; },也无效——因为浏览器根本没把当成合法元素,CSS 规则压根不参与匹配
最简可行方案:用 html5shiv.js + 条件注释
这是经过十多年验证、零配置、最小侵入的解法。它本质是提前调用 document.createElement() 把所有 HTML5 标签“注册”进 DOM,让 IE 认可它们为合法元素,之后 CSS 才能生效。
- 必须放在
内,且要在任何 CSS 和 JS 之前加载(否则样式/脚本可能已执行完毕) - 用











