• 元素完全居中的方法


    如何简单方便地让元素居中呢?在不同情况下写法或许还得不一样,下面我们直入主题,说几个居中的方法:

    方法一:(个人觉得最好用的一种)

    .parent{
      position: relative;
    }
    .child {
      position: absolute;
      margin: auto;
      top: 0; left: 0; bottom: 0; right: 0;
      height:20px;/*元素高度是必须的*/
    }

    注意:浏览器支持:Chrome、Firefox、Safari、Mobile Safari、IE8-10,这种方法在Windows Phone上不起作用

    方法二、负margin值

    这或许是最常用的方法。如果知道了各个元素的大小,设置等于宽高一半大小的负margin值(如果没有使用box-sizing: border-box样式,还需要加上padding值),再配合top: 50%; left: 50%;样式就会使块元素居中。

    .child {
            width: 300px;
            height: 200px;
            padding: 20px;
            position: absolute;
            top: 50%; left: 50%;
            margin-left: -170px; /* (width + padding)/2 */
            margin-top: -120px; /* (height + padding)/2 */
    }
    /*这是按照预想情况也能在工作在IE6-7下的唯一方法。*/

    方法三、transform法

    .child { 
      width: 50%;
      margin: auto;
      position: absolute;
      top: 50%; left: 50%;
      -webkit-transform: translate(-50%,-50%);
          -ms-transform: translate(-50%,-50%);
              transform: translate(-50%,-50%);
    }

    注意:不支持IE8;需要写厂商前缀;会和其他transform样式有冲突;某些情况下的边缘和字体渲染会有问题;

    方法四、table-cell法

    .Center-Container.is-Table { display: table; }
    .is-Table .Table-Cell {
      display: table-cell;
      vertical-align: middle;
    }
    .is-Table .Center-Block {
      width: 50%;
      margin: 0 auto;
    }
    <div class="Center-Container is-Table">
      <div class="Table-Cell">
        <div class="Center-Block">
        <!-- CONTENT -->
        </div>
      </div>
    </div>
    
    

    方法五、inline-block法居中

    基本方法是使用 display: inline-blockvertical-align: middle样式和伪元素让内容块在容器中居中。我的实现用到了几个在其他地方见不到的新技巧解决了一些问题。

    内容区声明的宽度不能大于容器的100% 减去0.25em的宽度。就像一段带有长文本的区域。不然,内容区域会被推到顶端,这就是使用:after伪类的原因。使用:before伪类则会让元素有100%的大小!
    
    
    .Center-Container.is-Inline { 
      text-align: center;
      overflow: auto;
    }
     
    .Center-Container.is-Inline:after,
    .is-Inline .Center-Block {
      display: inline-block;
      vertical-align: middle;
    }
     
    .Center-Container.is-Inline:after {
      content: '';
      height: 100%;
      margin-left: -0.25em; /* To offset spacing. May vary by font */
    }
     
    .is-Inline .Center-Block {
      max-width: 99%; /* Prevents issues with long content causes the content block to be pushed to the top */
      /* max- calc(100% - 0.25em) /* Only for IE9+ */ 
    }
    
    
    

    <
    div class="Center-Container is-Inline"> <div class="Center-Block"> <!-- CONTENT --> </div> </div>
    注意:
    • 需要额外容器
    • 依赖于margin-left: -0.25em的样式,做到水平居中,需要为不同的字体大小作调整
    • 内容区声明的宽度不能大于容器的100% 减去0.25em的宽度
    方法六、Flexbox法
    CSS未来发展的方向就是采用Flexbox这种设计,解决像垂直居中这种共同的问题。请注意,Flexbox有不止一种办法居中,他也可以用来分栏,并解决奇奇怪怪的布局问题。
    .Center-Container.is-Flexbox {
      display: -webkit-box;
      display: -moz-box;
      display: -ms-flexbox;
      display: -webkit-flex;
      display: flex;
      -webkit-box-align: center;
         -moz-box-align: center;
         -ms-flex-align: center;
      -webkit-align-items: center;
              align-items: center;
      -webkit-box-pack: center;
         -moz-box-pack: center;
         -ms-flex-pack: center;
      -webkit-justify-content: center;
              justify-content: center;
    }
    /*不支持IE8-9*/
    
    

    对照表

    所用样式

    支持的浏览器

    是否 响应式

    内容溢出后的样式

    resize:both

    高度可变

    主要缺陷

    Absolute

    现代浏览器&IE8+

    会导致容器溢出

    是*

    ‘可变高度’的特性不能跨浏览器

    负margin值

    所有

    带滚动条

    大小改变后不再居中

    不具有响应式特性,margin值必须经过手工计算

    Transform

    现代浏览器&IE9+

    会导致容器溢出

    妨碍渲染

    Table-Cell

    现代浏览器&IE8+

    撑开容器

    会加上多余的标记

    Inline-Block

    现代浏览器&IE8+&IE7*

    撑开容器

    需要使用容器包裹和hack式的样式

    Flexbox

    现代浏览器&IE10+

    会导致容器溢出

    需要使用容器包裹和厂商前缀(vendor prefix)
     
  • 相关阅读:
    第一讲小结(位运算)
    新学期开始
    前缀表达式-怎样用空格分隔一个字符串
    计概期末前的小小总结
    动规作业-求数组不相邻元素之和的最大值
    网格-递归作业2-放苹果问题
    1025 数的划分(搜索和递推方法)
    网格-递归作业 集合里的乘法
    网格-递归作业 城堡问题
    去先导零的一个大坑
  • 原文地址:https://www.cnblogs.com/suming1016/p/5784820.html
Copyright © 2020-2023  润新知