DIV + CSS 之上中下,左右布局及IE6的3象素间隙问题

最近要求新的页面全部采用DIV + CSS来编写,前台页面制作的同事还不是很熟悉,我就在网上查了一下,写了个示例,以便参考。

很多页面的结构一般是上中下结构,然后中间部分要不是左右布局,要不是左中右布局。下面是简单的代码(test.htm):
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"   
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
  3. <html>  
  4. <head>  
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  6. <title>DIV + CSS 之上中下,左右布局</title>  
  7. <link rel="stylesheet" rev="stylesheet" href="css.css" type="text/css"/>  
  8. </head>  
  9. <body>  
  10. <div id="headdiv">这是头部内容</div>  
  11. <div id="centerdiv">  
  12.   <div id="left">左栏固定宽度为200px</div>  
  13.   <div id="right">右栏固定宽度为200px</div>  
  14.   <div id="center">中间自适应宽度</div>  
  15. </div>  
  16. <div id="footdiv">这是底部内容</div>  
  17. </body>  
  18. </html>  

再建下面的样式文件(css.css):
  1. body {  
  2.   margin0 0 0 0;font-size12px;TEXT-ALIGN: center;  
  3. }  
  4. #headdiv {  
  5.   background-color#CCCCCC;  
  6.   height:50px;  
  7.   width:80%;  
  8.   MARGIN-RIGHT: auto; MARGIN-LEFT: auto;   
  9. }  
  10. #centerdiv{  
  11.   width:80%;  
  12.   MARGIN-RIGHT: auto; MARGIN-LEFT: auto;   
  13. }  
  14. #left {  
  15.   floatleft;  
  16.   width200px;  
  17.   height:60px;  
  18.   background-color#CC99FF;  
  19.   border-width0;  
  20. }  
  21. #center {  
  22.   margin0 200px;  
  23.   height:60px;  
  24.   background-color#FF9999;  
  25. }  
  26. #right {  
  27.   floatright;  
  28.   width200px;  
  29.   height:60px;  
  30.   background-color#996600;  
  31. }  
  32. #footdiv {  
  33.   clearboth;  
  34.   background-color#CCCCCC;  
  35.   height:50px;  
  36.   width:80%;  
  37.   MARGIN-RIGHT: auto; MARGIN-LEFT: auto;   
  38. }  

用 IE 6 打开 test.htm 效果图如下:
点击在新窗口中浏览此图片

用 IE 7 或者 firefox 或者 谷歌浏览器 打开,效果图如下:
点击在新窗口中浏览此图片

OK,排版都没问题了,这里关键几个地方:
一是,footdiv 里要加上 clear: both;,不然只有IE能正常显示低部;
二是在 test.htm里, <div id="right">右栏固定宽度为200px</div> 要写在 <div id="center">中间自适应宽度</div> 之前,不然排版会乱的。
三是注意 left块 是浮在左边,即:float: left; 而 right块 是浮在右边,即:float:right; 然后 center 快,是距左边 200px处。

但如果再详细看一下显示效果图,会发现在 IE 6 中的中间部分有空隙,这就是网上说的 IE 3px bug,要想在IE 6 中不让显示空隙,就要调查一下样式:
一:把center 的 margin: 0 200px; 改为 margin: 0 197px; 也就是再向左边3个px,或者直接去掉这。
二:在 left 中加入: margin-right:-3px;
三:在 right 中加上 margin: 0 0 0 -3px;
这样改后,在 IE 6中打开后,就没有空隙了,但这样改后,左边和右边快的宽度就不是实际的200px了,当然这可以调整。

有话要说