水平居中
1、行内元素——设置 text-align:center
2、定宽块状元素——设置 左右 margin 值为 auto
3、不定宽块状元素
- a:在元素外加入 table 标签(完整的,包括 table、tbody、tr、td),该元素写在 td 内,然后设置 margin 的值为 auto
- b:给该元素设置 display:inline 方法
- c:父元素设置 position:relative 和 left:50%,子元素设置 position:relative 和 left:50%
垂直居中
文本类:
1、父元素高度确定的单行文本
设置 height = line-height
2、父元素高度确定的多行文本
- a:插入 table (插入方法和水平居中一样),然后设置 vertical-align:middle
- b:先设置 display:table-cell 再设置 vertical-align:middle
非文本类:
1,使用position:absolute(或者fixed),设置left、top、margin-left、margin-top的属性
.one{
position:absolute;
width:200px;
height:200px;
top:50%;
left:50%;
margin-top:-100px;
margin-left:-100px;
background:red;
}
这种方法基本浏览器都能够兼容,不足之处就是需要固定宽高。
position:fixed,IE是不支持这个属性的
2,利用position:absolute/fixed属性,margin:auto这个必须不要忘记了。
.two{
position:fixed;
width:160px;
height:160px;
top:0;
right:0;
bottom:0;
left:0;
margin:auto;
background:pink;
}
3,利用display:table-cell属性使内容垂直居中
.three{
display:table-cell;
vertical-align:middle;
text-align:center;
width:120px;
height:120px;
background:purple;
}
4,使用css3的display:-webkit-box属性,再设置-webkit-box-pack:center/-webkit-box-align:center
.four{
width:90px;
height:90px;
display:-webkit-box;
-webkit-box-pack:center;
-webkit-box-align:center;
background:yellow;
color:black;
}
5,使用css3的新属性transform:translate(x,y)属性
.five{
position:absolute;
width:80px;
height:80px;
top:50%;
left:50%;
transform:translate(-50%,-50%); // transform 前缀自行添加,webkit、moz、ms
}
这个方法可以不需要设定固定的宽高,在移动端用的会比较多,在移动端css3兼容的比较好
6, 还有一种方式 使用writing-mode
writing-mode: lr-tb | tb-rl | tb-lr (IE8+)
writing-mode: horizontal-tb | vertical-rl | vertical-lr;
img {
display: block;
margin: auto 0;
}
.vertical-mode {
writing-mode: vertical-rl;
}
<div class="box vertical-mode">
<img src="../1.jpg" alt="">
</div>
<div class="box vertical-mode" style="text-align: center;background: gray;">
<div class="demo">青花瓷</div>
</div>