首页 > 有关IE8的下height:100%计算错误

有关IE8的下height:100%计算错误

<!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共存时的高度计算错误》

问题复现

期待结果:

IE8的bug是:

问题发生流程试解释

以LZ的DEMO为例子:

// 以下为正常的CSS计算值得出流程,自顶向下

// 视口
// ┗html
// 意味着: 视口是html的包含块

视口 // height=600px
┗html // height:100% -> height=600px
 ┗body // height:100% -> height=600px
  ┕.wrapper // height:100% & min-height:720px; -> height=720px
   ┗.u-pagebg // height:100% -> height=720px

IE8中出现了什么样的差错呢,从现象尝试着解释一下bug的成因:

// 以下为IE8中的CSS计算值得出流程

视口 // height=600px
┗html // height:100% -> height=600px
 ┗body // height:100% -> height=600px
  ┕.wrapper // height:100% -> height≈600px
   ┗.u-pagebg // height:100% -> height=600px
              // 在计算完.u-pagebg的包含块的高度之后
              // .wrapper才受到min-height约束,如下
  ┕.wrapper // height:100% & min-height:720px; -> height=720px

解决方案

老实说,LZ这样的布局上为何需要overflow:hidden;,我看不出来太大意义。720px是一个非常高的值,比大部分用户的屏幕都要高。

况且这样的布局也用不着绝对定位,负margin定位也能做到。

overflow & absolute定位 是低版本IE里面布局bug的万恶之源之二,如果有兼容性要求,LZ使用之前请三思。


最后,IE10,IE11的IE8兼容性模式,都是扯淡。微软的IE想跟过去断离关系,又不肯断干净,偷偷把bug修复了,搞了个这么不伦不类的兼容性模式,在兼容性上毫无帮助。

【热门文章】
【热门文章】