<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>test</title> <style type="text/css"> html, body { margin: 0; padding: 0; } .wrapper { overflow: hidden; } .left { float: left; width: 300px; background: pink; } .right { float: right; width: 300px; background: pink; } .center { margin:0 300px; background: gray; } </style> </head> <body> <div class="wrapper"> <div class="left">zuo</div> <div class="center">左右两列固定,中间自适应</div> <div class="right">you</div> </div> <script type="text/javascript"> </script> </body> </html>
因为div.center是个块元素,当.div.right在设置浮动前位置在div.center后,且在它下面;float之后,从之前的位置开始脱离文档流,因此在下面。
.center { /*margin:0 300px;*/ text-align: center; background: gray; position: absolute; right: 300px; left: 300px; }
将.center设为绝对定位,添加左右距离300px
原来的布局里左浮动脱离文档流,中间块会忽视左边占用的位置,所以和左边在一行,用margin撑开两边的间隔,但是中间还是块级元素,且没有脱离文档流,会占用一行,右边不会忽视中间块占用的位置,所以换行。
不好用文字表述.你理解理解.因为<div class="left">zuo</div>和<div class="right">you</div>是浮动,相当于三个元素垂直排列.但是<div class="center">左右两列固定,中间自适应</div>是文本流,应该环绕在元素1那边.之所以出现你那样的情况是因为你的css的center有外边距导致的.取消margin:0 300px;外边距,你会发现3还是在下边,这是因为你是向右浮动.而文本流占据了1的所有的右侧,交换1和3位置就好了,是因为浮动并排排列,一个向左,一个向右,然后文本流环绕到中间.
把
<div class="center">左右两列固定,中间自适应</div>
<div class="right">you</div>
位置调换即可实现三栏布局,