水平垂直居中的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
}