zoukankan      html  css  js  c++  java
  • css设置元素垂直居中的几个方法

    最近有人问我怎么设置元素垂直居中?我....(这么基础的东西都不会?我有点说不出话来),  不过还是耐心的教了他几个方法,好吧教完他们,顺便把这些方法整理一下

    第一种:通过设置成为表格元素的方式来实现垂直居中 (适应于父级有固定高度的元素)

      第一步,写html代码,如下:

      <!DOCTYPE html>
      <html>
        <head>
          <meta charset="utf-8"/>
          <title>元素垂直居中</title>
        </head>
        <body>
          <div class="box">
            <div class="box-con">
              <div class="content">
                a001
              </div>
            </div>
          </div>
        </body>
      </html>

      第二步:设置css 

      1. 将父元素设置为表格元素: display: table;

      2.将子元素设置为父元素表格的单元格: display: table-cell;   然后设置垂直居中:vertical-align: middle;

      3.将内容水平居中 margin:0 uato; 这样就可以垂直和水平都居中了

      <!DOCTYPE html>
      <html>
        <head>
          <meta charset="utf-8"/>
          <title>元素垂直居中</title>
          <style type="text/css">
            .box{
              80%;
              height:500px;
              padding:100px 0;
              margin:0 auto;
              background-color: #e4963c;
              display: table; /*将父级元素设置成为一个块级表格元素*/
            }
            .box-con{
              display: table-cell; /*将子元素设置成为父元素表格的单元格*/
              vertical-align: middle; /*该属性设置元素内容的垂直对齐方式。*/
            }
            .content{
              50%;
              margin:0 auto;
              background-color: #f00;
            }
         </style>
       </head>
       <body>
         <div class="box">
           <div class="box-con">
            <div class="content">    //注:content 就是表格的内容,所以其实设置的就是这个div居中,去掉这个div,直接写内容也是直接将内容居中的

              a001
            </div>
           </div>
        </div>
       </body>
     </html>

     注意:有时候会出现上边距比下边距多的问题,这样的话再父级设置font-size:0; 然后重新给内容设置font-size(因为父级设置了font-size:0;所以内容一定要设置了font-size才能正常显示)

      效果图:(这个效果图不是这个代码出来的效果图,但是是一样的写法出来的效果图,这里多了一个内容002, 写来做对比用的)

      

      

    第二种方法:通过改变布局的方式来实现

      1.  给父级元素设置 display: flex; 设置为fiex布局   然后align-items: center; 设置该元素的内容垂直居中

      2.子级元素设置margin:0 auto;  水平居中

      代码如下: 

      <!DOCTYPE html>
      <html>
        <head>
          <meta charset="utf-8"/>
          <title>元素垂直居中</title>
          <style type="text/css">
            .box{
              80%;
              height:400px;
              background-color: #d65412;
              margin:0 auto;
              display: flex;  //将元素设置为fiex布局
              align-items: center;  //设置元素的内容垂直居中

              justify-content:center;   /*将元素内容设置为水平居中*/ /*也可以在子元素中设置margin:0 auto;来水平居中*/

            }
            .content{
              50%;
              background-color: #ffaf0f;
              /* margin:0 auto; */ //设置元素水平居中
              text-align: center;
            }
          </style>
        </head>
        <body>
          <div class="box">
            <div class="content">
              a001a
            </div>
          </div>
        </body>
      </html>

      效果图:

      

     第三种方法,通过设置margin 或 padding 来实现  这个方法处理垂直居中是最灵活的,并且不用父级元素设置固定高度。

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8"/>
        <title>垂直居中</title>
        <style type="text/css">
          .box{
            85%;
            background-color: #e4963c;
            margin:0 auto;
            padding:100px 0;  //通过给父级元素设置padding的方式来实现垂直居中

          }
          .boxs{
            20%;
            background-color: #f00;
            margin:0 auto;  //设置元素水平居中

            text-align: center;
          }
        </style>
      </head>
      <body>
        <div class="box">
          <div class="boxs">
            a000
          </div>
        </div>
      </body>
    </html>

    效果:

      

      毫无疑问这个方法是做好的方法,简单方便,并且没有父级高度限制,根据子级内容自动撑开不管什么时候都保持在父级元素中

    当然还可以通过设置子级元素的外边距来实现,效果一样:

      <!DOCTYPE html>
      <html>
        <head>
          <meta charset="utf-8"/>
          <title>垂直居中</title>
          <style type="text/css">
            .box{
              85%;
              background-color: #e4963c;
              margin:0 auto;
              /*padding:100px 0;*/
              overflow: hidden; //因为直接在子级元素设置margin会导致出现边距合并问题,所以加上overflow: hidden;是为了解决边距合并问题,让子元素的margin生效。
            }
            .boxs{
              20%;
              background-color: #f00;
              margin:100px auto;    //设置上下边距一样,也就相当于对于父级元素垂直居中了
              text-align: center;
            }
          </style>
        </head>
        <body>
          <div class="box">
            <div class="boxs">
              a000
            </div>
          </div>
        </body>
      </html>

     

    第四种方法,定位

      使用定位来进行居中也是比较常用的,但是还是要设置父级高度的情况下才能使用,不够灵活。

      这里要注意的是设置top:50%; left:50%;是指父级元素的中心点,子级内容从这里开始显示。

      所以需要内容自身向左和向上偏移自身的一半,这样内容才是真正的居中。

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8"/>
        <title>定位设置垂直居中</title>
        <style type="text/css">
          .box{
            80%;
            height:400px;
            margin:0 auto;
            background-color: #0f0;
            position: relative;
          }
          .boxa{
            30%;
            background-color: #f00;
            position: absolute;
            top:50%;
            left:50%;
            transform: translate(-50%, -50%);

          }
        </style>
      </head>
      <body>
        <div class="box">
          <div class="boxa">
            a000sd
          </div>
        </div>
      </body>
    </html>

      效果:

      

     好了,垂直居中就说到这里,还有其他更好的方法也欢迎留言。

  • 相关阅读:
    Python CI中iOS项目自动打包运行
    Jquery 插件开发公开属性顺序的影响.
    MVC4使用SignalR出现$.connection is undefined错误备忘
    C语言运算符的优先级与结合性
    CF478C Table Decorations (贪心)
    LightOJ1370 Bishoe and Phishoe (欧拉函数+二分)
    经典排序:冒泡排序法与选择排序法
    STL初学
    博客园使用Markdown和公式
    为知笔记(Wiz)发布博客到博客园(cnblog)
  • 原文地址:https://www.cnblogs.com/hermit-gyqy/p/11659940.html
Copyright © 2011-2022 走看看