我正在电子邮件模板中使用一个头像,它仅显示文本首字母并在圆形背景内展示。由于无法在电子邮件模板中使用JavaScript,我仅依靠CSS来实现这一效果。以下是使用的HTML代码:
<div style='width: 36px; height: 36px; display: inline-block; vertical-align: middle; background-color: #625fff; border-radius: 36px; line-height: 36px;'>
<p style='width: 1ch; height: 36px; font-size: 18px; line-height: 36px; margin: 0px auto; word-break: break-all; overflow: hidden; letter-spacing: 18px; color: white; font-family: monospace, monospace; vertical-align: middle;'>John Doe</p>
</div>
这段代码在我测试的所有环境中都能达到预期效果,但Gmail安卓应用除外。以下是应用中的截图:
如图所示,文本并未正确垂直居中。由于这是在应用程序而非浏览器中出现的问题,因此无法进行元素检查以调试问题。
导致Gmail应用中文本未能正确对齐的原因是什么?解决方案又是什么呢?
更新1
尝试通过移除display: inline-block
和vertical-align: middle
属性,并改用display: table
和display: table-cell
来修复此问题,但仍未解决问题,在Gmail应用中看起来仍然相同。以下是更新后的代码:
<div style='width: 36px; height: 36px; display: table; background-color: #625fff; border-radius: 36px;'>
<div style='width: 1ch; height: 36px; font-size: 18px; line-height: 36px; margin: 0px auto; word-break: break-all; overflow: hidden; letter-spacing: 18px; color: white; font-family: monospace, monospace; display: table-cell; vertical-align: middle;'>Sadman Rizwan</div>
</div>
更新2
我发现文本的行高大于其父元素的高度,因此文本未能在其父元素内垂直居中。但我不清楚为何会出现这种情况,因为我已将两者都设置为36px。同时,我也不知道是父元素在Gmail应用中变小了还是行高增加了。有没有什么方法可以查明这一点?
更新3
最终,我通过使用display: table-cell
和vertical-align: middle
来替代依赖line-height
实现了垂直居中。以下是最终的代码:
<div style="width: 36px; height: 36px; border-radius: 36px; background-color: #625fff; text-align: center; display: table-cell; vertical-align: middle;">
<div style="width: 1ch; overflow: hidden; white-space: nowrap; font-family: monospace, monospace; text-transform: uppercase; background-color: #625fff; color: white; font-size: 18px; line-height: normal; display: inline-block; vertical-align: middle;">John Doe</div>
</div>