Android 瀏覽器文本垂直居中問題

  • 2019 年 12 月 4 日
  • 筆記

本文作者:IMWeb ShiJianwen 原文出處:IMWeb社區 未經同意,禁止轉載

問題描述

在開發中,我們常使用 line-height 屬性來實現文本的垂直居中,但是在Android瀏覽器渲染中有一個常見的問題,就是對於小於12px的字體使用 line-height 屬性進行垂直居中的時候,渲染出來的效果並不是文字垂直居中,而是會偏上一些。舉兩個程式碼示例如下:

1. 大於12px

html

<span>testtesttest</span>

css

span {      display: inline-block;      height: 16px;      background-color: gray;      line-height: 16px;      font-size: 12px;  }

<!– more –>

顯示效果

2. 小於12px html

<span>testtesttest</span>

css

span {      display: inline-block;      height: 16px;      background-color: gray;      line-height: 16px;      font-size: 10px;  }

顯示效果

可以看到當 font-size 小於 12px 的時候,利用 line-height 屬性進行垂直居中布局明顯是偏上的,這裡為了避免由於 font-size 是奇數帶來的偏差,特意把 font-size 都設置成了偶數

問題原因

起初對這個問題有過兩種推測,一是認為是字體的問題,或者是瀏覽器渲染的問題。但後面發現即使換了字體只要 font-size 還是小於 12px 一樣會出現這個問題。

解決辦法

看起來問題的根源在於字體大小小於 12px,所以解決問題可以從這個方向入手,要麼改變字體大小,要麼換個方式讓它垂直居中。

1. 改變字體大小 最直接的方法就是改變字體大小讓它大於 12px 能夠正常居中,如果頁面對字體大小要求比較嚴格的話,可以先將原來包括 font-size 在內的屬性放大兩倍,再用 scale 縮小一倍,這樣測試之後也是可行的:

<span class="content">testtesttesttesttest</span>
.content {      display: inline-block;      height: 40px;      background-color: gray;      line-height: 40px;      font-size: 20px;      transform: scale(0.5);      transform-origin: 0% 0%;  }

但不知道為什麼,用這種方法之後我總是感覺文字沒有絕對地居中,好像是有一點細微的偏下,不知道什麼原因,不是 line-height 就是我的眼睛有問題。。。

2. table布局 在元素外再包一層,使用表格布局

<div class="container">      <span class="content">testtesttesttesttest</span>  </div>
.container {      display: table;  }  .content {      background-color: gray;      font-size: 10px;      display: table-cell;      vertical-align: middle;  }

利用 table 布局能夠比較好地實現文本垂直居中,缺點是要在外面多包一層容器。

總結

在查閱了很多資料之後,雖然能夠解決這個問題,但導致問題的具體原因還是不夠明顯,只知道是Android端瀏覽器的渲染問題,再往深一點的原因就有點鞭長莫及了,若有同行研究過這個問題,還望不吝賜教哈~