本系列内容由ZouStrong整理收录
仅以此文纪念那些与IE6和IE7的斗争的日子
问题描述:IE6下,PNG24透明图有灰底
解决方案1:使用IE专属的滤镜
_background-image:none;
_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(
enabled=true, sizingMethod=scale,src='images/img.png');
解决方案2:使用DD_belatedPNG.js插件
<!--[if lte IE 6]>
<script src="js/DD_belatedPNG.js"></script>
<script type="text/javascript">
//要使用滤镜的图片的选择器,扩多个,逗号分隔
DD_belatedPNG.fix('.strong img,.imgs');
</script>
<![endif]-->
总结回顾:
方案1只对背景图有效,且滤镜里图片的路径是相对于html页面而不是相对于CSS文件
使用方案1时,在IE6下,应用背景的元素内的a链接将失效,此时对a链接设置position:relative即可(但是应用背景的元素不能够设置position属性,否则a链接还是不生效,可以对该元素的父元素设置position属性)另外的解决方法就是让链接不包含在元素内,而是通过定位显示在元素上即可
方案2对前景图和背景图都有效果
问题描述:IE6下,对元素设置position:fixed不起作用
解决方案:
* html div
{_position:absolute;_left:expression(eval(document.documentElement.scrollLeft+10));_top:expression(eval(document.documentElement.scrollTop+100))}
或者从右下角开始定位
* html div
{_position:absolute;_left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clIEntWidth-this.offsetWidth)-(parseInt(this.currentStyle.marginLeft,10)||0)-(parseInt(this.currentStyle.marginRight,10)||0));_top:expression(eval(document.documentElement.scrollTop+document.documentElement.clIEntHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)))}
此外,不管是上面哪种方法,都要再加一句,防止定位元素抖动
* html,* html body {background-image:url(about:blank);background-attachment:fixed}
总结回顾:
此方法运用了只有IE6才能识别的选择符级hack
问题描述:IE6下,对非链接元素设置:hover伪类无效
解决方案:使用JS或者在非a元素内加入a标签
问题描述: IE6下,对边框设置transparent无效
解决方案:
border:solid 1px transparent;
_border-color:tomato;
_filter:chroma(color=tomato);
问题描述: IE6下,容器高度无法小于12px
解决方案:设置容器 _font-size为0即可
p {height : 5px ; _font-size: 0 ;}
但此时高度仍然不能小于2px,若想设置高度为0或者1px,则需使用
p {height : 1px ; _font-size: 0 ;_overflow : hidden ;}
问题描述: IE6下,同一个大括号里对同一个样式有两个及更多属性定义,其中一个加 !important 则 !important标记被忽略
P { width : 100px !important; width : 200px ;} /*IE6下宽度为200px*/
解决方案:
P { width : 100px !important;}
P { width : 200px ;}
总结回顾:
如果这同一个样式在不同大括号里定义,其中一个加!important 则!important发挥正常作用
一般会利用这个来实现特殊效果
问题描述: IE6下, 不支持上述伪元素(或者说支持不够完善)
解决方案:选择符与大括号“{”之间留有空格或者回车换行书写
总结回顾:使用书写这两个伪类时,是全浏览器兼容的
问题描述: IE6下,对元素设置min-height无效
解决方案1:
p {
height : auto !important ;
height : 400px ;
min-height : 400px ;
}
解决方案2:
p {
_height : 400px ;
min-height : 400px ;
}
总结回顾:
设置最小高度后,只要再为IE6设置高度即可(IE6会撑开固定宽高的父元素)
但此时不能再为元素设置overflow除visible之外的值,都则模拟min-height将失效
问题描述: IE6下,子元素宽高大于固定宽高的父元素时,会把父元素撑开(其它浏览器下都是超出父元素)
解决方案:
父元素设置
_overflow:hidden;
子元素设置
_position:relative;
问题描述: IE6下,不管z-index值多高,元素始终无法覆盖select(弹窗经常遇到)
解决方案:
<iframe style="position:absolute;left:0;top:0;width:100px;height:100px;z-index:5; border:0; src="" scrolling="no" ></iframe>
总结回顾:
将iframe元素元素翻盖在select之上(大小根据select元素来),并且保证iframe的z-index值小于弹窗即可,一物降一物!
问题描述: IE6下,当浮动元素的浮动方向和浮动边界的方向一致时,最靠近浮动边界的浮动元素出现双倍margin
解决方案:为该元素设置 _display : inline 即可
问题描述: IE6下,当浮动元素与非浮动元素水平相邻时,两者之间产生3px像素间距
解决方案1:在浮动元素产生间距的方向设置margin-left(right):-3px即可
解决方案2:将非浮动元素设置宽度后,也设置浮动
总结回顾:
浮动和非浮动元素相邻,无非就是想做自适应宽度布局,所以方案2会导致变为固定宽度布局,不够完美
问题描述: IE 下,当a包含img时,会出现蓝色边框
解决方案:为img设置 border : 0 即可
问题描述:
.test{zoom:1;overflow:hidden;width:500px;}
.box1{float:left;width:100px;}
.box2{float:right;width:400px;}
<div class="test">
<div class="box1"></div>
<!-- 注释 -->
<div class="box2">↓这就是多出来的那只猪</div>
</div>
解决方案1:删除box1和box2之间所有的注释
解决方案2:不设置浮动
解决方案3:调整box1或box2的宽度,比如将box1的宽度调整为90px
总结回顾:
造成此BUG的原因可能是多重混合的,如浮动,注释,宽高定义等等。并且注释条数越多,溢出的文本也会随之增多
问题描述:
IE6下,对li元素内部的行内元素设置display:block后,li底部产生空白
解决方案:对行内元素设置 zoom:1 ;
问题描述: IE6、IE7下,当li元素中出现浮动的子元素时,li底部产生空白间隙(li的子元素浮动仅仅是BUG产生的必要条件,这个bug产生的充要条件是li的子元素浮动并且li设置了以下CSS属性之一:width、height、zoom、)
解决方案:
为li元素设置vertical-align ,任何值都可以 如: li {vertical-align:top }
问题描述: IE6、IE7下,子元素相对定位时,父元素的overflow:auto和hidden失效
解决方案:为父元素也设置 position : relative 或absolute;
问题描述:
IE6、IE7下,随着value增多,两边空白页随着增加
解决方案:
input ,button {overflow : visible ; }
问题描述: IE6和IE7下,background-color不会延伸到border底下
解决方案:暂无
总结回顾:
正常情况下,背景色会同时存在于内容区、padding和border下,而IE6、7下,背景色不会延伸到border下
问题描述: IE6、IE7下,对于块级元素使用display:inline-block无效
解决方案1:在第二个声明里声明display : inline
P { display : inline-block ;}
P { display : inline ;}
解决方案2:
P { display : inline-block ;*zoom:1; *display : inline;}
问题描述: IE6~IE8下,不支持CSS3属性opacity
解决方案:
使用IE专属滤镜属性
filter:alpha(opaity=50);
使用火狐(老版本)专属属性
-moz-opacity:0.5;
问题描述:在Chrome下,使用过渡效果transition时有时会出现页面闪动
解决方案:
-webkit-transform-style:preserve-3d;
或
-webkit-backface-visibility:hidden;
问题描述:如题
解决方案:可使用 IE 滤镜处理
filter: progid:DXImageTransform.Microsoft.Gradient(startColorstr=#88000000, endColorstr=#88000000);
总结回顾:
88000000 的前两位数字控制透明度,取值16进制从00 -> FF(越小越透明),00表示完全透明,FF就是全不透明,后面六位是色值