【发布时间】:2017-01-07 09:13:16
【问题描述】:
我遇到了一个问题,我有一个内联 <span> 包含多行文本,具有透明背景。尽管有默认的行高,但文本上的背景会重叠,从而导致背景重叠在自身上的较暗的水平行。
这里很好的演示了问题(图片+jsfiddle)
JsFiddle demonstrating this issue.
问题的最小再现
HTML:
<h1>
<span>Although it is set to a line height of 1, the background behind text still overlaps between rows.</span>
</h1>
CSS:
h1 {
text-transform: uppercase;
font-family: Arial;
line-height: 1;
font-size: 30px;
background: rgba(0,0,0,0.5);
color: #FFF;
display: inline;
}
h1 span {
position: relative;
}
解决方案要求
- 背景颜色必须符合文字的形状;所以将
span设置为display:inline-block不是一个可行的解决方案。 - 设置固定的
line-height(或padding)不是最佳答案,因为浏览器和用户设置之间的确切字体渲染会发生变化。例如,在 Chrome 中完美设置line-height会在 Firefox 中产生不完美的结果。 - 文本必须是动态的和语义的。解决方案不能涉及在服务器上为客户端呈现文本的图像表示。
- 最好允许添加或删除任意
padding,以减少或增加文本与背景边缘之间的间距。 - Javascript 可能没问题。我在这里使用 Angular 2,因此与它完美结合的答案会更好。
【问题讨论】:
-
对我认为格式正确的问题投反对票的任何理由?
-
那为什么不直接去掉行高呢?
-
@AdamBuchananSmith - 不能加上两个评论,有时这是最简单的事情:p
-
不是固定的
line-height,而是计算的版本 =>height/font-size=line-height。但似乎display: inline每边需要额外的 1.5 个像素 => 33/30 = 1.1 的行高。 -
Leading and Half Leading ...基本上你的行高值小于字体大小。这使线框渗入相邻字形的
line-box.. @TimVermaelen 具有您需要的值。那或1.09999999
标签: javascript html css text-rendering