CSS的水平垂直居中方案整理

前言

  在CSS中,设置元素的水平和垂直居中是最常用的,但是由于需求的多样性,针对不同情况会有不同的处理方案,因此,总结了一下关于这类问题的解决方案

行内元素的水平居中

  要实现行内元素(<span>、<a>)的水平居中,只需要将行内元素包裹在块级父元素(display:block)中并且在父级元素设置CSS:

    #container{
        text-align:center;
    }

  这种方法适用于display属性为inline、inline-block、inline-table、inline-flex

块级元素的水平居中

  要实现块级元素(display:block)的水平居中,只需要将其CSS属性设置为:

    #center{
        margin:0 auto;
    }

多个块级元素的水平居中

【1】传统方式:

  设置水平排列的块级元素的display:inline-block,设置其父元素的text-align:center,达到与上面的额行内元素相同的效果

    #container{
        text-align:center;
    }
    .center{
        display:inline-block;
    }

【2】使用flexbox实现


  使用之前,首先简单介绍flexbox。

  Flexbox布局是CSS3中一种新的布局方式,它能够提供一个更有效的方式制定、调整和分布一个容器内的项目布局,即使它们的大小是未知或动态的。

使用flex

    #container{
        display:flex;
    }

  flex默认是一个块级元素,如果需要定义一个行内级元素,只需要display:inline-flex;

  flexbox由伸缩容器和伸缩项目组成。通过设置元素的display属性为flex或inline-flex能得到一个伸缩容器,伸缩容器的内部元素会变成伸缩项目


  回到正题,要利用flex实现多块级元素的水平居中,只需要将父级元素CSS设置为:

    #container{
        justify-content:center;
        display:flex;
    }

已知高度宽度元素的水平居中

【1】使用绝对定位和负边距实现

  使用绝对定位,将元素的top、left设置为50%,再利用margin,将元素拉回本身宽高的一般,实现水平垂直居中

    #container{
        position:relative;
    }
    #center{
        100px;
        height:100px;
        position:absolute;
        top:50%;
        left:50%;
        margin:-50px 0 0 -50px;
    }

【2】绝对定位和margin

  这种方法无需知道被垂直居中的元素的宽和高

    #container{
        position:relative;
    }
    #center{
        position:absolute;
        margin:auto;
        top:0;
        left:0;
        right:0;
        bottom:0;
    }

未知高度和宽度的元素的水平垂直居中

【1】当要垂直居中的元素时inline或inline-block时,可以将其父元素设置为display:table-cell,配合text-align:center和vertical-align:middle就能实现水平垂直居中

    #container{
        display:table-cell;
        text-align:center;
        vertical-align:middle;
    }

【2】CSS3中的transform属性

    #container{
        position:relative;
    }
    #center{
        position:absolute;
        top:50%;
        left:50%;
        transform:translate(-50%,-50%);
    }

flex布局实现

    #container{
        display:flex;
        justify-content:center;
        align-item:center;
    }

CSS3的transform和flex属性固然好用,但是由于兼容性等问题,酌情使用

原文地址:https://www.cnblogs.com/controlms/p/7891203.html