关于不同字号的单号文本垂直居中问题

解决不同字号单行文本垂直居中问题

写在前面

最近在写demo时,经常遇到单行文本居中问题,尤其是不同字号的单行文本居中问题,着实困扰了我一段时间,查找了许多资料,直到今天才算有收获,所以向大家分享一下成果。

单行文本设置成不同字号,无法简单用line-height:父级容器高度;解决的原因

首先,需要对baseline有一个基础的了解。如下图中,(图片来自https://blog.csdn.net/a2013126370/article/details/82786681)baseline的官方定义是,英文字母x的底部,不同的字体是有差异的。默认情况下,文本是以baseline为准对齐的,所以,我们设置相同字号的单行文本垂直居中的时候,因为字号相同,那么顶线和基线都在同一条水平线上,所以设置line-height的值为父级容器的高度就可以轻松解决;但是,当我们设置不同字号单行文本垂直居中时,因为它们是默认基线对齐的,所以,字号不同时,它们的基线依然在同一水平线上,造成字号小的文本会在视觉上向下偏移,以至于无法实现居中。

解决方法

既然问题出在了baseline上,那么我们就可以从这里入手解决。vertical-align(veritical:垂直;align:排列。意思是垂直排列)默认值是baseline,即我们上面说的以基线对齐。注意,我们上图,中线上下的文本高度时一样的,所以,我们设置vertical-align的值为middle,即以中线对齐,就可以实现居中。如下代码所示:

<style>
    .box{width:200px;height:100px;margin:100px auto; background: #ccc;line-height:100px;}
    .box i{font-size:30px;font-style:normal;vertical-align:middle;}
    .box span{font-size:18px;vertical-align:middle;}
</style>

<div class="box">
        <span>文字一</span><i>文字二</i>
</div>

我们将,父元素的line-height设置为和height相等,子元素分别设置vertical-align:middle;问题得到解决!

最后

由于知识水平有限,内容可能会有不当的地方,欢迎大家指正。

原文地址:https://www.cnblogs.com/BigFatStar/p/13442914.html