zoukankan      html  css  js  c++  java
  • 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属性固然好用,但是由于兼容性等问题,酌情使用

  • 相关阅读:
    POJ1045 Bode Plot
    POJ1044 Date bugs
    POJ1043 What's In A Name?
    POJ1042 Gone Fishing
    POJ1041 John's trip
    POJ1040 Transportation
    POJ1039 Pipe
    background-size属性
    一些CSS的备忘
    only-child选择器
  • 原文地址:https://www.cnblogs.com/controlms/p/7891203.html
Copyright © 2011-2022 走看看