IE6/FF/google等浏览器hack的方法有哪些?hack技巧分享( 二 )


#floated2 {float:right; height:400px; width:200px; background:#F0F;}
13、浮动层错位
当内容超出外包容器定义的宽度时,在IE6中容器会忽视定义的width值,宽度会错误地随内容宽度增长而增长 。
浮动层错位问题在IE6下没有真正让人满意的解决方法,虽然可以使用overflow:hidden;或overflow:scroll;来修正,但hidden容易导致其他一些问题,scroll会破坏设计;JavaScript也没法很好地解决这个问题 。所以建议是一定要在布局上避免这个问题发生,使用一个固定的布局或者控制好内容的宽度(给内层加width) 。
14、躲猫猫bug
在IE6和IE7下,躲猫猫bug是一个非常恼人的问题 。一个撑破了容器的浮动元素,如果在他之后有不浮动的内容,并且有一些定义了:hover的链接,当鼠标移到那些链接上时,在IE6下就会触发躲猫猫 。
解决方法很简单:
1.在(那个未浮动的)内容之后添加一个
2.触发包含了这些链接的容器的hasLayout,一个简单的方法就是给其定义height:1%;
15、绝对定位元素的1像素间距bug
IE6下的这个错误是由于进位处理误差造成(IE7已修复),当绝对定位元素的父元素高或宽为奇数时,bottom和right会产生错误 。唯一的解决办法就是给父元素定义明确的高宽值,但对于液态布局没有完美的解决方法 。
16、3像素间距bug
在IE6中,当文本(或无浮动元素)跟在一个浮动的元素之后,文本和这个浮动元素之间会多出3像素的间隔 。
给浮动层添加 display:inline 和 -3px 负值margin
给中间的内容层定义 margin-right 以纠正-3px
17、IE下z-index的bug
在IE浏览器中,定位元素的z-index层级是相对于各自的父级容器,所以会导致z-index出现错误的表现 。解决方法是给其父级元素定义z-index,有些情况下还需要定义position:relative 。
18、Overflow Bug
在IE6/7中,overflow无法正确的隐藏有相对定位position:relative;的子元素 。解决方法就是给外包容器.wrap加上position:relative; 。
19、横向列表宽度bug
如果你使用float:left;把

  • 横向摆列,并且
  • 内包含的(或其他)触发了hasLayout,在IE6下就会有错误的表现 。解决方法很简单,只需要给定义同样的float:left;即可 。
    20、列表阶梯bug
    列表阶梯bug通常会在给
  • 的子元素使用float:left;时触发,我们本意是要做一个横向的列表(通常是导航栏),但IE却可能呈现出垂直的或者阶梯状 。解决办法就是给
  • 定义float:left;而非子元素,或者给
  • 定义display:inline;也可以解决 。
    21、垂直列表间隙bug
    当我们使用
  • 包含一个块级子元素时,IE6(IE7也有可能)会错误地给每条列表元素(
  • )之间添加空隙 。
    解决方法:把flaot并且清除float来解决这个问题;另外一个办法就是触发的hasLayout(如定义高宽、使用zoom:1;);也可以给
  • 定义display:inline;来解决此问题;另外还有一个极有趣的方法,给包含的文本末尾添加一个空格 。
    22、IE6中的:hover
    在IE6中,除了(需要有href属性)才能触发:hover行为,这妨碍了我们实现许多鼠标触碰效果,但还是有一些法子是可以解决它的 。最好是不要用:hover来实现重要的功能,仅仅只用它来强化效果 。
    23、IE6调整窗口大小的 Bug
    当把body居中放置,改变IE浏览器大小的时候,任何在body里面的相对定位元素都会固定不动了 。解决办法:给body定义position:relative;就行了 。
    24、文本重复Bug
    在IE6中,一些隐藏的元素(如注释、display:none;的元素)被包含在一个浮动元素里,就有可能引发文本重复bug 。解决办法:给浮动元素添加display:inline; 。
    25、IE6下 行高 line-height实效,甚至变成两杯行高

    推荐阅读