zoukankan      html  css  js  c++  java
  • CSS水平垂直居中总结

    web开发网页布局中常常会碰到各种居中,由于浏览器渲染方式的不同,因此存在很多不同的场景,本文将个人平时遇到的一些场景一一列举,以备不时之需。示例代码地址:runjs

    1.垂直居中

    前提:假定父元素是盒子模型且高度已经设定。

    场景一:子元素是行内元素,高度由其内容撑开

    这种情况下,需要通过设定父元素的line-height为其高度来使子元素垂直居中

    html代码:

    <div class="wrap line-height">
        <span class="span">11111</span></div>

    css代码:

    .wrap{
                width:200px ;
                height: 200px;
                border: 2px solid #ccc;
                box-sizing: border-box;
         }
    .span{
                background: red;
         }
    .line-height{
                line-height: 200px;
            }

    效果:

    image

    场景二:子元素是块级元素且高度已经设定。

    方法1:

    计算子元素的margin-top货margin-bottom,计算方法为(父元素高度-子元素高度)/2

    html代码:

    <div class="wrap ">
        <div class="div1 margin">111111</div>

    css代码:

    .wrap{
                width:200px ;
                height: 200px;
                border: 2px solid #ccc;
                box-sizing: border-box;
         }
    .div1{
                width:100px ;
                height: 100px;
                box-sizing: border-box;
                background: darkblue;
            }
            .margin{
              margin-top: 50px;
            }

    效果图:

    image

    方法2:计算父元素的padding-top或padding-bottom,计算方法为(父元素高度-子元素高度)/2

    html代码:

    <div class="wrap  padding">
        <div class="div1 ">111111</div>

    css代码:

    .wrap{
                width:200px ;
                height: 200px;
                border: 2px solid #ccc;
                box-sizing: border-box;
         }
    .div1{
                width:100px ;
                height: 100px;
                box-sizing: border-box;
                background: blue;
            }
     .padding{
                padding-top: 50px;
            }

    效果图同上。

    方法3:利用绝对定位,让子元素相对于父元素绝对定位

    html代码:

    <div class="wrap  relative">
        <div class="div1 absolute">111111</div>

    css代码:

    .relative{
                position: relative;
            }
            .absolute{
                position: absolute;
                top:50%;
                margin-top: -50px;
            }
    .div1{
                width:100px ;
                height: 100px;
                box-sizing: border-box;
                background: blue;
            }
    .wrap{
                width:200px ;
                height: 200px;
                border: 2px solid #ccc;
                box-sizing: border-box;
         }

    效果图同上

    方法4:使用flexbox

    flex-direction:设置或检索伸缩盒对象的子元素在父容器中的位置。

    取值:row:默认值,横向从左至右排列(左对齐)。

               row-reverse:相对于row,反转横向排列。

               column:纵向排列。

               column-reverse:相对于column,反转纵向排列,最后一项在最上面。

    flex生效需定义其父元素display为flex或者inline-flex。

    justify-content:设置货检索弹性盒子元素在主轴(横轴)方向上的对齐方式。

    html代码:

    <div class="wrap  flex">
        <div class="div1 ">111111</div>
    </div>

    css代码:

    .flex{
                display: flex;
                flex-direction: column;
                justify-content: center;
            }

    以上css代码请自行加上-moz-,-webkit-。

    场景三:子元素是块级元素且高度没有设定。

    方法一:给父元素设定display:table-cell;vertical-align:middle。

    方法二:使用flexbox,同场景二方法4。

    2.水平居中

    前提:父元素必须是块级盒子容器,父元素宽度已经设定好。

    场景一:子元素是块级元素且宽度没有设定。

    该情况下,实际上不存在水平居中一说,因为子元素会充满整个父级元素的宽度。

    场景二:子元素是行内元素,子元素宽度由其内容撑开。

    该情况下,给父元素设定text-align:center即可。

    场景三:子元素是块级元素,且宽度已经设定。

    方法一:

    给子元素加上margin:0 auto;

    html代码:

    <div class="wrap">
        <div class="child auto">
            non-child
        </div>
    </div>

    css代码:

    .child{
                width: 100px;
                height: 100px;
                background: green;
                box-sizing: border-box;
            }
            .auto{
                margin:0 auto;
            }
    .wrap{
                width:200px ;
                height: 200px;
                border: 2px solid #ccc;
                box-sizing: border-box;
         }

    效果图:

    image

    方法二:通过计算父元素的padding-left或padding-right,计算方法(父元素宽度-子元素宽度)/2

    html代码:

    <div class="wrap padding">
        <div class="child ">
            non-child
        </div>

    css代码:

    .padding{
                padding-left: 50px;
            }

    方法三:通过计算子元素的margin-left或margin-rigth,计算方法同方法三。

    方法四:通过子元素相对父元素绝对定位。

    html代码:

    <div class="relative1">
        <div class="child absolute1">
            non-child
        </div>
    </div>

    css代码:

    .relative1{
                width: 300px;
                height: 200px;
                border: 2px solid #ccc;
                box-sizing: border-box;
                position: relative;
            }
            .absolute1{
                position: absolute;
                left:50%;
                margin-left:-50px;
            }

    效果图同上,这里还要设定子元素margin-left为-50px(子元素宽度/2)是需要消除父元素50%造成的偏移。

    方法五:使用flexbox

    html代码:

    <div class="flex1">
        <div class="child ">
            non-child
        </div>
    </div>

    css代码:

    .flex1{
                width: 300px;
                height: 200px;
                border: 2px solid #ccc;
                box-sizing: border-box;
                display:flex;
                flex-direction: row;
                justify-content:center;
            }

    效果同上。

  • 相关阅读:
    iphone/iOS 访问本地数据库sqlite3
    SQLITE3 --详解
    iOS使用MD5
    ASIHTTPRequest实现断点续传
    ios开发
    iOS 5的文件存储策略应对
    由ASIHttpRequest里的block引发的思考
    Blocks编程要点
    [Cocoa]深入浅出Cocoa多线程编程之 block 与 dispatch quene
    ASIHTTPRequest 问题总结
  • 原文地址:https://www.cnblogs.com/sunjl/p/4398862.html
Copyright © 2011-2022 走看看