
源代码:
<div class="out">
    <div class="in">Content here</div>
</div> .out{
     width: 300px;
     height: 400px;
     margin: 20px auto 0;
    background:red;
 }
 .in{
     width: 100px;
     height: 100px;
     background: blue;
     line-height: 100px;
 }运行图:

1.使用表格法:
运行图:

.out{
     display: table;
     text-align: center;
 }
 .in{
   display: table-cell;
   vertical-align: middle;
 }缺点:子元素的会撑满父元素。
2.绝对定位计算:对子元素使用绝对定位,并分别移动上左50%,再分别margin-top:-50%height px,margin-left:-50%width px;
运行图:

.in{
    position: absolute;
    top: 50%;
    left: 50%;
    margin-left: -50px;
    margin-top: -50px;
    
 }缺点:需要对子元素的宽高固定,并且绝对定位容易影响布局。
3. 利用绝对定位和translate。
同上,先左上各自移动50%,再使用transform: translate(-50%, -50%);translate是基于自身元素的宽高为基准进行移动的。
运行图同上。
.in{
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%); 
 }缺点:需要绝对定位。
4. 基于Flex.
运行图同上。
.out{
   display: flex;
 }
 .in{
    margin: auto; 
 }优点:代码简单。
缺点:兼容性差。