<!doctype html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{margin: 0;padding: 0;}
html{height: 100%}
body{min-width: 1280px;height: 100%;}
.wrapper{position:relative;overflow: hidden;height: 100%;min-height: 920px;}
.u-pagebg{position:absolute;width: 100%;height: 100%;background: #ddd}
.m-ft{width: 100%;height: 70px;position: absolute;left: 0;bottom: 0;background-color: #000;}
</style>
</head>
<body>
<div class="wrapper">
<div class="u-pagebg"></div>
<div class="m-ft"></div>
</div>
</body>
</html>
大致代码如上,IE8下.u-pagebg和.m-ft并未在正确位置出现,这个问题只有在原生的IE8存在,其他浏览器均没有,IE11的IE8文档模式也没有这个问题。不知道有哪位知道怎么解决吗?
这是一个比较罕见的bug,而且跟高度100%没有关系,跟absolute定位也关系不太大。
详细的bug复现DEMO请见我的这篇文章:《【bug记录】IE8,包含块min-height/height共存时的高度计算错误》
问题复现
overflow:hidden;
,并同时设置了height
和min-height
,同时height计算值
<min-height
期待结果:
min-height
和height
,同时height计算值
小于min-height
。因为height
权重小于min-height
,最终A元素的content-box高度计算值应以min-height
为准IE8的bug是:
height计算值
小于min-height
的同时,误取了heihgt
值作为其包含块的content-box部分百分比top
/bottom
/百分比height
均受到影响,因此,B元素的位置可能受到影响问题发生流程试解释
以LZ的DEMO为例子:
IE8中出现了什么样的差错呢,从现象尝试着解释一下bug的成因:
解决方案
overflow:hidden;
overflow:hidden;
,加在不【同时设置了height
、min-height
,且height计算值
<min-height
】的地方。(为了防止断句错误,用了【】来区分分句)老实说,LZ这样的布局上为何需要
overflow:hidden;
,我看不出来太大意义。720px是一个非常高的值,比大部分用户的屏幕都要高。况且这样的布局也用不着绝对定位,负margin定位也能做到。
overflow
&absolute定位
是低版本IE里面布局bug的万恶之源之二,如果有兼容性要求,LZ使用之前请三思。最后,IE10,IE11的IE8兼容性模式,都是扯淡。微软的IE想跟过去断离关系,又不肯断干净,偷偷把bug修复了,搞了个这么不伦不类的兼容性模式,在兼容性上毫无帮助。