XHTML+CSS 架構雖帶來結構與表現分離的優勢,但瀏覽器渲染引擎差異 (特別是 IE6/7 vs Firefox/Chrome) 常導致版面崩壞。本文彙整實戰中最高頻的相容性陷阱與解決方案。
務必在文件最頂端宣告 <!DOCTYPE html> (HTML5) 或嚴格 DTD,觸發「標準模式」。缺少 DOCTYPE 將啟用「怪異模式」,導致盒模型解析差異極大。
margin: 0 auto 的前提條件margin-left: auto; margin-right: auto; 即可置中。auto。解決:父層加 text-align: center,子層加 text-align: left 重置文字對齊。width = 內容寬度。加上 padding/border 會撐大整體視覺寬度。width = 內容 + padding + border。整體視覺寬度固定。width 與 padding/border;或使用 box-sizing: border-box (IE8+) 統一為 IE 模型 (現代最佳實踐)。!important 優先級 Hack!important 提升優先級。!important (特定情況)。單行文字:設定容器 line-height 等於 height,並 vertical-align: middle。
多行/區塊:現代專案首選 Flexbox (display: flex; align-items: center; justify-content: center) 或 Grid。舊專案可用 display: table-cell; vertical-align: middle。
cursor: pointer vs handcursor: pointer:標準寫法,所有現代瀏覽器支援。cursor: hand:IE 專屬舊寫法。僅使用 pointer 即可。導覽列常見問題:<a> 行內元素無法設定寬高/上下 padding。
解決:display: block (或 inline-block) + float: left (或 Flex 佈局)。同時給父容器 overflow: hidden 或 clearfix 清除浮動,避免高度塌陷。
div {
width: 300px !important; /* 現代瀏覽器讀此行 */
width: 340px; /* IE6 讀此行 (覆蓋上行) */
/* 實際視覺寬度 300px + 20px padding + 20px border = 340px */
}
div {
width: 300px !important;
width /**/: 340px; /* IE5.x 支援註解 Hack,IE6 不支援 */
}
<ul> 預設間距歸零ul { margin: 0; padding: 0; } /* 重置瀏覽器預設樣式,極度推薦納入 Reset CSS */
<script type="text/javascript"> (移除 language 屬性)。
@supports 或 Modernizr 進行特性偵測,優雅降級。