相信大家對於常見CSS BUG 的處理已經相對比較熟悉,例如:IE6 Three Pixel Gap、IE5/6 Doubled Float-Margin Bug 等等。但時常我們也會碰到複雜的CSS BUG 問題,所謂「複雜」實質是指觸發的條件很複雜,而「BUG」 也並非指一定是瀏覽器的BUG 。對於這類問題,我們首先要解決的是如何定位到問題,只有快速的定位到問題,才能更好的解決問題。
對於快速定位,個人的經驗處理一般如下(基本上可以定位到我在淘寶遇到的90% 以上的複雜CSS BUG 問題):
1、檢查頁面的標籤是否閉合
不要小看這條,也許折騰了你兩天都沒有解決的CSS BUG 問題,卻只源自於這裡。畢竟頁面的模板一般都是由開發來嵌套的,而他們很容易犯這類問題。
快速提示:可以用Dreamweaver 開啟檔案檢查,通常沒有閉合的標籤,會黃色背景高亮。
2.樣式排除法
有些複雜的頁面也許載入了N 個外鏈CSS 文件,那麼逐一刪除CSS 文件,找到BUG 觸發的具體CSS 文件,縮小鎖定的範圍。
對於剛才鎖定的問題CSS 樣式文件,逐行刪除特定的樣式定義,定位到具體的觸發樣式定義,甚至是特定的觸發樣式屬性。
3.模組確認法
有時候我們也可以從頁面的HTML 元素出發。刪除頁面中不同的HTML 模組,尋找到觸發問題的HTML 模組。
4.檢查是否清除浮動
其實有不少的CSS BUG 問題是因為沒有清除浮動造成的。養成良好的清除浮動的習慣是必要的,推薦使用無額外HTML 標籤的清除浮動的方法(盡量避免使用overflow:hidden;zoom:1 的類似方法來清除浮動,會有太多的限制性)。
5.檢查IE 下是否觸發haslayout
很多的IE 下複雜CSS BUG 都與IE 特有的haslayout 息息相關。熟悉並理解haslayout 對於處理複雜的CSS BUG 會事半功倍。推薦閱讀old9 翻譯的《On having layout》(如果無法翻越穿越偉大的GFW,可閱讀藍色上的轉帖)
快捷提示:如果觸發了haslayout,IE 的調試工具IE Developer Toolbar 中的屬性中將會顯示haslayout 值為-1。
6.邊框背景調試法
故名思議就是給元素設定顯眼的邊框或背景(一般黑色或紅色),進行調試。此方法是最常用的調試CSS BUG 的方法之一,對於複雜BUG 依舊適用。經濟實惠還環保^^
最後想給大家強調一點的是,養成良好的書寫習慣,減少額外標籤,盡量語義,符合標準,其實可以為我們減少很多額外的複雜CSS BUG,更多的時候其實是我們自己給自己製造了麻煩。希望大家遠離BUG ,生活越來越美好。