標準模式 ≠ 像素級一致
DOCTYPE 觸發標準模式意味著瀏覽器「盡力遵循」 W3C 標準,但標準本身存在:
- 未定義行為(如
flex 百分比高度計算)。 - 歷史兼容保留(
table 布局算法差異)。 - 厂商前綴實現時機不同(
-webkit-, -moz-)。
主要差異來源
- IE 6-10:盒模型、hasLayout、CSS2.1 缺陷、無現代特性支持。
- WebKit/Blink vs Gecko:字體渲染、滾動條樣式、表單控件外觀、觸摸事件細節。
- 移動端 WebView:系統版本碎片化導致同款 Chrome 內核行為不同。
應對策略
- 特性檢測:
if ('CSS' in window && CSS.supports('display', 'grid')) 而非 UA 判斷。 - Polyfill / PostCSS:自動補全前綴、降級語法。
- Normalize.css:統一基礎樣式基線。
- 漸進增強:核心功能無 JS/CSS 高級特性也可用。