水平垂直居中
文本的水平垂直居中
text-align + line-height
盒模型的水平垂直居中
绝对定位 + top:50%;left:50%; + margin-left,margin-top元素宽高的一半
弹性布局 display:flex; + justify-content:center; + align-items:center;
表格布局 display:table;text-align:center;
+ display:table-cell;vertical-align:middle;
三栏布局
左右两栏宽度固定,中间一栏自适应宽度。
实现三栏布局的几种方法:
最古老的table的布局,三个td搞定
float布局:middle必须放最后
middle如果放在right前,没有设置浮动,和right不在一个流中会把right挤下去
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| html,body,div{ height: 100%; } .middle{ margin: 0 200px; } .left, .right{ background-color: purple; width: 200px; } .left{ float: left; } .right{ float: right; } <div class="left"></div> <div class="right"></div> <div class="middle"></div>
|
absolute布局:middle可以放中间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| html,body,div{ height: 100%; } .middle{ margin: 0 200px; } .left, .right{ background-color: purple; width: 200px; position: absolute; top: 0; } .left{ left: 0; } .right{ right: 0; } <div class="left"></div> <div class="middle"></div> <div class="right"></div>
|
flex一维布局
父元素设置flex布局,子元素中需要自适应宽度的设置flex:1;,通过order来实现对子元素排列顺序的控制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| html,body,div{ height: 100%; } .container{ display: flex; } .middle{ order: 2; flex: 1; } .left, .right{ background-color: purple; width: 200px; } .left{ order: 1; } .right{ order: 3; } <div class="container"> <div class="left"></div> <div class="middle"></div> <div class="right"></div> </div>
|
grid: 目前仍然在W3C草案中的栅格二维布局,需要确定浏览器支持
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| html,body,div{ height: 100%; } .container{ display: grid; grid-template-columns: 200px auto 200px; grid-template-rows: 100%; } .middle{ } .left, .right{ background-color: purple; width: 200px; } .left{ } .right{ } <div class="container"> <div class="left"></div> <div class="middle"></div> <div class="right"></div> </div>
|
两列布局
左栏固定宽度,右栏自适应宽度
1 2 3 4 5 6 7 8 9 10 11 12 13
| html,body,div{ height: 100%; } .left{ width: 200px; float: left; } .right{ margin-left: 200px; } <div class="left"></div> <div class="right"></div>
|
也可以触发右栏元素的BFC实现自适应,见BFC这篇博文。
Reference
CSS制作水平垂直居中对齐
Flex
CSS Grid