视觉上如何让不同 font-size 的文字底部在一条线上?

自己尝试了下,发现都不能让文字底部完全在一条线上,中文更加明显,
不知应该如何解决
测试用例

阅读 19.1k
4 个回答

中文也可以,你需要强制对不同大小的字体设定不同的行高。

<div class="a inline">
  <div class="b">哈哈</div>
  <span class="b">嘎嘎</span>
  <b class="b">呱呱</b>
  <div class="b e1">haha</div>
  <span class="b e2">gaga</span>
  <b class="b e3">guagua</b>
</div>
.a {
  width: 100%;
  overflow: hidden;
  border-bottom: 1px solid lightblue;
  margin: 40px auto;
}
.inline .b {
  display: inline;
  vertical-align: bottom;
}
.a div {
  font-size: 20px;
  line-height: 20px;
}
.a span {
  font-size: 40px;
  line-height: 37px;
}
.a b {
  line-height: 15px;
}
.b.e1 {
  line-height: 16px;
}
.b.e2 {
  line-height: 46px;  
}
.b.e3 {
  line-height: 18px;
}

最终效果如下:

clipboard.png


以上为手工调整line-height的结果。如果不想手工调整,而想自动计算的话,代码如下:

<div class="a inline">
  <div class="b c1">哈哈</div>
  <div class="b c2">嘎嘎</div>
  <div class="b c3">呱呱</div>
  <div class="b e1">haha</div>
  <div class="b e2">gaga</div>
  <div class="b e3">guagua</div>
</div>
.a {
  border-bottom: 1px solid lightblue;
}
.inline .b {
  display: inline;
  vertical-align: bottom;
  line-height: 1;
}
.a .c1 {
  font-size: 40px;
}
.a .c2 {
  font-size: 80px;
}
.a .c3 {
  font-size: 20px;
}
.a .e1 {
  font-size: 40px;
}
.a .e2 {
  font-size: 80px;
}
.a .e3 {
  font-size: 20px;
}

效果也还可以,英文的出入比较大,中文略有差距:

clipboard.png

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<meta charset="utf-8" />
<title>底部</title>
</head>
<body>
  <div style="border-bottom: 1px solid blue;">
    <span style="font-size: 12px; vertical-align: bottom;">哈哈</span>
    <span style="font-size: 14px; vertical-align: bottom;">哈哈</span>
    <span style="font-size: 16px; vertical-align: bottom;">哈哈</span>
    <span style="font-size: 18px; vertical-align: bottom;">哈哈</span>
    <span style="font-size: 28px; vertical-align: bottom;">哈哈</span>
    <span style="font-size: 38px; vertical-align: bottom;">哈哈</span>
  </div>
</body>
</html>

clipboard.png

这样就对齐了吧。

你看看这篇文章吧,CSS 中的行高与基线。看了你会发现。。要完完整整全做到正好黏在一条线上,貌似做不到。

@[yszou] 实现的我觉得是没问题的,难道你要完全底部黏在一条线上?

我觉得中文是不行的,因为中文字体实际的底部跟你看到的是不同的,也就是说,中文的底顶端都会有些空白,并且字体越大,空白越大,而且中文应该也没有底线这个概念,所以无法实现像英文一样完全底线黏在一起;

如图:中文底端距离视觉上的底端总有些距离,字体越大,距离越大;

clipboard.png

而英文的话,是可以做到的,英文字体有四条线,如果底线对齐,可以实现在一条线上;

如图:英文是完全底线对齐的;

clipboard.png

demo

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏