在調試頁面的時候,發現一個怪現象,和 hasLayout導至使用了負邊距的元素,邊緣會被裁剪 的情況相似,本質上應是相同的,不過表現略有不同,產生影响的不是邊距(margin),而是邊綫(border)。
在IE6下,父元素包含一個子元素,這時為父元素設置border屬性就會影响到 它的下一個元素,使該元素的内容產生偏移,看似邊緣被“剪”掉?!IE6 demo1
HTML:
<div class="line1"><div>文字文字文字文字文字文字文字</div></div> <div class="line2">邊緣的地方不見了</div>
CSS:
.line1{padding:1px; border-left:4px solid #000;} .line2{border:1px solid red; }
經測試,boder值的大小就是偏移值的大小(可通過修改 border-left:4px 來測試)。而4條邊綫當中,設置上/下邊不會影响到一下個元素,但設置左/右邊就會造成影响:IE6 demo2
上面兩種情況都是普通的文本,如果換了别的呢?接著測試,我把受影响的文本換成超鏈接<a>,情況就變得有趣了。默認情況下,A鏈接仍舊偏移,當鼠標經過的時候,它就被“移”出來了。IE6 demo3
繼續測試,發現受影的不只是一個元素,是下邊幾個元素都會如此,不過,鼠标經過之後能夠被“移”出來的,就只有對上的一行內容。IE6 demo4
至此,或許還有其它情況出現,但我就沒有再測試了。上面說,問題的本質應是一樣的。為什麼說是“應該”?因為解決這個問題的方法除了為 .line1 觸發layout之外,還有一個方法,就是設4條邊。設邊綫(border)是不能觸發的layout的,可設了之後的確有效果,就是說,不用觸發layout也能解決該問題的。IE6 demo5