zoukankan      html  css  js  c++  java
  • 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属性,要么元素出现滚动条,要么元素被切掉;另外就是一个不算缺点的缺点,那就是加了一个空标签。

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

  • 相关阅读:
    .NET的堆和栈01,基本概念、值类型内存分配
    C#中List<T>是怎么存放元素的
    MVC为用户创建专属文件夹
    c#中何时使用Empty()和DefalutIfEmpty()
    MVC中使用AngularJS-01,基本
    MVC使用Dotnet.HighCharts做图表01,区域图表
    MVC使用Gantt Chart实现甘特图,管理事情进度
    Knockout官网实例在MVC下的实现-02,实现计次
    MVC实现多选下拉框,保存并显示多选项
    Knockout官网实例在MVC下的实现-01,实现Hello world
  • 原文地址:https://www.cnblogs.com/sensualgirl/p/3669252.html
Copyright © 2011-2022 走看看