当前位置 主页 > 网站技术 > 代码类 >

    完美实现CSS垂直居中的11种方法

    栏目:代码类 时间:2020-01-11 12:06

    本人前端小白,正在做一个小程序开发的项目,css样式调整搞的头都大了。关于垂直居中,已尝试了文中的几个垂直居中css样式设置,已成功解决我的问题,故转载来备份下。

    CSS垂直居中11种实现方法分别如下:

    1. 使用绝对定位和负外边距对块级元素进行垂直居中

    html代码:

    <div >
      <div >我是测试DIV</div>
    </div></pre>
    css代码:
    #box { 
     width: 300px; 
     height: 300px; 
     background: #ddd; 
     position: relative;
    } 
    #child { 
     width: 150px; 
     height: 100px; 
     background: orange; 
     position: absolute; top: 50%; 
     margin: -50px 0 0 0; 
     line-height: 100px;
    }

    运行结果如下:

    这个方法兼容性不错,但是有一个小缺点:必须提前知道被居中块级元素的尺寸,否则无法准确实现垂直居中。

    2. 使用绝对定位和transform

    html代码:

    <div > 我是一串很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的文本 </div></pre>
    css代码:
    #box { 
     width: 300px; 
     height: 300px; 
     background: #ddd; 
     position: relative;
    } 
    #child { 
     background: #93BC49; 
     position: absolute; 
     top: 50%; 
     transform: translate(0, -50%);
    }

    运行结果如下:

    这种方法有一个非常明显的好处就是不必提前知道被居中元素的尺寸了,因为transform中translate偏移的百分比就是相对于元素自身的尺寸而言的。

    3. 另外一种使用绝对定位和负外边距进行垂直居中的方式

    html代码:

    <div >
      <div >我也是个测试DIV</div>
    </div></pre>
    css代码:
    #box { 
     width: 300px; 
     height: 300px; 
     background: #ddd; 
     position: relative;
    } 
    #child { 
     width: 50%; 
     height: 30%; 
     background: pink; 
     position: absolute; 
     top: 50%; 
     margin: -15% 0 0 0;
    }

    运行结果如下:

    这种方式的原理实质上和前两种相同。补充的一点是:margin的取值也可以是百分比,这时这个值规定了该元素基于父元素尺寸的百分比,可以根据实际的使用场景来决定是用具体的数值还是用百分比。

    4. 绝对定位结合margin: auto

    html代码:

    <div >
      <div >呆呆今天退役了(。﹏。)</div>
    </div></pre>
    css代码:
    #box { 
     width: 300px; 
     height: 300px; 
     background: #ddd; 
     position: relative;
    } 
    #child { 
     width: 200px; 
     height: 100px; 
     background: #A1CCFE; 
     position: absolute; top: 0; 
     bottom: 0; 
     margin: auto; 
     line-height: 100px;
    }

    运行结果如下:

    这种实现方式的两个核心是:把要垂直居中的元素相对于父元素绝对定位,top和bottom设为相等的值,我这里设成了0,当然你也可以设为99999px或者-99999px无论什么,只要两者相等就行,这一步做完之后再将要居中元素的margin设为auto,这样便可以实现垂直居中了。

    被居中元素的宽高也可以不设置,但不设置的话就必须是图片这种自身就包含尺寸的元素,否则无法实现。

    5. 使用padding实现子元素的垂直居中

    html代码:

    <div >
      <div >今天西安的霾严重的吓人,刚看了一眼PM2.5是422</div>
    </div>
    css代码:
    #box { 
     width: 300px; 
     background: #ddd; 
     padding: 100px 0;
    } 
    #child { 
     width: 200px; 
     height: 100px; 
     background: #F7A750; 
     line-height: 50px;
    }