CSS常见BUG

CSS Hack

IE条件注释:
全部IE:<!--[if IE]> css code <![endif]-->
IE6以上:<!--[if gt IE 6]> css code <![endif]-->
IE6以上(含IE6):<!--[if gte IE 6]> css code <![endif]-->
IE7如下:<!--[if lt IE 7]> css code <![endif]-->
IE7如下(含IE7):<!--[if lte IE 7]> css code <![endif]-->

全部IE: \9
IE6: _
IE7: +
IE8和opera: \0
IE9: :root #test { border: 1px #000 solid\9; }

 1.如何在IE6及更早浏览器中定义小高度的容器?

方法:#test{overflow:hidden;height:1px;font-size:0;line-height:0;}

备注:IE6及更早浏览器之因此没法直接定义较小高度的容器是由于默认会有行高

 2.如何解决IE6及更早浏览器浮动时产生双倍边距的BUG?

方法:#test{display:inline;}
备注:当在IE6及更早浏览器中出现浮动后margin值解析为双倍的状况,设置该元素的display属性为inline便可。

 3.如何在IE6及更早浏览器下模拟min-height效果?

方法:#test{min-height:100px;_height:100px;}

备注:注意此时#test不能再设置overflow的值为hidden,不然模拟min-height效果将失效

 4.如何解决按钮在IE7及更早浏览器下随着value增多两边留白也随着增长的问题?

方法:#test{min-height:100px;_height:100px;}

 5.如何解决IE7及更早浏览器下当li中出现2个或以上的浮动时,li之间产生的空白间隙的BUG?

方法:li{vertical-align:top;}

备注:除了top值,还能够设置为text-top | middle | bottom | text-bottom,甚至特定的<length>和<percentage>值均可以

 6.如何解决IE6及更早浏览器下的3像素BUG?

方法:
.a{color:#f00;}
.main{width:950px;background:#eee;}
.content{float:left;width:750px;height:100px;background:#ccc;_margin-right:-3px;}
.aside{height:100px;background:#aaa;}

<div class="main">
	<div class="content">content</div>
	<div class="aside">aside</div>
</div>

备注:在IE6及更早浏览器下为.content设置margin-right:-3px;也能够设置.aside为浮动

 7.如何解决IE6下的文本溢出BUG(江湖匪号:“谍影重重”或“一只猪的故事”)?

BUG重现:
.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>

备注:
运行如上代码,你会发现文字发生了溢出,在IE6下会多出一只“猪”。形成此BUG的缘由多是多重混合的,如浮动,注释,宽高定义等等。而且注释条数越多,溢出的文本也会随之增多。

列举几个解决方法: 
删除box1和box2之间全部的注释; 
不设置浮动; 
调整box1或box2的宽度,好比将box的宽度调整为90px

8.如何解决IE6使用滤镜PNG图片透明后,容器内连接失效的问题?

方法:
div{width:300px;height:100px;_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='*.png');}
a{_position:relative;}

备注:解决方法是为容器内的连接定义相对定位属性position的值为relative

 9.如何解决IE6没法识别伪对象:first-letter/:first-line的问题?

方法1:
p:first-letter {float:left;font-size:40px;font-weight:bold;}
p:first-line {color:#090;}

备注:增长空格:在伪对象选择符:first-letter/:first-line与包含规则的花括号"{"间增长空格。

方法2:
p:first-letter
{float:left;font-size:40px;font-weight:bold;}
p:first-line
{color:#090;}

备注:换行,将整个花括号"{"规则区域换行。细节参见E:first-letter和E:first-line选择符

 10.如何解决IE8会忽略伪对象:first-letter/:first-line里的!important规则的问题?

BUG重现:
p:first-letter {float:left;font-size:40px;font-weight:bold;color:#f00!important;color:#090;}

备注:如上代码,在IE8下color定义都会失效,缘由就是由于有color使用了!important规则。鉴于此,请尽可能不要在:first-letter/:first-line里使用!important规则。

 11.如何解决IE6会忽略同一条样式体内的!important规则的问题?

BUG重现:
div{color:#f00!important;color:#000;}

备注:如上代码,IE6及如下浏览器div的文本颜色为#000,!important并无覆盖后面的规则,也就是说!important被忽略了。解决方案是将该样式拆分为2条,细节参见!important规则

 12.如何解决IE6及更早浏览器下当li内部元素是定义了display:block的内联元素时底部产生空白的问题?

BUG重现:
a,span{display:block;background:#ddd;}

<ul>
	<li><a href="">CSS参考手册</a></li>
	<li><a href="">CSS探索之旅</a></li>
	<li><a href="">web前端实验室</a></li>
	<li><span>测试li内部元素为设置了display:block的内联元素时底部产生空白</span></li>
</ul>

备注:如上代码,IE6及更早浏览器每一个li内部的内联元素底部都会产生空白。解决方案是给li内部的内联元素再加上zoom:1

 13.如何解决IE6及更早浏览器下未定义宽度的浮动或绝对定位元素会被内部设置了zoom:1的块元素撑开的问题?

BUG重现:
#test{zoom:1;overflow:hidden;border:1px solid #ddd;background:#eee;}
#test h1{float:left;}
#test .nav{float:right;background:#aaa;}
#test .nav ul{zoom:1;overflow:hidden;margin:0;padding:0;list-style:none;}
#test .nav li{float:left;margin:0 5px;}

<div id="test">
	<h1>Doyoe</h1>
	<div class="nav">
		<ul>
			<li><a href="">CSS参考手册</a></li>
			<li><a href="">CSS探索之旅</a></li>
			<li><a href="">web前端实验室</a></li>
		</ul>
	</div>
</div>

备注:
如上代码,IE6及更早浏览器div.nav会被设置了zoom:1的ul给撑开。

列举几个解决方法: 
设置ul为浮动元素; 
设置ul为inline元素; 
设置ul的width

 14.如何解决IE7及更早浏览器下子元素相对定位时父元素overflow属性的auto|hidden失效的问题?

BUG重现:
div{overflow:auto;width:260px;height:80px;border:1px solid #ddd;}
p{position:relative;margin:0;}

<div>
	<p>若是我是相对定位,个人父元素overflow属性设置为auto|hidden将失效。若是你使用的是IE及更早浏览器,你将能够看到这个BUG</p>
	<p>若是我是相对定位,个人父元素overflow属性设置为auto|hidden将失效。若是你使用的是IE及更早浏览器,你将能够看到这个BUG</p>
</div>

备注:如上代码,在IE7及更早浏览器下你会看到div的滚动条将没法工做。解决方案是给div也设置相对定位position:relative

 15.如何解决Chrome在应用transition时页面闪动的问题?

方法:-webkit-transform-style:preserve-3d;或-webkit-backface-visibility:hidden;

备注:在Chrome下,使用过渡效果transition时有时会出现页面闪动
相关文章
相关标签/搜索