1.浮动
优点:简单兼容性好
缺点:需要给父盒子清除浮动,否则父元素的高度无法撑开,导致其他页面元素混乱
| <div class="container"> |
| // 浮动:盒子的布局方式必须是 左 右 中 |
| <div class="left">左边区域</div> |
| <div class="right">右边区域</div> |
| <div class="center">中间区域</div> |
| </div> |
复制
| .container{ |
| border: 1px solid black; |
| overflow: hidden; |
| } |
| .left{ |
| float: left; |
| border: 1px solid red; |
| width: 100px; |
| } |
| .right{ |
| float: right; |
| border: 1px solid green; |
| width: 100px; |
| } |
| .center{ |
| margin: 0 100px; |
| border: 1px solid black; |
| } |
复制
2.绝对定位
两边通过绝对定位定位到父盒子的左右边框上,再根据实际的需要设置两边盒子的宽度,中间内容通过定位属性左右自适应宽度
| <div class="container"> |
| <div class="left">左边区域</div> |
| <div class="center">中间区域</div> |
| <div class="right">右边区域</div> |
| </div> |
复制
| .container{ |
| position: relative; |
| } |
| .left{ |
| position: absolute; |
| left: 0; |
| width: 100px; |
| border: 1px solid red; |
| } |
| .center{ |
| position: absolute; |
| left: 100px; |
| right: 100px; |
| border: 1px solid #000; |
| } |
| .right{ |
| position: absolute; |
| right: 0; |
| width: 100px; |
| border: 1px solid red; |
| } |
复制
3.flex布局
| <div class="container"> |
| <div class="left">左边区域</div> |
| <div class="center">中间区域</div> |
| <div class="right">右边区域</div> |
| </div> |
复制
| .container{ |
| display: flex; |
| } |
| .left{ |
| width: 100px; |
| border: 1px solid red; |
| } |
| .center{ |
| flex: 1; |
| border: 1px solid #000; |
| } |
| .right{ |
| width: 100px; |
| border: 1px solid red; |
| } |
复制
4.grid布局
使用grid网格布局实现三列布局,中间自适应
| <div class="container"> |
| <div class="left">左边区域</div> |
| <div class="center">中间区域</div> |
| <div class="right">右边区域</div> |
| </div> |
复制
| .container{ |
| display: grid; |
| grid-template-columns: 100px auto 100px; |
| } |
| .left,.center,.right{ |
| border: 1px solid black; |
| } |
复制
5.圣杯布局
三个盒子放在同一个父元素下 盒子布局 中 左 右,父盒子设置左右padding,三个盒子全部左浮动,设置中间盒子的宽度是100%,左右盒子固定;左盒子左边距设置-100%,设置相对定位,向左移动自身的宽度;右盒子移动自身的宽度,将左边距设置成-自身宽度
| <div class="container"> |
| <div class="center">中间区域</div> |
| <div class="left">左边区域</div> |
| <div class="right">右边区域</div> |
| </div> |
复制
| .container{ |
| border: 1px solid #000; |
| overflow: hidden; |
| padding: 0 100px; |
| } |
| .left{ |
| background-color: aqua; |
| width: 100px; |
| |
| float: left; |
| |
| margin-left: -100%; |
| |
| position: relative; |
| left: -100px; |
| } |
| .center{ |
| float: left; |
| width: 100%; |
| border: 1px solid #000; |
| } |
| .right{ |
| float: left; |
| width: 100px; |
| margin-left: -100px; |
| position: relative; |
| left: 100px; |
| background-color: blueviolet; |
| } |
复制
6.双飞翼布局
解决了圣杯布局中布局发生错乱的问题。核心思路是在圣杯布局的基础上,再在内容添加一层新的盒子,该盒子通过外边距将内容与两边的浮动元素分隔开
| <div class="container"> |
| |
| <div class="center"> |
| <div class="main">中间区域</div> |
| </div> |
| <div class="left">左边区域</div> |
| <div class="right">右边区域</div> |
| </div> |
复制
| .container{ |
| border: 1px solid #000; |
| |
| overflow: hidden; |
| } |
| .left{ |
| width: 100px; |
| |
| float: left; |
| |
| margin-left: -100%; |
| background-color: aqua; |
| } |
| .center{ |
| float: left; |
| border: 1px solid red; |
| width: 100%; |
| } |
| .right{ |
| float: left; |
| width: 100px; |
| margin-left: -100px; |
| background-color: blanchedalmond; |
| } |
| .main{ |
| margin: 0 100px; |
| } |
复制