html5语义标签在ie8及以下无效因未识别,需html5shiv注册;旧版safari/chrome flex语法不兼容,应使用autoprefixer;input[type=date]在firefox和旧safari无原生支持,须检测降级;跨浏览器差异主因css渲染机制不同,非html5本身不兼容。
HTML5 本身没有“改格式”这个操作,所谓“格式异常”几乎全是 CSS 渲染差异或 HTML 结构语义误用导致的跨浏览器表现不一致——不是 HTML5 不兼容,而是你写的 HTML + CSS 组合在不同引擎里被解析/渲染得不一样。
为什么 <section></section>、<article></article> 在 IE8 里不生效
IE8 及更早版本根本不认识 HTML5 语义标签,它们被当作未知元素,既无默认样式,也不被 DOM API 正常识别(比如 document.querySelector('section') 会返回 null)。
- 必须引入
html5shiv(通过<script></script>动态创建这些元素,触发 IE 的“元素注册”机制) - 仅在
中条件加载:IE9 以下才需要,IE9+ 已原生支持 - 注意:
html5shiv不修复 CSS 选择器失效问题——必须搭配document.createElement('section')或使用 shiv 的完整版(如html5shiv-printshiv.js) - 现代项目若已放弃 IE8–9,可直接移除 shiv;但若仍需支持,务必确认 script 加载顺序早于任何依赖语义标签的 JS
flexbox 布局在 Safari 9–10 和旧版 Chrome 中错位
这些版本使用的是 2012 年旧版 flex 语法(display: -webkit-box),与标准 display: flex 不兼容,且属性名、值含义均有差异(例如 flex-direction 在旧版中是 -webkit-box-orient)。