前几天在作项目的过程当中,关于字体小于12px时,很难作到彻底居中显示,表示有点抓狂,各类百度找到一个貌似还不错的方法,总结出来分享给你和我。css
在PC端的Chrome浏览器中,小于12像素的字体仍然以12像素显示,即便是设置了-webkit-text-size-adjust: none;也好像没什么做用。通过实验,发现以下两种方式比较有用,各位看官可听我细细道来。web
使用transform:scale()
假如设计同窗给你的字体大小是10px,你设置了font-size:10px,此时在PC中测试并不会看到效果;一种有用的方法是:浏览器
font-size: 12px //PC中Chrome的最小字体 transform: scale(0.833333333); height: 12px; //设计给的高度是10px line-height: 12px;
这种方式是能够将字体缩小到将近10px,可是包裹字体的标签(div,p)的宽度、高度甚至是margin等值都缩小了0.8333333,假如设计同窗给你的div的高度是20px,如今为了能正确显示20px的高度,你必需要将高度设置为(20/0.8333333)px,宽度和margin的值的设置也是这样;要想让其居中,也必须将line-height设置为(20/0.8333333)px;这种计算方式比较复杂,且这种方式可能会影响到文档流中其余元素的位置,因而就有了以下的方式二的产生。微信
方式二中有两个比较重要的点:
(1)对于小于12px的字体,可先将其扩大二倍,而后使用transform缩小0.5倍
(2)在标签的位置方面,能够给它一个相对定位的父元素,此父元素的高度和宽度可按照设计图设置,而后将它的定位设置为相对定位,而且使其位于父元素的中心(垂直水平都居中)
HTML结构以下:ssh
<div class="parent"> <div class="child"> 我要垂直水平居中 </div> </div>
css样式:测试
.parent{ position: relative; width: 120/@rem; height: 24/@rem; overflow: hidden; } child{ position: absolute; top: -50%; left: -50%; width: 240/@rem; height: 48/@rem; line-height: 48/@rem; font-size: 36/@rem; color: #ffffff; transform: scale(0.5); background: #fa5d5f; border-top-left-radius: 16/@rem; border-bottom-right-radius: 16/@rem; box-sizing: border-box; }
parent和child的关系以下图所示,其中parent至关于用来占位,这样缩放就不会影响到parent外面的父元素,由于进行缩放的是绝对定位的child,它不在文档流内,并不会影响到其余元素在文档流中的位置。字体
另外,附送两个小tips
(1)小于12px的字体(或者说微信webview)不适用line-height,可是在大于等于12px的字体(或者非微信webview)适用line-height,那么从这方面就能够尝试经过csshack的方式来实现了,因此若是想用line-height作居中处理,最好不要使用小于12px的字体,可使用方式一进行缩放;
(2)字体最好使用偶数像素,基数像素在显示时,一般会遇到1个像素误差,没法彻底居中,这个能够和设计同窗商量。spa