原文源于:http://bbs.blueidea.com/thread-2928157-1-2.html
[参与测试的浏览器:IE6 / IE7 / IE8 / FF3 / OP9.6 / SF3 / Chrome2 ]
[操作系统:Windows]
问这样的问题的人很多,我对此有比较深入的研究,但自己从来没有给出过完整的解答与分析,觉得有些对不住蓝色理想的列祖列宗。
先请看demo:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="author" content="Chomo" /> 6 <link rel="start" href="http://www.14px.com" title="Home" /> 7 <title>div仿框架布局</title> 8 <style type="text/css"> 9 * { margin:0; padding:0; list-style:none;} 10 html { height:100%; overflow:hidden; background:#fff;} 11 body { height:100%; overflow:hidden; background:#fff;} 12 div { background:#f60; line-height:1.6;} 13 .top { position:absolute; left:10px; top:10px; right:10px; height:50px;} 14 .side { position:absolute; left:10px; top:70px; bottom:70px; width:200px; overflow:auto;} 15 .main { position:absolute; left:220px; top:70px; bottom:70px; right:10px; overflow:auto;} 16 .bottom { position:absolute; left:10px; bottom:10px; right:10px; height:50px;} 17 /*---ie6---*/ 18 html { _padding:70px 10px;} 19 .top { _height:50px; _margin-top:-60px; _margin-bottom:10px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 20 .side { _height:100%; _float:left; _width:200px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 21 .main { _height:100%; _margin-left:207px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 22 .bottom { _height:50px; _margin-top:10px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 23 </style> 24 </head> 25 <body> 26 <div class="top"></div> 27 <div class="side"> 28 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 29 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 30 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 31 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 32 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 33 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 34 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 35 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 36 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 37 </div> 38 <div class="main"> 39 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 40 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 41 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 42 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 43 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 44 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 45 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 46 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 47 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 48 </div> 49 <div class="bottom"></div> 50 </body> 51 </html>
让我们将应该有滚动条的地方的滚动条效果折腾出来:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="author" content="Chomo" /> 6 <link rel="start" href="http://www.14px.com" title="Home" /> 7 <title>div仿框架布局 - 加上滚动条,一个div仿框架的基础概型已经完成</title> 8 <style type="text/css"> 9 * { margin:0; padding:0; list-style:none;} 10 html,body { height:100%; overflow:hidden; background:#fff;} 11 div { background:#f60; line-height:1.6;} 12 .top { position:absolute; left:10px; top:10px; right:10px; height:50px; overflow:auto;} 13 .side { position:absolute; left:10px; top:70px; bottom:70px; width:200px; overflow:auto;} 14 .main { position:absolute; left:220px; top:70px; bottom:70px; right:10px; overflow:auto;} 15 .bottom { position:absolute; left:10px; bottom:10px; right:10px; height:50px; overflow:auto;} 16 </style> 17 </head> 18 <body> 19 <div class="top"></div> 20 <div class="side"> 21 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 22 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 23 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 24 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 25 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 26 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 27 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 28 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 29 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 30 </div> 31 <div class="main"> 32 <br /><br /><br />加上滚动条,一个div仿框架的基础概型已经完成 33 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 34 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 35 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 36 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 37 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 38 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 39 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 40 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 41 </div> 42 <div class="bottom"></div> 43 </body> 44 </html>
以上方法其实早已由wiseinfo在Html+CSS 构建 B/S结构软件界面 — 布局篇 — position方式中
进行过介绍,在该文中,ie6亦是分而治之的,它的方法是在html代码顶部加入“<?xml version=”1.0″
encoding=”UTF-8″?>”,使得ie6进入quirks
mode(怪异模式)来完成ie6下的div仿框架,但这样做将出现一些影响比较显著的弊端:
1. quirks mode下的ie6连盒模型都变了,就是说你在页面中写任何内容就要慎用padding和border,况且quirks mode下的变化还不止这一点。
2. 如果底部使用绝对定位,则会发生“绝对定位基对象(在此为body)高度为偶数时,出现1px空隙”的bug。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3 <html xmlns="http://www.w3.org/1999/xhtml"> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 6 <meta name="author" content="Chomo" /> 7 <link rel="start" href="http://www.14px.com" title="Home" /> 8 <title>div仿框架布局 - 将ie6导入了quirks mode(怪异模式),很有弊端</title> 9 <style type="text/css"> 10 * { margin:0; padding:0; list-style:none;} 11 .div1 { background:#fc0; line-height:1.6; width:400px; height:100px; border:50px solid #f60; padding:20px;} 12 .div2 { background:#f60; line-height:1.6; width:400px; height:100px; position:absolute; bottom:0; left:0;} 13 </style> 14 </head> 15 <body> 16 <div class="div1">该页面请在ie6和非ie6下对比,ie6下连盒模型都变了,就是说你在页面中写任何内容就要慎用padding和border,况且quirks mode下的变化还不止这一点。</div> 17 <div class="div2"> 18 如果底部使用绝对定位,则会发生“绝对定位基对象(在此为body)高度为偶数时,出现1px空隙”的bug。<br /> 19 您可以试着改变浏览器的大小进行观测。 20 </div> 21 </body> 22 </html>
于是我们需要另辟蹊径。
在很多次失败之后,我终于发现有一个标签可以救ie6于水深火热,那就是最伟大的“<html>”标签,它继承了ie6 quirks mode(怪异模式)下的盒模型状态。
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="author" content="Chomo" /> 6 <link rel="start" href="http://www.14px.com" title="Home" /> 7 <title>div仿框架布局 - ie6中,伟大的<html>标签继承了ie6 quirks mode(怪异模式)下的盒模型状态</title> 8 <style type="text/css"> 9 * { margin:0; padding:0; list-style:none;} 10 html { padding:50px; height:100%; background:#f60; overflow:hidden; background:#fff;} 11 body { height:100%; background:#fc0; overflow:auto; line-height:1.6;} 12 </style> 13 </head> 14 <body> 15 <br /><br /><br /> 16 请使用ie6浏览本页面<br /> 17 ie6中,伟大的<html>标签继承了ie6 quirks mode(怪异模式)下的盒模型状态<br /> 18 这样,我们便有了可乘之机<br /> 19 <br /><br /><br /><br /><br /><br /><br /><br /> 20 <br /><br /><br /><br /><br /><br /><br /><br /> 21 <br /><br /><br /><br /><br /><br /><br /><br /> 22 <br /><br /><br /><br /><br /><br /><br /><br /> 23 <br /><br /><br /><br /><br /><br /><br /><br /> 24 <br /><br /><br /><br /><br /><br /><br /><br /> 25 <br /><br /><br /><br /><br /><br /><br /><br /> 26 </body> 27 </html>
利用这一点,我们可以在不太轻松的调整之后完成以下效果:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="author" content="Chomo" /> 6 <link rel="start" href="http://www.14px.com" title="Home" /> 7 <title>div仿框架布局 - 先分出三行来</title> 8 <style type="text/css"> 9 * { margin:0; padding:0; list-style:none;} 10 html { padding:70px 10px; height:100%; background:#fff; overflow:hidden;} 11 body { height:100%; background:#fff; overflow:hidden;} 12 div { background:#f60; line-height:1.6;} 13 .top { height:50px; margin-top:-60px; margin-bottom:10px; position:relative;} 14 .main { height:100%;} 15 .bottom { height:50px; margin-top:10px; position:relative;} 16 </style> 17 </head> 18 <body> 19 <div class="top"></div> 20 <div class="main">先分出三行来(请在ie6下浏览)</div> 21 <div class="bottom"></div> 22 </body> 23 </html>
再用下我们的二列布局知识来完成最终形态,在此我们将艳遇著名的3px bug(不喜欢它可以找点别的办法):
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="author" content="Chomo" /> 6 <link rel="start" href="http://www.14px.com" title="Home" /> 7 <title>div仿框架布局 - 再分出两列</title> 8 <style type="text/css"> 9 * { margin:0; padding:0; list-style:none;} 10 html { padding:70px 10px; height:100%; background:#fff; overflow:hidden;} 11 body { height:100%; background:#fff; overflow:hidden;} 12 div { background:#f60; line-height:1.6;} 13 .top { height:50px; margin-top:-60px; margin-bottom:10px; position:relative;} 14 .side { height:100%; float:left; width:200px; overflow:auto; position:relative;} 15 .main { height:100%; margin-left:207px; overflow:auto; position:relative;} 16 .bottom { height:50px; margin-top:10px; position:relative;} 17 </style> 18 </head> 19 <body> 20 <div class="top"></div> 21 <div class="side"> 22 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 23 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 24 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 25 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 26 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 27 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 28 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 29 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 30 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 31 </div> 32 <div class="main"> 33 <br /><br /><br />再分出两列(还是请在ie6下浏览) 34 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 35 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 36 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 37 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 38 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 39 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 40 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 41 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 42 </div> 43 <div class="bottom"></div> 44 </body> 45 </html>
现在我们拥有了ie6的仿框架和非ie6的div仿框架的最终形态,只需要利用hack做个简单的加法则行了:
(当然,同一属性写两遍,后面的属性所对应的值将覆盖前者,这个基础的优先级基础大家还需要温故一下。)
(再“当然”一下——当然,有人对hack深恶痛绝,那么请在使用之前,阅读此文看看是否能消消心头之恨。)
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="author" content="Chomo" /> 6 <link rel="start" href="http://www.14px.com" title="Home" /> 7 <title>div仿框架布局 - 让我们荡起双桨</title> 8 <style type="text/css"> 9 * { margin:0; padding:0; list-style:none;} 10 html { height:100%; overflow:hidden; background:#fff;} 11 body { height:100%; overflow:hidden; background:#fff;} 12 div { background:#f60; line-height:1.6;} 13 .top { position:absolute; left:10px; top:10px; right:10px; height:50px;} 14 .side { position:absolute; left:10px; top:70px; bottom:70px; width:200px; overflow:auto;} 15 .main { position:absolute; left:220px; top:70px; bottom:70px; right:10px; overflow:auto;} 16 .bottom { position:absolute; left:10px; bottom:10px; right:10px; height:50px;} 17 /*---ie6---*/ 18 html { _padding:70px 10px;} 19 .top { _height:50px; _margin-top:-60px; _margin-bottom:10px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 20 .side { _height:100%; _float:left; _width:200px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 21 .main { _height:100%; _margin-left:207px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 22 .bottom { _height:50px; _margin-top:10px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 23 </style> 24 </head> 25 <body> 26 <div class="top"></div> 27 <div class="side"> 28 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 29 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 30 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 31 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 32 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 33 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 34 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 35 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 36 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 37 </div> 38 <div class="main"> 39 <br /><br /><br />让我们荡起双桨<br /> 40 一个兼容性很好的div仿框架的基础概型便完成了<br /> 41 <br /><br /><br /><br /><br /><br /><br /><br /> 42 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 43 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 44 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 45 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 46 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 47 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 48 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 49 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 50 </div> 51 <div class="bottom"></div> 52 </body> 53 </html>
它很强大而实用,真的:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="author" content="Chomo" /> 6 <link rel="start" href="http://www.14px.com" title="Home" /> 7 <title>div仿框架布局 - 如果您有丰富的想象力,还可以玩些更刺激的</title> 8 <style type="text/css"> 9 * { margin:0; padding:0; list-style:none;} 10 html,body { height:100%; overflow:hidden; background:#fff;} 11 div { background:#f60; line-height:1.6;} 12 .top { position:absolute; left:10px; top:10px; right:10px; height:50px;} 13 .side { position:absolute; left:10px; top:70px; bottom:70px; width:200px; overflow:auto;} 14 .main { position:absolute; left:220px; top:100px; bottom:100px; right:10px; overflow:auto;} 15 .bottom { position:absolute; left:10px; bottom:10px; right:10px; height:50px;} 16 .mainTop { position:absolute; height:30px; top:60px; left:220px; right:10px;} 17 .mainBottom { position:absolute; height:30px; bottom:60px; left:220px; right:10px;} 18 /*--- ie6 ---*/ 19 html { _padding:100px 10px;} 20 .top { _margin-top:-90px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 21 .side { _height:100%; _padding:30px 0; _margin-top:-30px; _float:left; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 22 .main { _height:100%; _margin-left:207px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 23 .bottom { _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 24 .mainTop { _margin-bottom:10px; _margin-left:210px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 25 .mainBottom { _margin-top:10px; _margin-left:207px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 26 </style> 27 </head> 28 <body> 29 <div class="top"></div> 30 <div class="mainTop"></div> 31 <div class="side"> 32 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 33 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 34 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 35 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 36 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 37 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 38 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 39 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 40 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 41 </div> 42 <div class="main"> 43 <br /><br /><br /> 44 如果您有丰富的想象力,还可以玩些更刺激的。 45 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 46 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 47 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 48 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 49 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 50 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 51 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 52 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 53 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 54 </div> 55 <div class="mainBottom"></div> 56 <div class="bottom"></div> 57 </body> 58 </html>
但在实际应用中主体部分常常是个iframe,加个iframe,IE7则无法适应。T_T
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="author" content="Chomo" /> 6 <link rel="start" href="http://www.14px.com" title="Home" /> 7 <title>div仿框架布局 - 但在实际应用中主体部分常常是个iframe</title> 8 <style type="text/css"> 9 * { margin:0; padding:0; list-style:none;} 10 html { height:100%; overflow:hidden; background:#fff;} 11 body { height:100%; overflow:hidden; background:#fff;} 12 div { background:#f60; line-height:1.6;} 13 .top { position:absolute; left:10px; top:10px; right:10px; height:50px;} 14 .side { position:absolute; left:10px; top:70px; bottom:70px; width:200px; overflow:auto;} 15 .main { position:absolute; left:220px; top:70px; bottom:70px; right:10px; overflow:auto;} 16 .bottom { position:absolute; left:10px; bottom:10px; right:10px; height:50px;} 17 .main iframe { width:100%; height:100%;} 18 /*---ie6---*/ 19 html { _padding:70px 10px;} 20 .top { _height:50px; _margin-top:-60px; _margin-bottom:10px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 21 .side { _height:100%; _float:left; _width:200px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 22 .main { _height:100%; _margin-left:207px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 23 .bottom { _height:50px; _margin-top:10px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 24 </style> 25 </head> 26 <body> 27 <div class="top">但在实际应用中主体部分常常是个iframe,加个iframe,IE7则无法适应</div> 28 <div class="side"> 29 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 30 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 31 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 32 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 33 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 34 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 35 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 36 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 37 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 38 </div> 39 <div class="main"> 40 <iframe frameborder="0" src="http://www.g.cn/"></iframe> 41 </div> 42 <div class="bottom"></div> 43 </body> 44 </html>
而且……其实IE7下还不止这一点bug(虽然可以直接overflow-y:scroll,但我于心不忍)。
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="author" content="Chomo" /> 6 <link rel="start" href="http://www.14px.com" title="Home" /> 7 <title>div仿框架布局 - 其实IE7下还不止这一点bug</title> 8 <style type="text/css"> 9 * { margin:0; padding:0; list-style:none;} 10 html { height:100%; overflow:hidden; background:#fff;} 11 body { height:100%; overflow:hidden; background:#fff;} 12 div { background:#f60; line-height:1.6;} 13 .top { position:absolute; left:10px; top:10px; right:10px; height:50px;} 14 .side { position:absolute; left:10px; top:70px; bottom:70px; width:200px; overflow:auto;} 15 .main { position:absolute; left:220px; top:70px; bottom:70px; right:10px; overflow:auto; font-size:14px;} 16 .bottom { position:absolute; left:10px; bottom:10px; right:10px; height:50px;} 17 /*---ie6---*/ 18 html { _padding:70px 10px;} 19 .top { _height:50px; _margin-top:-60px; _margin-bottom:10px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 20 .side { _height:100%; _float:left; _width:200px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 21 .main { _height:100%; _margin-left:207px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 22 .bottom { _height:50px; _margin-top:10px; _position:relative; _top:0; _right:0; _bottom:0; _left:0;} 23 </style> 24 </head> 25 <body> 26 <div class="top">其实IE7下还不止这一点bug</div> 27 <div class="side"> 28 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 29 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 30 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 31 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 32 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 33 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 34 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 35 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 36 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 37 </div> 38 <div class="main"> 39 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 40 <p>现在请换用IE7浏览器测试,缩小窗口直到出现滚动条 恢复后会出现一段无聊的距离 然后再刷新这段距离又消失 事实证明这段无聊的距离与滚动条宽度相等。</p> 41 </div> 42 <div class="bottom"></div> 43 </body> 44 </html>
所幸IE7和IE6的html标签有着相同的盒模型,所以可以直接将IE6 only的部分修改为IE6+IE7 only。
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="author" content="Chomo" /> 6 <link rel="start" href="http://www.14px.com" title="Home" /> 7 <title>div仿框架布局 - 所幸IE7和IE6的html标签有着相同的盒模型</title> 8 <style type="text/css"> 9 * { margin:0; padding:0; list-style:none;} 10 html { height:100%; overflow:hidden; background:#fff;} 11 body { height:100%; overflow:hidden; background:#fff;} 12 div { background:#f60; line-height:1.6;} 13 .top { position:absolute; left:10px; top:10px; right:10px; height:50px;} 14 .side { position:absolute; left:10px; top:70px; bottom:70px; width:200px; overflow:auto;} 15 .main { position:absolute; left:220px; top:70px; bottom:70px; right:10px; overflow:auto; font-size:14px;} 16 .bottom { position:absolute; left:10px; bottom:10px; right:10px; height:50px;} 17 /*---ie6 / ie7---*/ 18 html { *padding:70px 10px;} 19 .top { *height:50px; *margin-top:-60px; *margin-bottom:10px; *position:relative; *top:0; *right:0; *bottom:0; *left:0;} 20 .side { *height:100%; *float:left; *width:200px; *position:relative; *top:0; *right:0; *bottom:0; *left:0;} 21 .main { *height:100%; *margin-left:210px; _margin-left:207px; *position:relative; *top:0; *right:0; *bottom:0; *left:0;} 22 .bottom { *height:50px; *margin-top:10px; *position:relative; *top:0; *right:0; *bottom:0; *left:0;} 23 </style> 24 </head> 25 <body> 26 <div class="top">所幸IE7和IE6的html标签有着相同的盒模型,所以可以直接将IE6 only的部分修改为IE6+IE7 only</div> 27 <div class="side"> 28 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 29 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 30 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 31 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 32 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 33 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 34 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 35 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 36 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 37 </div> 38 <div class="main"> 39 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 40 <p>现在请换用IE7浏览器测试,缩小窗口直到出现滚动条,看,现在没有无聊的距离了吧。它被我们修了。再复述一遍这段文字才够长,不要嫌我罗嗦:现在请换用IE7浏览器测试,缩小窗口直到出现滚动条,看,现在没有无聊的距离了吧。它被我们修了。</p> 41 </div> 42 <div class="bottom"></div> 43 </body> 44 </html>
iframe无法适应高度的bug也一起被修复了,人生真美好。
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="author" content="Chomo" /> 6 <link rel="start" href="http://www.14px.com" title="Home" /> 7 <title>div仿框架布局 - iframe无法适应高度的bug也一起被修复了</title> 8 <style type="text/css"> 9 * { margin:0; padding:0; list-style:none;} 10 html { height:100%; overflow:hidden; background:#fff;} 11 body { height:100%; overflow:hidden; background:#fff;} 12 div { background:#f60; line-height:1.6;} 13 .top { position:absolute; left:10px; top:10px; right:10px; height:50px;} 14 .side { position:absolute; left:10px; top:70px; bottom:70px; width:200px; overflow:auto;} 15 .main { position:absolute; left:220px; top:70px; bottom:70px; right:10px; overflow:auto;} 16 .bottom { position:absolute; left:10px; bottom:10px; right:10px; height:50px;} 17 .main iframe { width:100%; height:100%;} 18 /*---ie6---*/ 19 html { *padding:70px 10px;} 20 .top { *height:50px; *margin-top:-60px; *margin-bottom:10px; *position:relative; *top:0; *right:0; *bottom:0; *left:0;} 21 .side { *height:100%; *float:left; *width:200px; *position:relative; *top:0; *right:0; *bottom:0; *left:0;} 22 .main { *height:100%; *margin-left:210px; _margin-left:207px; *position:relative; *top:0; *right:0; *bottom:0; *left:0;} 23 .bottom { *height:50px; *margin-top:10px; *position:relative; *top:0; *right:0; *bottom:0; *left:0;} 24 </style> 25 </head> 26 <body> 27 <div class="top">看,亲爱的,iframe无法适应高度的bug也一起被修复了。不过这个修复也可以想想其他的办法:)办法就在本文中,有兴趣的朋友可以自己摸索。</div> 28 <div class="side"> 29 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 30 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 31 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 32 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 33 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 34 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 35 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 36 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 37 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 38 </div> 39 <div class="main"> 40 <iframe frameborder="0" src="http://www.g.cn/"></iframe> 41 </div> 42 <div class="bottom"></div> 43 </body> 44 </html>