vertical-align問(wèn)題(img下方空白及無(wú)法對(duì)齊)

這是面試挺喜歡問(wèn)的題,了解原理的同時(shí),順便做一下筆記。
本文參考:
http://www.zhangxinxu.com/wordpress/2015/08/css-deep-understand-vertical-align-and-line-height
http://www.cnblogs.com/starof/p/4512284.html

在現(xiàn)實(shí)使用或者面試中,我們經(jīng)常會(huì)碰到vertical-align一些奇怪的問(wèn)題,主要由兩個(gè):
1、img圖片(inline-block元素)下方空白

image.png

2、無(wú)法對(duì)齊

image.png

【1、img下方空白問(wèn)題】

產(chǎn)生原因:

  • 行內(nèi)元素,inline-block元素的默認(rèn)對(duì)齊是基于baseline的,
  • 對(duì)于沒有行內(nèi)元素的box,baseline為底部邊緣。如果有inline元素,對(duì)齊baseline為inline元素的baseline。
  • 在此例中,雖然沒有其他字符,但是默認(rèn)有一個(gè)類似長(zhǎng)度為0的空白字符,此時(shí)就會(huì)使底部高度被撐高。
  • 多高呢?
    是行高的底部到baseline的距離。
image.png

如果我們?cè)偌尤胍粋€(gè)字符,就會(huì)更清楚。

image.png

無(wú)論我們?cè)谂赃厡懖粚懽址?,這個(gè)默認(rèn)高度都會(huì)存在。

既然我們知道是line-height和vertical-align的原因,有什么解決辦法呢?

1、使vertical-align失效

把img或者inline-block元素設(shè)置為block元素,這樣vertical-align:baseline就不起作用了。

//box是指這個(gè)紅色的正方形
.box{
  display:block;
}
image.png

此時(shí)如果我們還想在同一行放入其他元素怎么辦?估計(jì)只能定位或者float了。

2、使vertical-align:baseline失效

就是給box設(shè)置其他的vertical-align值(top,bottom,middle)

image.png

3、設(shè)置line-height

既然有一個(gè)默認(rèn)的空白字符,而其高度是line-height底部到baseline的距離,如果我的line-height足夠小,那么這個(gè)距離也可以減小為0;

//.ct為包裹box和span文字的容器
.ct{
  line-height: 5px;
}
image.png

4、直接設(shè)置fontsize為0

既然是由于文字或者空白字符的baseline對(duì)齊導(dǎo)致的,那么我們直接控制font-size為0,讓baseline到行高底部為0.
本質(zhì)還是相當(dāng)于控制行高。不過(guò)span字體會(huì)消失。

.ct{
  font-size:0;
}
image.png

================分割線================================

【2.對(duì)齊問(wèn)題】

一般我們直接設(shè)置兩個(gè)inline-block,會(huì)直接對(duì)齊的。
比如下面這樣。

image.png

代碼如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .box1,.box2{
            width: 100px;
            height: 100px;
            border: 1px solid red;
            display: inline-block;
        }
    </style>
</head>
<body>
    <div class="ct">
      <div class="box1"></div>
      <div class="box2"></div>
    </div>
</body>
</html>

而當(dāng)我們?cè)谄渲幸粋€(gè)box加入一些文字的時(shí)候,就無(wú)法對(duì)齊了。

image.png

這是為什么呢?結(jié)合上面的知識(shí),其實(shí)還是vertical-align的對(duì)齊問(wèn)題,box1沒有文字,對(duì)齊的還是box1的下邊緣,box2有文字,對(duì)齊的就是文字的baseline了。

image.png

既然知道是baseline搞的鬼,怎么解決呢?
我們可以試試各個(gè)vertical-align值,
為什么只有vertical-top可以呢?
看下面的圖你就知道了。

image.png
  • 當(dāng)我們給右邊box2設(shè)置middle時(shí),右邊middle會(huì)和左邊baseline對(duì)齊
  • 當(dāng)我們給右邊box2設(shè)置bottom時(shí),就是上圖的位置。
    因?yàn)樽筮厡?duì)齊方式還是不變(baseline),所以不改變位置。
    右邊對(duì)齊的是父元素的bottom,也就是最低的bottom,就是左邊的bottom。(父元素top取所有元素最高點(diǎn),bottom取所有元素最低點(diǎn))

所以最終的解決方案是在box2加一個(gè)vertical-ailgn:top

.box2{
  vertical-align:top;
}

以上。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 有些東西我們經(jīng)常用,但是我們卻并不了解它的原理,所以一旦換了場(chǎng)景,好多東西就不知道該怎么用了。最近一直很糾結(jié)ver...
    朱小維閱讀 5,202評(píng)論 8 34
  • 問(wèn)答題47 /72 常見瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,090評(píng)論 1 92
  • 簡(jiǎn)介 今天我打算對(duì)css樣式vertical-align的知識(shí)點(diǎn)進(jìn)行一些總結(jié),在我寫具體內(nèi)容之前,我先要說(shuō)明一下,...
    小貔閱讀 1,213評(píng)論 0 0
  • 今天,我在朋友圈發(fā)了一條動(dòng)態(tài)。 是的,這是我在關(guān)閉朋友圈2年后的第一條動(dòng)態(tài),關(guān)于遇見的動(dòng)態(tài)。 今天是七夕節(jié),真是個(gè)...
    唸臻閱讀 389評(píng)論 0 1
  • 看到了精神弒父環(huán)節(jié)、看到了弒父完成后另一種客觀的愛產(chǎn)生的環(huán)節(jié)-來(lái)自于男主在父親毆打母親的時(shí)候用槍指著父親、以及在軍...
    ZhouXuan閱讀 437評(píng)論 0 0

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