九种css方式让一个容器水平垂直居中

方法一:position加margin
方法二: diaplay:table-cell
方法三:position加 transform
方法四:flex;align-items: center;justify-content: center
方法五:display:flex;margin:auto
方法六:纯position
方法七:兼容低版本浏览器,不固定宽高

  效果图都为这个:

  

 

方法一:position加margin

<div class="wrap">
<div class="center"></div>
</div>
.wrap {
width: 200px;
height: 200px;
background: yellow;
position: relative;
}
.wrap .center {
width: 100px;
height: 100px;
background: green;
margin: auto;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}

兼容性:主流浏览器均支持,IE6不支持

 

方法二: diaplay:table-cell

<div class="wrap">
<div class="center"></div>
</div>
方法一:
.wrap{
width: 200px;
height: 200px;
background: yellow;
display: table-cell;
vertical-align: middle;
text-align: center;
}
.center{
display: inline-block;
vertical-align: middle;
width: 100px;
height: 100px;
background: green;
}
方法二:
.wrap{
width: 200px;
height: 200px;
background: yellow;
display: table-cell;
vertical-align: middle;
}
.center{
width: 100px;
height: 100px;
background: green;
margin:0 auto;
}

 

兼容性:由于display:table-cell的原因,IE6\7不兼容

 

方法三:position加 transform

<div class="wrap">
<div class="center"></div>
</div>
.wrap {
position: relative;
background: yellow;
width: 200px;
height: 200px;}

.center {
position: absolute;
background: green;
top:50%;
left:50%;
-webkit-transform:translate(-50%,-50%);
transform:translate(-50%,-50%);
width: 100px;
height: 100px;
}

兼容性:ie9以下不支持 transform,手机端表现的比较好。

 

方法四:flex;align-items: center;justify-content: center

<div class="wrap">
<div class="center"></div>
</div>
.wrap {
background: yellow;
width: 200px;
height: 200px;
display: flex;
align-items: center;
justify-content: center;
}

.center {
background: green;
width: 100px;
height: 100px;
}

移动端首选

 

方法五:display:flex;margin:auto

<div class="wrap">
<div class="center"></div>
</div>
.wrap {
background: yellow;
width: 200px;
height: 200px;
display: flex;
}

.center {
background: green;
width: 100px;
height: 100px;
margin: auto;
}

移动端首选

 

方法六:纯position

<div class="wrap">
<div class="center"></div>
</div>
.wrap {
background: yellow;
width: 200px;
height: 200px;
position: relative;
}
/方法一/
.center {
background: green;
position: absolute;
width: 100px;
height: 100px;
left: 50px;
top: 50px;

}
/方法二/
.center {
background: green;
position: absolute;
width: 100px;
height: 100px;
left: 50%;
top: 50%;
margin-left:-50px;
margin-top:-50px;
}

兼容性:适用于所有浏览器

方法六中的方法一计算公式如下:

子元素(conter)的left值计算公式:left=(父元素的宽 - 子元素的宽 ) / 2=(200-100) / 2=50px;
子元素(conter)的top值计算公式:top=(父元素的高 - 子元素的高 ) / 2=(200-100) / 2=50px;

方法二计算公式:
left值固定为50%;
子元素的margin-left= -(子元素的宽/2)=-100/2= -50px;
top值也一样,固定为50%

子元素的margin-top= -(子元素的高/2)=-100/2= -50px;

 


方法七:兼容低版本浏览器,不固定宽高

<div class="table">
<div class="tableCell">
<div class="content">不固定宽高,自适应</div>
</div>
</div>
.table {
height: 200px;/高度值不能少/
width: 200px;/宽度值不能少/
display: table;
position: relative;
float:left;
background: yellow;
}

.tableCell {
display: table-cell;
vertical-align: middle;
text-align: center;
position: absolute;
padding: 10px; top: 50%;
left: 50%;
}
.content { position:relative;
top: -50%; left: -50%;
background: green;
}

 

方法八:垂直居中--行内块级元素

.parent::after, .son{
    display:inline-block;
    vertical-align:middle;
}
.parent::after{
    content:'';
    height:100%;
}

基本思想是使用display: inline-block, vertical-align: middle和一个伪元素让内容块处于容器中央,这是一种很流行的方法, 也适应IE7

 

方法九:增加一个空白标签

 

<div class="center">
    <span>居中</span>
    <i class="iblock"></i>
</div>
.center {
    width: 300px;
    height: 300px;
    margin: 20px auto;
    background: #00f;
    text-align:center
}
.center span {
    display: inline-block;
    width: 100px;
    height: 100px;
    background-color: yellow;
    vertical-align: middle;
}
.center .iblock {
    display:inline-block;
    height:100%;
    width:0;
    vertical-align:middle
}

  

 

参考链接:
http://www.jianshu.com/p/8cc1484cc580#
https://juejin.im/post/58f818bbb123db006233ab2a
posted @ 2016-10-20 17:33  achenxy  阅读(182)  评论(0)    收藏  举报