zoukankan      html  css  js  c++  java
  • CSS实现水平垂直同时居中的6种思路

    前面的话

      水平居中垂直居中已经单独介绍过,本文将介绍水平垂直同时居中的6种思路

    水平对齐+行高

    思路一text-align + line-height实现单行文本水平垂直居中

    <style>
    .test{
        text-align: center;
        line-height: 100px;
    }
    </style>
    <div class="test" style="background-color: lightblue; 200px;">测试文字</div>   

    水平+垂直对齐

    【思路二】text-align + vertical-align

    【1】在父元素设置text-alignvertical-align,并将父元素设置为table-cell元素,子元素设置为inline-block元素

      [注意]若兼容IE7-浏览器,将结构改为<table>结构来实现table-cell的效果;用display:inline;zoom:1;来实现inline-block的效果

    <style>
    .parent{
        display: table-cell;
        text-align: center;
        vertical-align: middle;
    }
    .child{
        display: inline-block;
    }
    </style>
    <div class="parent" style="background-color: gray; 200px; height:100px;">
      <div class="child" style="background-color: lightblue;">测试文字</div>
    </div> 

    【2】若子元素是图像,可不使用table-cell,而是其父元素用行高替代高度,且字体大小设为0。子元素本身设置vertical-align:middle

    <style>
    .parent{
        text-align: center;
        line-height: 100px;
        font-size: 0;
    }
    .child{
        vertical-align: middle;
    }
    </style>
    <div class="parent" style="background-color: gray; 200px; ">
      <img class="child" src="http://sandbox.runjs.cn/uploads/rs/26/ddzmgynp/img1.gif" width="50%" alt="test">
    </div>  

    margin+垂直对齐

    【思路三】margin + vertical-align

      要想在父元素中设置vertical-align,须设置为table-cell元素;要想让margin:0 auto实现水平居中的块元素内容撑开宽度,须设置为table元素。而table元素是可以嵌套在tabel-cell元素里面的,就像一个单元格里可以嵌套一个表格

      [注意]若兼容IE7-浏览器,需将结构改为<table>结构

    <style>
    .parent{
        display:table-cell;
        vertical-align: middle;
    }
    .child{
        display: table;
        margin: 0 auto;
    }
    </style>
    <div class="parent" style="background-color: lightgray; 200px; height:100px; ">
      <div class="child" style="background-color: lightblue;">测试文字</div>
    </div>  

    绝对定位

    【思路四】使用absolute

    【1】利用绝对定位元素的盒模型特性,在偏移属性为确定值的基础上,设置margin:auto

    <style>
    .parent{
        position: relative;
    }
    .child{
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        height: 50px;
        width: 80px;
        margin: auto;
    }
    </style>
    <div class="parent" style="background-color: lightgray; 200px; height:100px; ">
      <div class="child" style="background-color: lightblue;">测试文字</div>
    </div>  

    【2】利用绝对定位元素的偏移属性和translate()函数的自身偏移达到水平垂直居中的效果

      [注意]IE9-浏览器不支持

    <style>
    .parent{
        position: relative;
    }
    .child{
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%,-50%);
    }
    </style>
    <div class="parent" style="background-color: lightgray; 200px; height:100px; ">
      <div class="child" style="background-color: lightblue;">测试文字</div>
    </div>  

    【3】在子元素宽高已知的情况下,可以配合margin负值达到水平垂直居中效果

    <style>
    .parent{
        position: relative;
    }
    .child{
        position: absolute;
        top: 50%;
        left: 50%;
        width: 80px;
        height: 60px;
        margin-left: -40px;
        margin-top: -30px;
    }
    </style>
    <div class="parent" style="background-color: lightgray; 200px; height:100px; ">
      <div class="child" style="background-color: lightblue;">测试文字</div>
    </div>  

    flex

    【思路五】使用flex

      [注意]IE9-浏览器不支持

    【1】在伸缩项目上使用margin:auto

    <style>
    .parent{
        display: flex;
    }
    .child{
        margin: auto;
    }
    </style>
    <div class="parent" style="background-color: lightgray; 200px; height:100px; ">
      <div class="child" style="background-color: lightblue;">测试文字</div>
    </div>  

    【2】在伸缩容器上使用主轴对齐justify-content和侧轴对齐align-items

    <style>
    .parent{
        display: flex;
        justify-content: center;
        align-items: center;
    }
    </style>
    <div class="parent" style="background-color: lightgray; 200px; height:100px; ">
      <div class="child" style="background-color: lightblue;">测试文字</div>
    </div>  

    grid

    【思路六】使用grid

      [注意]IE10-浏览器不支持

    【1】在网格项目中设置justify-self、align-self或者margin:  auto

    <style>
    .parent{
        display: grid;
    }
    .child{
        align-self: center;
        justify-self: center;
    /*     margin: auto; */
    }
    </style>
    <div class="parent" style="background-color: lightgray; 200px; height:100px; ">
      <div class="child" style="background-color: lightblue;">测试文字</div>
    </div> 

    【2】在网格容器上设置justify-items、align-items或justify-content、align-content

    <style>
    .parent{
        display: grid;
        align-items: center;
        justify-items: center;
        /* align-content: center; */
        /* justify-content: center; */
    }
    </style>
    <div class="parent" style="background-color: lightgray; 200px; height:100px; ">
      <div class="child" style="background-color: lightblue;">测试文字</div>
    </div> 

  • 相关阅读:
    python Database Poll for SQL SERVER
    SQLAlchemy表操作和增删改查
    flask动态url规则
    flask配置管理
    一个Flask运行分析
    Function Set in OPEN CASCADE
    Happy New Year 2016
    Apply Newton Method to Find Extrema in OPEN CASCADE
    OPEN CASCADE Multiple Variable Function
    OPEN CASCADE Gauss Least Square
  • 原文地址:https://www.cnblogs.com/xiaohuochai/p/5441210.html
Copyright © 2011-2022 走看看