• CSS垂直居中


    本文讨论的垂直居中仅支持IE8+

      1、使用绝对定位垂直居中

      绝对对位原理:元素在过度受限情况下,将margin设置为auto,浏览器会重算margin的值,过度受限指的是同时设置top/bottom与height或者left/right与width。

      <div class="container">
             <div class="center absolute_center">
                 生活不能等待别人来安排,要自已去争取和奋斗;<br>
                 而不论其结果是喜是悲,但可以慰藉的是,你总不枉在这世界上活了一场。<br>
                 有了这样的认识,你就会珍重生活,而不会玩世不恭;同时,也会给人自身注入一种强大的内在力量。
             </div>
         </div>  
      .absolute_center{
              position:absolute;
              200px;
              height:200px;
              top:0;
              bottom:0;
              left:0;
              right:0;
              margin:auto;
              background:#518fca;
              resize:both;/*用于设置了所有除overflow为visible的元素*/
              overflow:auto;
      }

      使用绝对定位要求元素必须设置明确高度。内容超过元素高度时需要设置overflow决定滚动条的出现

      优点:支持响应式,只有这种方法在resize之后仍然垂直居中

      缺点:没有显式设置overflow时,内容超过元素高度时会溢出,没有滚动条,不支持使用min/max-width

     

      2、负marginTop方式

      已知元素高度后,使用绝对定位将top设置为50%,mergin-top设置为内容高度的一半(height + padding) / 2;内容超过元素高度时需要设置overflow决定滚动条的出现

      原理:top:50%元素上边界位于包含框中点,设置负外边界使得元素垂直中心与包含框中心重合;

      .negative_margin_top{
                    position:absolute;
                    top:50%;
                    left:0;
                    right:0;
                    margin:auto;
                    margin-top:-100px; /*-(height+padding)/2*/
                    200px;
                    height:200px;
                }    

      优点:代码量少、浏览器兼容性高支持ie6 ie7

      缺点:能使用百分比、不支持使用min/max-width

     

      3、借助额外元素floater

       元素高度已知,在center元素外插入一个额外元素floater,设置floater的height为50%;margin-bottom为center元素高度的一半(height + padding) / 2。内容超过元素高度时需要设置overflow决定滚动条的出现。

      原理与2方法类似,floater的下边界是包含框的中心线,负下外边界保证center的中心线与包含框中心线重合。

      <div class="container">
                <div class="floater"></div>
                <div class="center floater_center">
                    人和社会,一切斗争的总结局也许都是中庸而已。<br>
                    与其认真,不如随便,采菊东篱下,悠然见南山。有钱就寻一醉,无钱就寻一睡,与过无争,随遇而安。
                </div>
            </div>
      .container{
                    height:500px;
         }
      .floater{
                    height:50%;
                    margin-bottom:-100px;
            }
            .floater_center{
                    height:200px;
                    200px;
                    margin:auto;
            }

      优点:浏览器兼容性好,支持旧版本ie

      缺点:需要设定父元素的高度和额外元素,不支持响应式

     

      4、table-cell方式

      将center元素的包含框display设置为table,center元素的display设置为table-cell,vertical-align设置为middle。

      原理:利用表布局特点,vertical-align设置为middle后,单元格中内容中间与所在行中间对齐

      .container2{
        display:table;
        height:200px;
      }
      .table_cell{/*将cell垂直居中,如果外层div不为table则tablecell必须有高度*/
        display:table-cell;
        vertical-align:middle;
      }
      优点:支持任意内容的可变高度、支持响应式

      缺点:每一个需要垂直居中的元素都会需要加上额外标签(需要table、table-cell两个额外元素),父元素的高度需固定有值

      

      5、使用translate属性 

      <div class="wrap">
        <div class="content">hhh</div>
      </div>

       .wrap {
        position:relative;
        600px;
        height:400px;
        background:#ccc;
       }
       .content {
        position:absolute;
        top: 50%;
        left: 50%;
        100px;
        height:100px;
        background:red;
        transform: translate(-50%,-50%);
       }

       

      6、使用justify-content属性

       .wrap {
        height:400px;
        background:#ccc;
        display: flex;
        justify-content: center;
        align-items: center;
       }
       .content {
        100px;
        height:100px;
        background:red;
       }

       7、使用calc()方法

       .wrap {
        position: relative;
         600px;
        height: 400px;
        background:#ccc;
       }
       .content {
        position: absolute;
        left: calc((600px - 100px)/2);
        top: calc((400px - 100px)/2);
        left: -webkit-calc((600px - 100px)/2);
        top: -webkit-calc((400px - 100px)/2);
        100px;
        height:100px;
        background:red;
       }

      8、display和box组合

      {

        display:box;
        display: -webkit-box;
        -webkit-box-pack:center;
        -webkit-box-align:center;
        box-pack:center;
        box-align:center;

      }

  • 相关阅读:
    50个好用的前端框架,千万收好以留备用!
    嫦娥五号顺利升空,NASA、欧洲航天局回应
    【电脑故障排查】第1章 BIOS和主板故障
    我的老博客——我在chinaunix的家
    Linux操作系统(第二版)(RHEL 8/CentOS 8)
    Java Web整合开发(21) -- 宏观把握Hibernate
    3 远程仓库
    PHP设计模式-策略模式 转
    ubuntu server设置时区和更新时间
    ubuntu 重启 nginx 失败,* Restarting nginx nginx ...fail!
  • 原文地址:https://www.cnblogs.com/hmycheryl/p/7515769.html
Copyright © 2020-2023  润新知