【发布时间】:2017-07-05 06:06:08
【问题描述】:
在我正在编写代码的网站中,设计师希望拥有带有背景颜色(在照片上)的不规则文字。该设计在左侧和右侧都规定了一些填充以及平衡的背景:所有背景“块”具有相同的高度并紧密堆叠在一起。下图显示了一个示例。
为此寻找解决方案,结果发现这种设计有两个明显的挑战:
确保所有左右填充都应用于所有行;和
确保垂直间距完美。
挑战 1 可以使用一些css-tricks on multi-line-padded-text 来解决。这也已在 SO 上的几个问答中讨论过:span background-color & padding problems、CSS create padding before line-break,以链接一些。
挑战 2 有点棘手,并且还与 box-shadow 解决方案有关,用于所有行的左右填充。
首先关于最后一点:即使在仔细设置文本的顶部和底部填充后,我还是注意到了一些细微的错误(在 Firefox 中,这绝对是目标浏览器之一):
这些细微的线条也可能在缩放时出现在(某些)线条之间。这将表示不精确的行高(因此填充)。但是,将垂直填充设置太多(为了安全起见)也有问题:
我在这里使用了半透明背景(和框阴影)来突出问题。首先,该解决方案不适用于需要透明度的情况。第二:背景“块”不再等高(例如,第 2 行和第 4 行之间的间隙比第 4 行窄得多)。
事实证明,设置正确的填充存在一个固有的问题:无法准确预测实际的 line-height 有多高(即,如果不深入非常字体度量)。尤其是在使用的字体不可预测的情况下(这在网络上很常见)。
所以问题是,如何为流动的文本添加背景颜色,使其左右填充正确,并使线条完全堆叠在一起?
一些注意事项:
设置
display: inline-block是禁忌:它将创建一个矩形背景。上述解决方案工作“有点”,这还不够。如图所示,他们有自己的问题。
显然,我正在寻找纯 CSS 解决方案,而不是 javascript。
当然,使用的文本是服务器生成的,可以更改。
我找到了一种适合我的解决方案:使用正确颜色的背景图像,它可以恰好缩放到一个行高。我将提交这个自我回答。虽然我确实喜欢这个 hack,但我仍然愿意接受其他建议。
【问题讨论】:
-
this 也是一篇关于内容框高度不可预测的深层帖子。
line-height可以在 css 中设置,但不能在 css 中设置content-area-height或leading(或half-leading)。背景是在内容区域上绘制的,而不是在行高上。
标签: html css background-color