居中的几种方式
2018-10-20 本文已影响0人
TraderNayuta
水平居中
-
对于行内元素: 在其父元素上使用
text-align: center
-
对于定宽的块级元素:
margin-left: auto; margin-right: auto
.content { width: 100px; position: absolute; left: 50%; margin-left: -50px; }
.content { width: 100px; position: absolute; top: 0; right: 0; bottom: 0; left: 0; margin: auto; }
-
对于宽度不定的块级元素
.content { position: absolute; left: 50%; transform: translateX(-50%); /* 移动元素本身50% */ }
-
相对定位实现水平居中
用float或者display把父元素变成行内块状元素.parent { display: inline-block; /* 把父元素转化为行内块状元素 */ /*float: left; 把父元素转化为行内块状元素 */ position: relative; left: 50%; } /*目标元素*/ .content { position: relative; right: 50%; }
-
CSS3的flex实现水平居中方法
.parent { display: flex; flex-direction: column; } .content { align-self: center; }
.parent { display: flex; } .content { margin: auto; }
.parent { display: flex; justify-content: center; }
-
CSS3的fit-content配合左右margin为auto实现水平居中方法
.content { width: fit-content; margin-left: auto; margin-right: auto; }
-
table标签配合margin左右auto实现水平居中
使用table标签(或直接将块级元素设值为display:table),再通过给该标签添加左右margin为auto(不推荐使用table,违反语义化) -
inline-block实现水平居中方法
display:inline-block;(或display:inline)和text-align:center;
实现水平居中(这种方法有问题,不推荐,因为inline-block元素之间会有空隙,可以用负margin解决)
垂直居中
关于垂直居中,最好的方式就是父元素不给定高度,则只需要使用padding: npx 0
就可以实现垂直居中
如果父元素给定了高度,则:
-
使用table的特性
<table class="parent"> <tr> <td class="child"> xxx </tr> </table>
-
可以将标签伪装为table
<div class="table"> <div class="td"> <div class="child"> xxx </div> </div> </div>
div.table { display: table; height: 400px; } div.tr { display: table-row; } div.td { display: table-cell; vertical-align: middle; } .child { border: 10px solid black; }
-
绝对定位
.parent { height: 400px; position: relative; } .content { height: 100px; position: absolute; top: 50%; margint-top: -50px; }
.parent { height: 400px; position: relative; } .content { position: absolute; top: 50%; transform: translateY(-50%); }
.parent { height: 600px; position: relative; } .child { position: absolute; height: 200px; top: 0; bottom: 0; left: 0; right: 0; margin: auto; }
-
flex
.parent { height: 400px; display: flex; align-items: center; } .content { width: 300px; }
-
100%高度的after before加上 inline-block
.parent { height: 400px; text-align: center; } .content { display: inline-block; width: 200px; vertical-align: middle; } .parent:before { display: inline-block; height: 100%; vertical-align: middle; } .parent:after { display: inline-block; height: 100%; vertical-align: middle; }