利用偽元素 ( ::before 或 ::after )作垂直置中

 

添加偽元素 ( ::before 或 ::after )垂直置中

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <style>
        .div0 {
            width: 200px;
            height: 150px;
            border: 1px solid #000;
            text-align: center;
        }
            .div0::before {
                content: '';
                height: 100%;
                display: inline-block;
                vertical-align: middle;
            }
        .redbox {
            width: 30px;
            height: 30px;
            background: #c00;
            display: inline-block;
            vertical-align: middle;
        }
        .greenbox {
            width: 30px;
            height: 60px;
            background: #0c0;
            display: inline-block;
            vertical-align: middle;
        }
        .yellowbox {
            width: 30px;
            height: 40px;
            background: #F1E500;
            display: inline-block;
            vertical-align: middle;
        }
    </style>

</head>
<body>
<div class="div0">
<div class="redbox"></div>
<div class="greenbox"></div>
<div class="yellowbox"></div>
</div>
</body>
</html>

說明:

1、vertical-align: middle; 具有元素內的所有元素垂直位置互相置中的特性,

所以利用了偽元素 ::before (或是 ::after 也可以),

於父元素裡添加了 height: 100%; 的偽元素以利元素垂直位置互相置中。

 

2、有其限制,所有被垂直置中的元素之寬度加總起來,不能超過父元素寬度。

 

3、另外一提,範例中有使用到 content 屬性,content 屬性是專門跟偽元素 ::before 與 ::after 配合。

 

參考資料:

CSS content Property

CSS counter-increment Property