• 垂直居中


    不得不说,对于前端而言,垂直居中似乎成了一道迈不过去的坎,每一个前端基本上都踩过类似的坑,每一个前端博主的文章中似乎都有这么一篇关于垂直居中的文章。

    我也不能免俗,就试试看自己能写出几种垂直居中的方案吧(完全css方案,不使用任何js配合)!

    为了显示效果能更方便观察,首先清除整个浏览器的所有默认样式,简单起见,直接使用通配符清除。

    *{
      margin: 0;
      padding: 0;
    }
    

      

    1、应该属于最简单的一类,利用对内联标签设置行高的方式

    <div class="center1">
        <p>
          垂直居中,似乎是每一个前端都面对过的比较棘手的问题。
        </p>
    </div>
    

      后面如果没有重写html标签,默认使用该结构,仅仅将div的class一句序号替换一下,以方便一一对应。

    css样式:

    .center1{
           400px;
          height: 200px;
          background: pink;
          line-height: 200px;
          text-align: center;
          margin: 1em;
    }
    .center1 > p{
           200px;
          display: inline-block;
          vertical-align: middle;
          line-height: 1.5;
          background: #ccc;
          text-align: left;
    }
    

      这里对内部标签p设置display:inline-block;使其在一定程度上具有内联标签的特性,对父元素div设置text-align:center;使其水平方向居中,line-height:200px;利用的是单行文本垂直居中的原理。

    2、通过设置父元素的display:box盒模型

    .center2{
          margin: 1em;
           400px;
          height: 200px;
          background: pink;
          display: -webkit-box;
          -webkit-box-align: center;
          -webkit-box-pack: center;
    }
    .center5>p{
           200px;
          background: #ccc;
    }
    

     利用盒模型设置居中,box-align: center; 垂直居中, box-pack: center; 水平居中。

    3、通过设置父元素的display:flex,就是我们常说的flex布局,在一定程度上这个方案应该会成为以后的主流方案。

    .center3{
          margin: 1em;
           300px;
          height: 200px;
          background: pink;
          display: flex;
          align-items: center;
          justify-content: center;
    }
    
    .center3>p{
           200px;
          background: #ccc;
    }
    

      justify-content: center;定义了子元素在主轴方向上的居中对齐;align-items: center; 子元素在交叉轴方向上的居中对齐。

    4、还是display的方案,模拟表格的居中对齐的方式

    .center4{
          margin: 1em;
           400px;
          background: pink;
          display: table;
    }
    .center4>p{
          background: #ccc;
          display: table-cell;
          vertical-align: middle;
    }
    

     这种对齐方式就很像table布局的对齐方式,文本较长的时候水平居中会产生各种问题。

    5、下面几个是通过使用定位,来达到垂直居中的目的的。

    .center5{
           400px;
          height: 200px;
          background: pink;
          position: relative;
          margin: 1em;
    }
    .center5>p{
          background: #ccc;
          position: absolute;
          left: 10%;
          right: 10%;
          top: 10%;
          bottom: 10%;    
    }
    

      可以达到子元素四边都距离父元素10%的距离。

    6、已知子元素大小的情况下,可以通过margin的负值,达到刚刚好居中对齐的方式

    .center6{
           400px;
          height: 200px;
          background: pink;
          position: relative;
          margin: 1em;
    }
    .center6> p{
           200px;
          height: 100px;
          background: #ccc;
          position: absolute;
          left: 50%;
          margin-left: -100px;
          top: 50%;
          margin-top: -50px;
    }
    

      通过绝对定位50%,然后margin负值自身的一半刚好达到居中的目的。

    7、一个意向不到的属性,变形transform属性,这也应该成为一种主流方式。

    .center7{
           400px;
          height: 200px;
          background: pink;
          position: relative;
          margin: 1em;
    }
    .center7> p{
          background: #ccc;
          position: absolute;
          left: 50%;
          top: 50%;
          transform: translate(-50%, -50%);
        }
    

      通过调整translate的值达到居中的目的。

    就我个人而言,display:table的方式很少会用到,其他的视项目需求决定用哪种方式。我比较喜欢的是2、3、7三种方案。

     

  • 相关阅读:
    QQ下面功能移动效果
    网页中选择功能
    自定义listview
    android的内存优化分析【转,超级推荐】
    animation的xml定义中的android:interpolator属性(转)
    HOME键与Notification配合使用的bug重现【原创】
    (转载)Android下Affinities和Task(开发者指南)
    职场加薪步步高升的五大法则(转)
    强引用,软引用和弱引用。
    更改字体的ttf。
  • 原文地址:https://www.cnblogs.com/zhuhuoxingguang/p/6201369.html
Copyright © 2020-2023  润新知