當實現一個按鈕時,按鈕裏面的字體小於12px,且按鈕的高度較小時,使用lineheight=height的方法,在安卓系統中會出現文字上下不居中的狀況(iOS中正常),一般表現爲文字偏上。css
切圖,把button當作圖片切出來;html
把lineheight設置的比height大1px,這樣在ios和安卓中作一個協調,看着都不會太奇怪;ios
大盒子套小盒子,文字在小盒子裏展現,而後讓小盒子在大盒子裏垂直居中。這種方法我首先想到的是使用flex佈局居中,而後還有一個display:table-cell;vertical-align: middle;
的方法,我開始覺得這兩個效果是同樣的,然而在不一樣的瀏覽器中,兩種方式居然不一致!!!chrome
先上代碼:瀏覽器
<body> <p>經過<code>display: table-cell;vertical-align: middle;</code></p> <div class="normal">上下不居中的</div> <br /> <div class="item-1"> <span class="inner">上下居中的</span> </div> <p>經過<code>display: flex;align-items: center;</code></p> <div class="normal">上下不居中的</div> <br /> <div class="item-2"> <span class="inner">上下居中的</span> </div> </body>
.normal { height: 18px; width: 60px; font-size: 10px; color: white; line-height: 18px; background: purple; border-radius: 30px; } .item-1 { width: 60px; height: 18px; background: purple; display: table-cell; vertical-align: middle; font-size: 10px; border-radius: 30px; } .item-2 { width: 60px; height: 18px; background: purple; display: flex; align-items: center; font-size: 10px; border-radius: 30px; } .inner { color: white; text-align: center; }
而後上圖:微信
嗯...,國內瀏覽器市場「百家爭鳴」啊~最後仍是總結一下吧,總的來講flex的效果沒有table-cell的好,特別是微信瀏覽器上面,因此仍是推薦items-2
的解決方案。佈局
我開始遇到這個問題是網上文章不多,當時flex兼容性還不太好,你們也都在討論解決方案,沒有看到有人分享什麼緣由致使這種狀況,我後面也是看了一個阿里的大佬在一個線下的技術分享會後續分享出來的PPT裏看到了相關的解釋:字體
系統會根據font-family設置中第一個能在fonts.xml中匹配上的字體來計算排版,可是Android下中文又沒有family name,致使中文或中英文混排時沒法垂直居中。flex
說的不是很具體,我猜想大概是中文和英文的排版規則不一樣致使的,英文會有Ascender,Median,Baseline,Descender之分,可是中文沒有這一說,因此中文顯示是總會多出一個Descender的高度,致使文字顯示偏上,固然以上只是我的猜想,若是有人知道具體緣由還請告知。spa