vertical-align實(shí)現(xiàn)垂直居中的坑

在實(shí)際開發(fā)中,經(jīng)常會(huì)有元素水平、垂直居中的需求。當(dāng)子元素、父元素的高度均可變時(shí),使用flex真是不二之選,但flex在老舊瀏覽器中不兼容,因此,這里介紹一種使用vertical-align、inline-block實(shí)現(xiàn)垂直居中的方法。

請(qǐng)看下方代碼:

<style>
.wrapper {
  height: 200px;
  background-color: lightgreen;
}
.wrapper:before {
  content: '';
  display: inline-block;
  width: 0;
  height: 100%;
  vertical-align: center;
}
.content {
  display: inline-block;
  width: 100%;
  height: 100px;
  vertical-align: center;
  background-color: lightcoral;
}
</style>
<body>
  <div class='wrapper'>
    <div class='content'></div>
  </div>
</body>

在瀏覽器中打開,結(jié)果如下圖:

juzhong.png

然后,我們發(fā)現(xiàn),垂直方向已經(jīng)實(shí)現(xiàn)了居中,而且這種方法的兼容性極好,IE8以上的全部兼容,并且無需修改dom結(jié)構(gòu),父、子元素的高度均為可變,另外,子元素使用inline-block,還順帶觸發(fā)了BFC,雖然不一定需要。

而如果實(shí)在需要兼容遠(yuǎn)古時(shí)代的IE6,可以不使用 :before偽類,直接在父元素里面加上一個(gè)子元素替代:before

關(guān)于此方法的理論解釋,這篇博文有提到:vertical-align實(shí)現(xiàn)垂直居中,而她的實(shí)現(xiàn),還不完整,于是便有了我這篇博文。還請(qǐng)繼續(xù)往下翻閱。

然而... ...細(xì)心的你一定發(fā)現(xiàn)了,紅色方塊(子元素)左側(cè)離父元素的左邊框有間隙。經(jīng)過各種排查,卻發(fā)現(xiàn)并沒有任何margin或者padding... ...

這間隙,便是今天要說的 “坑”
下面將解釋

行內(nèi)塊元素之間的默認(rèn)間距

在遇到這個(gè)問題的時(shí)候,腦海里一閃而過,想起以前張?chǎng)涡癫┛蜕系囊黄恼拢?a target="_blank" rel="nofollow">去處inline-block元素間間距的N種方法。
于是乎,將問題判定為是兩個(gè)inline-block的默認(rèn)間距。根據(jù)張老師博客中提供的N種方法,我從中挑選了一種兼容性好,且容易實(shí)現(xiàn)的方式。
具體如下:

<style>
.wrapper {
  height: 200px;
  background-color: lightgreen;
  font-size: 0; /* 消除inline-block間的間隙 */
  -webkit-text-size-adjust:none; /* 解除移動(dòng)端最小字體為12px的限制  */
}
.wrapper:before {
  content: '';
  display: inline-block;
  width: 0;
  height: 100%;
  vertical-align: center;
}
.content {
  display: inline-block;
  width: 100%;
  height: 100px;
  vertical-align: center;
  background-color: lightcoral;
  font-size: 12px; /* 需要重新設(shè)置字體 */
}
</style>
<body>
  <div class='wrapper'>
    <div class='content'></div>
  </div>
</body>

上方帶有注釋的三句代碼即為修復(fù)之后的代碼,在瀏覽器中打開,一切正常...


juzhong2.png
最后編輯于
?著作權(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)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,168評(píng)論 1 92
  • 收聽音頻,戳鏈接,舊號(hào)itclan已暫停使用,歡迎關(guān)注微信itclanCoder公眾號(hào)可收聽更多音頻 前言 關(guān)于網(wǎng)...
    itclanCoder閱讀 8,353評(píng)論 3 30
  • H5移動(dòng)端知識(shí)點(diǎn)總結(jié) 閱讀目錄 移動(dòng)開發(fā)基本知識(shí)點(diǎn) calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,833評(píng)論 0 26
  • 移動(dòng)開發(fā)基本知識(shí)點(diǎn) 一.使用rem作為單位 html { font-size: 100px; } @media(m...
    橫沖直撞666閱讀 3,733評(píng)論 0 6
  • 女人美麗如花,柔情似波,清新如茶,豐富如歌……作為女人,不管你屬于哪種類型,清新淡雅也罷,聰明美麗也罷,真誠善良也...
    納容淺陌閱讀 909評(píng)論 0 0

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