【CSS】水平垂直居中的4種實現(寬高不定)

ziwei3749發表於2018-01-25

水平垂直居中的4種方案(寬高不定)

方案中我也給了寬高,但並不是說寬高固定了。而是以為不給寬高無法看到效果。
這個方案不固定寬高的是指,用這個方案之後,如果你父元素、子元素的寬高發生了改變,依舊可以保證是水平垂直居中的位置。

下面四種方案都是能夠實現,當父元素或子元素的寬高發生改變時,依舊維持水平垂直居中佈局的方案。

方案1: 定位

html

         <div class="father">
            <div class="son"></div>
         </div>

css

        .father {
            position: relative;
            width: 200px;
            height: 200px;
            background: skyblue;
        }
        .son {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%,-50%);
            width: 100px;
            height: 100px;
            background: red;
        }

方案2: flex

html不變

        <div class="father">
            <div class="son"></div>
        </div>

css

        .father {
            display: flex;
            justify-content: center;
            align-items: center;
            width: 200px;
            height: 200px;
            background: skyblue;
        }
        .son {
            width: 100px;
            height: 100px;
            background: red;
        }

方案3: table佈局

需要設定父元素為display:table-cell,利用vertical和text-align可以讓所有的行內塊級元素水平垂直居中
給子元素設定 display: inline-block

html 不變

  <div class="father">
        <div class="son"></div>
    </div>

css

  .father {
            display: table-cell;
            width: 200px;
            height: 200px;
            background: skyblue;
            vertical-align: middle;
            text-align: center;
        }
        .son {
            display: inline-block;
            width: 100px;
            height: 100px;
            background: red;
        }

方案4: grid佈局 (最新瀏覽器支援)

html不變

        <div class="father">
            <div class="son"></div>
        </div>

css不變

        .father {
            display: grid;
            align-items:center;
            justify-content: center;
            width: 200px;
            height: 200px;
            background: skyblue;

        }
        .son {
            width: 10px;
            height: 10px;
            border: 1px solid red
        }

相關文章