前言:三栏网页宽度自适应布局方法常见的方法有三种:绝对定位法,margin负值法,自身浮动法。详解如下:
1、绝对定位法
理解:左右两栏采用绝对定位,分别固定于页面的左右两侧,中间的主体栏用左右margin值撑开距离,也就是说主体栏的左margin大于或等于左栏的宽度,主体栏的右margin同样也要大于或等于右栏的宽度。于是实现了三栏自适应布局。
具体代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>绝对定位法三栏自适应布局</title> </head> <style> html,body{ margin: 0; height: 100%; } #left{ position: absolute; top: 0; left: 0; 200px; height: 100%; background: red; } #right{ position: absolute; top: 0; right: 0; 200px; height: 100%; background: blue; } #main{ height: 100%; margin:0 210px; background: yellow; } </style> <body> <div id="left"></div> <div id="main"></div> <div id="right"></div> </body> </html>
效果如下图:
缺点:如果中间栏含有最小宽度限制,或是含有宽度的内部元素,当浏览器宽度小到一定程度,会发生层重叠的情况。
2、margin负值法
理解:中间的主体栏要使用双层标签。外层一个div宽度100%显示,并且浮动。并且内层content的div才是真正的主体内容,并给内层div含有左右210px的margin值,那样主体栏左右就空出了210px的宽度。
左栏与右栏都是采用margin负值定位的。左栏左浮动,margin-left为-100%,由于前面主体栏的div宽度为100%,所以这里的-100%margin值正好使左栏div定位到了页面的左侧;右侧栏也是左浮动,其margin-left也是负值,大小为其本身的宽度即200px。
具体代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>margin负值法三栏自适应布局</title> </head> <style> html,body{ margin: 0; height: 100%; } #main{ 100%; height: 100%; float: left; } #main #content{ height: 100%; margin: 0 210px; background: yellow; } #left{ 200px; height: 100%; float: left; margin-left: -100%; background: red; } #right{ 200px; height: 100%; margin-left: -200px; float: left; background: blue; } </style> <body> <div id="main"> <div id="content"></div> </div> <div id="left"></div> <div id="right"></div> </body> </html>
效果与绝对定位法效果一致。
需要注意的一点是:主体,左右侧栏都用了左浮动,但一定是主体栏部分先浮动,那是一定以及肯定的。至于左右两栏谁先谁后,都无所谓。
3、自身浮动法
理解:应用了标签浮动,标签后面的内容会跟随的特性。左栏左浮动,右栏右浮动,主体直接放后面,就实现了自适应。
具体代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>自身浮动法三栏自适应布局</title> </head> <style> html,body{ margin: 0; height: 100%; } #main{ height: 100%; margin: 0 210px; background: yellow; } #left{ 200px; height: 100%; float: left; background: red; } #right{ 200px; height: 100%; float: right; background: blue; } </style> <body> <div id="left"></div> <div id="right"></div> <div id="main"></div> </body> </html>
效果同第一个相同。
缺点:1)中间主体存在clear:both属性。如果要使用此方法,需避免明显的clear;2)样式在ie6下会有3px的bug,解决方法:使用hack指定main的margin:0 207px;
需要注意:三个div标签的顺序的关键是要把主体栏div放在最后,左右两栏div顺序任意。