CSS布局中的vertical-align問(wèn)題

在使用vertical-align:middle;的時(shí)候經(jīng)常會(huì)出現(xiàn)不起作用的情況。今天來(lái)梳理一下vertical-align:middle;用法。在看文章之前你可以去看下張大神的關(guān)于line-heightvertical-align的文章CSS深入理解vertical-align和line-height的基友關(guān)系。
首先要注意的是只有行內(nèi)元素行內(nèi)塊級(jí)元素屬性才能生效。
做一下測(cè)試。

.wrap{
    width: 500px;
    height: 100px;
    background: #201C29;
    margin: 0 auto;
    margin-bottom: 20px;
    box-shadow: 0 0 5rem #100e17;
}
.box1{
        background: #FF3D57;
    display: block;
    vertical-align: middle;
}
.box1a{
    width: 100px;
    height: 50px;
}
.box1b{
        width: 80px;
    height: 50px;
}
.box2{
    background: #FFCB00;
    display: inline;
    vertical-align: middle;
}
.box2a{
    font-size: 50px;
}
.box3{
    background: #00D546;
    display: inline-block;
    vertical-align: middle;
}
.box3a{
        width: 100px;
    height: 80px;
}
.box3b{
    width: 100px;
    height: 40px;
}
<div class="wrap">
    <div class="box1 box1a">塊級(jí)元素</div>
    <div class="box1 box1b">塊級(jí)元素</div>
</div>
<div class="wrap">
    <div class="box2 box2a">行內(nèi)元素</div>
    <div class="box2 box2b">行內(nèi)元素</div>
</div>
<div class="wrap">
    <div class="box3 box3a">行內(nèi)塊級(jí)元素</div>
    <div class="box3 box3b">行內(nèi)塊級(jí)元素</div>
</div>

復(fù)制代碼到瀏覽器中可以看到如下的結(jié)果。

img.png

可以看到行內(nèi)元素和行內(nèi)塊級(jí)元素的vertical-align生效了,兩個(gè)元素垂直居中對(duì)齊了。塊級(jí)元素由于會(huì)獨(dú)占一行,所以自然是不可用了。
仔細(xì)觀察發(fā)現(xiàn)行內(nèi)元素和行內(nèi)塊級(jí)元素雖然在垂直方向上對(duì)齊了,但是并沒(méi)有和他們的父級(jí)垂直居中對(duì)齊。
img2.png

此時(shí)我們只要給父級(jí)設(shè)置和自己高度一樣的line-height就可以了,也就是給wrap這個(gè)元素設(shè)置line-height: 30px;
img3.png

這樣子級(jí)元素就可以在垂直方向上和父級(jí)元素對(duì)齊了。
那我們是不是每次必須給父級(jí)設(shè)置line-height呢?當(dāng)然不是,這要視布局的具體情況而定。

  1. 如果父級(jí)的高度是不固定的,那我們是不需要設(shè)置父級(jí)line-height屬性的,因?yàn)樽蛹?jí)之間會(huì)垂直居中對(duì)齊,父級(jí)的高度會(huì)被撐開(kāi),由高度最大的自己決定。
  2. 如果父級(jí)的高度是固定的,那么可以設(shè)置父級(jí)的line-height等于它的高度。還有一種方法就是讓其中一個(gè)子級(jí)的高度正好等于父級(jí)的高度。那這樣豈不是還要寫(xiě)一個(gè)多余的元素,我們可以用偽類來(lái)處理。
.wrap::before{
  content: '',
  display: inline-block;
  height: 100%;
  width: 1px;
  vertical-align: middle;
}

這樣這個(gè)多余的元素就不會(huì)影響你的布局了。

  1. 如果父級(jí)室友固定高度的,那子級(jí)的高度千萬(wàn)不能超過(guò)父級(jí)的高度,如果大于的話,那子級(jí)元素就不會(huì)以父級(jí)垂直中心線對(duì)齊了,而是會(huì)以超過(guò)父級(jí)高度的那個(gè)子級(jí)垂直中心線。
    我們用一張圖片來(lái)演示一下吧。
    img4.png

    這里圖片要設(shè)置vertical-align: middle;,圖片的高度此時(shí)是大于父級(jí)高度的,所有的子級(jí)現(xiàn)在都是和圖片垂直對(duì)齊的,不再是和父級(jí)垂直對(duì)齊。

補(bǔ)充一點(diǎn)東西:當(dāng)我們?cè)谝粋€(gè)標(biāo)簽中放置一張圖片時(shí),父級(jí)高度會(huì)被撐出來(lái)一部分

img5.png

解決方法可以參考上面的鏈接。其中一種方法是設(shè)置圖片屬性vertical-align: middle;,但是如果圖片的高度過(guò)小,這個(gè)方法是不起作用的,我自己的測(cè)試結(jié)果是chrome和firefox瀏覽器都是26px,也就是說(shuō)如果圖片的高度小于26px,這個(gè)大小是受到父級(jí)的字體大小影響的,此時(shí)vertical-align: middle;是不能解決問(wèn)題的,這時(shí)可以設(shè)置父級(jí)的font-size: 0;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 測(cè)試代碼 一、line-height的性質(zhì) line-height在CSS中的定義為行高,具體計(jì)算方法如圖所示: ...
    自由使徒閱讀 953評(píng)論 0 1
  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,093評(píng)論 1 92
  • 參考文章:深入了解CSS的line-height屬性Vertical-Align: 你需要知道的所有事【譯】Ver...
    若邪Y閱讀 3,560評(píng)論 1 6
  • Spark源碼之Worker介紹篇 Worker介紹 Worker作為工作節(jié)點(diǎn),一般Driver以及Executo...
    小狼星I閱讀 274評(píng)論 0 1
  • 拉庫(kù)馬·希拉尼,一個(gè)真正講故事的高手。盡管,在現(xiàn)代的電影界中,他并不是一位十分出名的導(dǎo)演,但是他本人以及他導(dǎo)演的片...
    小螞蟻小螞蟻閱讀 1,232評(píng)論 0 1

友情鏈接更多精彩內(nèi)容