三栏布局
左右浮动布局
使用: 左设置为左浮动,右设置为右浮动,中间margin-left为左边块的宽度,margin-right设置为右边块的宽度.
注意: 在body标签中,设置中间为文档流的最后一项
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> #wrapper { height: 500px; background-color: pink; } .left { width: 100px; height: 100px; background-color: purple; } .right { width: 150px; height: 150px; background-color: rebeccapurple; } .middle { height: 100px; background-color: red; } /* 1. 自身浮动float 但是HTML中middle要放在最后才渲染, 要不right不在同一行 */ .left { float: left; } .right { float: right; } .middle { margin-left: 100px; margin-right: 150px; } </style> </head> <body> <div id="wrapper"> <div class="left">左侧固定</div> <!-- <div class="middle">中间自适应</div> --> <div class="right">右侧固定</div> <!-- 使用浮动 --> <div class="middle">中间自适应</div> </div> </body> </html>
注意点
用这种方法实现的时候遇到了问题,刚开始是把middle对应的div放在中间位置的,结果左中位置对了,但右栏始终不能显示在同一行上;
最后发现是自己对float属性的理解有偏差,将center放在最后就显示正确了。这种方法的缺点是三栏高度不统一,center区域的内容要在最后渲染。

绝对定位
使用: 左设置定位左边,右设置定位右边,中间设置margin-left 为左边块的宽度, margin-right为 右边块的宽度
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> #wrapper { height: 500px; background-color: pink; } .left { width: 100px; height: 100px; background-color: purple; } .right { width: 150px; height: 150px; background-color: rebeccapurple; } .middle { height: 100px; background-color: red; } /* 2. 绝对定位 */ #wrapper { position: relative; } .left { position: absolute; left: 0; top: 0; } .right { position: absolute; right: 0; top: 0; } .middle { margin: 0 150px 0 100px ; } </style> </head> <body> <div id="wrapper"> <div class="left">左侧固定</div> <div class="middle">中间自适应</div> <div class="right">右侧固定</div> <!-- 使用浮动 --> <!-- <div class="middle">中间自适应</div> --> </div> </body> </html>
缺点: 三栏高度不统一
flex布局
设置父元素为display:flex,中间元素设置为flex:1;
/* 3. flex布局 */ #wrapper { display: flex; justify-content: space-between; } .middle { flex: 1; }
图同上