Bug-IE6:
项目背景:tab实现
html:
ul{
height : 25px;
_overflow:hidden;//很重要!
border-bottom : 2px solid #ccc;
}
li{
height : 24px;
border-width : 1px 1px 0 1px;
.....
}
li.current{
border-width : 3px 1px 0 1px;
.....
}
bug表现:li无法超出ul的高度以便将ul的下边框挡住,z-index、margin-top什么的都是浮云...
解决方案:给li设置position:relative,让他脱离标准流,当然,需要设置top:2px,至此该bug解决。
Bug-IE:
项目背景:做字体居中显示的表格
html:
<tr>
<td class="w100">...</td>
<td class="w150">...</td>
<td class="w50">...</td>
</tr>
td{
text-align : center;
}
bug表现:如果table的实际宽度不是300px;就算td设置为字居中显示,在IE里也不会居中。
解决方案:至少留一个td宽度不设置而让其自适应
Bug-Ie6:
bug表现:在IE6中,外层为relative,内层为absolute后,内层设置height:100%无效。
解决方案:外层div设置overflow:hideen;内层设置height为9999;这样各浏览器兼容。
Bug-IE6:
bug表现:因为呈现需要,在iframe指向的页面内放了<!--[if IE6]>......<![End if]>,竟导致IE6中弹出该iframe时一片空白。
解决方案:iframe的src指向的页面不能包含类似脚本。当然没有问题。
Bug-IE6/7:
html:
<div style="margin-left:110px">
<p>
<input type="text"/>
</p>
</div>
bug表现:input会继承外层div的margin。
解决方案:input加样式_margin-left:-110px;
Bug-IE6:
html:
<input type="submit" class="button" value="提交"/>
.button{
display:inline-block;
width:100px;
height:20px;
overflow:hidden;
cursor:pointer;
background:none;
background-image:url(/images/buttons.png?v=2.1.0);
background-repeat:no-repeat;
overflow:hidden;
}
bug描述:submit中的文字会显示一道黑点。
解决方案: 给button添加样式:line-height:0; font-size:0;border:none;
Bug-IE6:
bug描述:如果页面使用了DD-delated来兼容透明图片,某些元素的background-position会和FF中的表现不一致。
解决方案:需要将该文件涉及的标签改一下(在DD-delated设置中),以统一IE中的效果。
Bug-IE6/7/8
bug描述:当iframe中的div 没有贴紧iframe边界,此时IE6、7会显示html的白色背景(iframe页面中的白色背景),经测试:不是Iframe的背景。
解决方案:给body加background:none,html加background:none(因为FF不支持html的background的opacity设置,测试时opacity是无效的),background:#000;filter:alpha(opacity=75)(这个是因为外面是黑色75透明底),但此方案再IE8下也存在问题,经上网查找,设置iframe中的body的background:transparent,iframe的allowtransparency="true",截止至此,bug解决。透明的iframe无法遮挡select,所以解决方案只能是隐藏select(在js设置)。
bug-IE6:
bug描述:div的margin-top有时会失效(当为body子元素时)。
解决方案:设置为position:relative,加入top属性来解决了。
对齐问题:
html:
<li>
<label>....</label>
<input type="text" />
<span>.....</span>
</li>
针对<span>中的提示信息,经常与前面的信息对不齐,IE8、9、10,FF,chrome,IE6,7基本都有偏差,除了使用position:relative个别调整外,一定要使用vertical-alian:middle,效果显著,基本都解决掉了。至于前面label和input使用相同的高度,配合line-height基本效果还好。
bug-IE6
html:
<div style="display:block">
<p style="background:url(....) ..... no-repeat">........</p>
</div>
bug描述:当用js控制div显示时(用show()方法),p的背景无法显示
解决方案:此时在div上加入position:relative解决。
bug-IE6:
html:
<table>
<tr>
<td colspan="9">
<p>没有相应记录</p>
</td>
</tr>
</table>
p{
display:inline-block;
zoom:1;
vertical-align:middle;
background:url(...) ... no-repeat;
text-indexnt:20px;
.....
}
bug描述:p为行内块级元素,但在IE6中,P没有自动收缩,而是占据了一行,前面的图标在行的最左侧。
解决方案:设置p display:inline;_zoom:1 .或者用span代替P标签。
bug-IE6
html:
<a class="step">
<b>.....</b>
<span class="title">....</span>
</a>
.step:hover{
.....
}
.step:hover b{
background-position:-32px -243px;
}
.step:hover .title{
color:#000;
}
bug描述:b改了background-position属性,在IE6下该改变没有生效。
在该标签加了color、border、font-size等属性或在background-position后面加!important试图触发该样式的改变,始终没有生效。
解决方案:加属性border-bottom:1px solid #f7f7f7;即该样式确实是能看到效果的,只是调整为真实情况下和不加该样式没差别。
网站ICon设置:
favicon.ico放在网站根目录。在网页上设置此方式兼容IE6+\FF\chrome。 一般IE会等几天才显示出来该图标。实现如下的剧中(兼容IE8+)
html:<div class="shadowSquare fl ml20 tc">
<p class="f14">
累计奖励金额: <span class="redText1">100</span>
<br/>
预计分成金额: <span class="redText1">100</span>
<br/>
实际总收入: <span class="redText1">100</span>
</p>
</div>
style:
.shadowSquare{
box-shadow:2px 3px 5px #ccc;
width:245px;
height:130px;
background-color:#fff;
display:table
}
.shadowSquare p{
display:table-cell;
vertical-align:middle;
color:#4d4d4d
}
IE6bug:
1、代码&&效果如下:
.myxyLeftMenu .list dt,.myxyLeftMenu .list dd{
height:30px;
line-height:30px;
background-color:#ccc
}
.myxyLeftMenu .list dd a{
display:block;
color:#333;
text-indent:43px;
width:100%;
background-color:pink
}
2、代码&&效果如下:
.myxyLeftMenu .list dt,.myxyLeftMenu .list dd{
height:30px;
line-height:30px;
background-color:#ccc
}
.myxyLeftMenu .list dd a{
display:inline-block;
color:#333;
text-indent:43px;
width:100%;
background-color:pink
}
二者区别就在display属性上。
bug-IE6
问题描述:IE6不支持负margin
解决方法:给该元素添加position:relative
布局问题:
解决方法:根据padding + 绝对定位的方式将两个图标挂在两边。
.wrap
{
height:25px;
position: relative;
padding:0 80px 0 40px
}
.UI-money {
position: absolute;
top: -5px;
left: 0
}
.UI-cuteGirl {
position: absolute;
top: -35px;
right: 0
}
```javascript
#####IE6bug:
######问题描述:当元素不设置width和height的情况下,仅仅依靠内部元素撑起。此时该元素又恰好是position:relative作为内部absolute元素的定位参考元素,那么在IE6下面,内部的定位会从除去padding的位置开始按照left top来做定位,而其它浏览器都是按照padding在内的位置开始计算,这才是正确的显示。
######解决方法:将该外层元素(即position为relative的元素)设置zoom:1触发layout,那么IE6将呈现与其他浏览器一致的状态。
> 没有设置zoom时的状态:
<img src="deb1a09a-21d6-412c-928a-5c435d13c0b1_files/86b5a548-6e4f-4a84-97ba-cffdbb533191.png" border="0" alt="" name="" height="41" width="284">
> 设置完zoom的状态:
<img src="deb1a09a-21d6-412c-928a-5c435d13c0b1_files/2234b90b-339d-49be-a96e-cceb3f3082ac.png" border="0" alt="">
######关于浮动的问题:
* 如果外层的尺寸固定,那么内部有两个float也无所谓,此时用不到外层随内层适应的问题。
* 当如果外层的尺寸需随浮动的子元素自适应高度,那么可以这样解决:
```javascript
div1{
float:left;
width:22px;
height:100%;
margin-right:10px;
_margin_right:-3px; //解决IE6下的3像素bug
}
div2{
display:inline-block;
}
此时外层元素随div2的高度自适应,但此时的问题是:
如果左侧浮动元素div1的高度设置了100%,但实际上它无法达到外层元素的高度,也就是无法计算,因为外层元素的高度没有显式定义。但如果此时你明确定义过div2的高度,那么你就可以使用这种方式做浮动布局。值得一提的是,就算外层设置上min-height,内部的左侧浮动元素依然无法设置100%高度布局,但是你可以使用这种方式使布局更整齐。IE6除外。
- 在外层不使用min-height的情况下,IE6&7中外层元素会自适应到左侧浮动元素的高度,但其他浏览器中外层元素则不会按左侧元素自适应,只会按右侧元素自适应。min-height的问题如果使用hack这样修复后:
{
height:auto!import;
height:1100px;
min-height:1100px;
}
方案解释:以上代码指定在除IE6的浏览器中,height为1100px且是auto的,IE6下因为不识别!import,那么IE6只会使用到height:1100px这个样式,那么将达到min-height:1100px的效果,因为如果内部的元素的高度大于这个高度,IE6下外层元素依然会被撑起。
- 让我们再来看看这个解决方案,在IE6下,因为使用了height样式且为固定的值,那么内部元素的百分比高度得以被计算。但在其他浏览器中,由于我们实际使用的样式是height:auto和min-height,那么将不会使得左侧浮动元素得到正确的100%的高度。
最后还是回顾下clearfix这个终极方案:
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
.clearfix{*zoom:1;}
它大致就是利用:after伪属性来给外层元素加一个after块级后置元素,并设置该子元素为不可见,并在上面设置clear:both清楚浮动,来使得父元素可以高度自适应。而*zoom:1是考虑到IE6&7不支持:after伪属性。
- 在外层不使用min-height的情况下,IE6&7中外层元素会自适应到左侧浮动元素的高度,但其他浏览器中外层元素则不会按左侧元素自适应,只会按右侧元素自适应。min-height的问题如果使用hack这样修复后:
百分比宽高的渲染
- 如果一个元素内部有定位元素且该定位元素是按百分比定义width和height:
那么在IE6下,如果外层元素的宽高没有显式定义,那么内部的定位元素的百分比宽高将不会被渲染,其他浏览器则都可以按照外层元素的实际高度进行渲染。
但是对于非定位元素,如果外层仅仅因为内部元素使得自身高度被撑起,此时内部的子元素如果设置了height:100%,那么将不会按100%进行和该父元素一样的高度渲染。这个特性并不会因为该子元素的浮动属性有所改变。
img与块级元素
- 当用负边距做这么一个布局:
能少则少,所以使用了这样的html:
<div>
<img src='' id='left'/>
<div id='right'></div>
</div>
样式可以这样:
img{
float:left;
margin-left:-100px;
}
也就是说,我们不用对IE6做任何的hack就可以解决问题。
但如果将img的样式改成这样:
{
float:left;
display:block;
margin-left:-100px;
_position:relative;
_margin-left:-50px;
}
也是OK的,也就是说,img很多时候表现得像一个块级元素,但它和块级元素的渲染还是有差别。
如果img是用一个div标签写的,那么该标签的样式应该是:
#left{
float:left;
margin-left:-100px;
_position:relative;
_margin-left:-50px;
}
或这样:
{
float:left;
margin-left:-100px;
_display:inline
}
也是OK的。