CSS制作水平垂直居中对齐

一. 单行内容垂直居中

元素内容是单行,并且其高度是固定不变,只要给容器设置line-height和height,并使两值相等即可,还可设置overflow:hidden。

HTML

<div class="vertical">content</div>

CSS

.vertical {
    height: 100px;
    line-height: 100px;/*值等于元素高度的值*/
}

优点:

1.兼容所有浏览器

2.支持块级和行内元素

缺点:

1.只能显示一行

2.不支持<img>等的居中

二.多行内容垂直居中,且高度可变

只要设置padding-top和padding-bottom的值一致即可。

CSS

.vertical {
    padding-top:20px;
    padding-bottom:20px;    
}

优点:
1. 同时支持块级和内联极元素

2. 支持非文本内容

3. 支持所有浏览器

缺点:

容器不能固定高度

三. 多行元素来进行元素的垂直居中(水平居中同理,就不写了)

这种方法将在需要给容器设置绝对定位(position:absolute),并且定位高度(top:50%)和margin-top为高度的一半(margin-top:-height/2)

可设置overflow:auto或overflow:hidden。

HTML

<div class="vertical">content</div>

CSS

.vertical {
    height: 100px;/*元素的高度*/
    position: absolute;
    top: 50%;/*元素的顶部边界离父元素的的位置是父元素高度的一半*/
    margin-top: -50px;/*设置元素顶边负边距,大小为元素高度的一半*/
}

优点:

能在各浏览器下工作,结构简单明了,不需增加额外的标签

缺点:

由于固定死元素的高度,致使没有足够的空间,当内容超过容器的大小时,要么会消失,要么会出现滚动条。

四.多行元素垂直居中

div模拟表格单元效果,设置display:table-cell

HTML

<div id="container">
    <div id="content">content</div>
</div>

CSS

#container {
    height: 300px;
    display: table;/*让元素以表格形式渲染*/
} #content { display:table-cell;/*让元素以表格的单元素格形式渲染*/ vertical-align: middle;/*使用元素的垂直对齐*/ }

优点:

此方法可以要据元素内容动态的改变高度,从而也就没有空间的限制,元素的内容不会因为没足够的空间而被切断或者出现滚动条。

缺点:

只适合现代浏览器。但是在IE6-7中是不被支持的,因为display:table-cell在IE6-7中不被支持,那么为了解决这种方法在IE6-7的兼容,需要额外增加一个div,并使用hack,下面我们一起来看看其解决办法。

HTML

<div class="table">
    <div class="tableCell">
        <div class="content">content</div>
    </div>
</div>

CSS

.table {
        height: 300px;/*高度值不能少*/
        width: 300px;/*宽度值不能少*/
        display: table;
        position: relative;
        float:left;
        background:#ccc;
}        
.tableCell {
    display: table-cell;
    vertical-align: middle;
    text-align: center;            
    *position: absolute;
    *top: 50%;
    *left: 50%;
}
.content {
    *position:relative;
    *top: -50%;
    *left: -50%;
}

 五.单行或多行垂直居中

这种方法是采用的display:inline-block,然后借助另一个元素的高度来实现居中

HTML

<div id="Div1">
    <div id="Div2">
        <p>I am vertically centered!</p>
    </div>
    <div id="Div3"><!-- ie comment --></div>
</div>

CSS

html,body{
    height: 100%;
}

#parent {
    height: 100px;/*定义高度,让线盒型div#extra有一个参照物,可以是固定值,也可以是百分比*/
    border: 1px solid red;
}
#vertically_center,
#extra {
    display: inline-block;/*把元素转为行内块显示*/
    vertical-align: middle;/*垂直居中*/
}
#extra {
    height: 100%; /*设置线盒型为父元素的100%高度*/
}

优点:

可以自适应高度,简单易懂 

缺点:

需要给元素的父元素设置一个高度,这个高度可以是一个固定值或者百分值高度,另外需要增加一个额外的标签,当作线盒型,如div#extra,并且需要设置其高度为100%。另外就是ie6-7不支持display:inline-block,需要给他们另外写一个样式。

这是一个很有意思的方法,但你要懂得如何使用display。有关于这种方法的操作,大家可以去看一看Jonathan Potter写的《CSS, Vertical Centering

六.内容垂直居中

HTML

<div id="floater"><!--This block have empty content --></div>
<div id="content">Content section</div>

CSS

html,body {height: 100%;}
#floater{            
    height:50%;/*相对于父元素高度的50%*/
    margin-bottom: -120px;/*值大小为居中元素高度的一半(240px/2)*/
}
#content {
    height: 240px;
    position: relative;
    background:#ccc;
}

优点:

这种方法能兼容所有浏览器,在没有足够空间下,内容不会被切掉

缺点:

元素高度被固定死,无法达到内容自适应高度,如果居中元素加上overflow属性,要么元素出现滚动条,要么元素被切掉;另外就是一个不算缺点的缺点,那就是加了一个空标签。

实现的方法很多,实际应用中用哪种方法合适,你可以仔细的对比一下,最后一种方法,代码简单,兼容性好。

原文地址:https://www.cnblogs.com/sensualgirl/p/3669252.html