在没有硬编码行高或字体大小的情况下,如何在纯 CSS 中将 div 的高度表示为其行高的倍数?
背景
我有一个包含状态文本的框(DIV)。文本有时会跨越多行,通常只需要一行。状态每秒更新几(五)次,这会导致底部边框和框下方的所有内容随着框更改大小以适应其内容而上下“跳跃”。
跳跃的一种解决方案是将 DIV 的最小高度设置为两条线的高度。两行以上的状态文本很少见,因此跳跃的程度是可以接受的。
或者,我可以将高度设置为两行的确切高度并使用溢出:隐藏截断文本。这将消除所有以牺牲一些信息为代价的跳跃。
这就提出了一个问题:如何将高度表示为线高的倍数?状态文本从全局样式表继承其外观,不知道字体大小、系列、行高或任何内容。
半解决方案
我可以在不了解字体的情况下使用 em 单位来表示高度,但这仍然会留下行高属性,这也会影响最终的行高。
理想情况下,我更愿意继承行高,但如果我将其覆盖为已知的乘数,那么我可以强制框变得正好有两行高。
.progressStatus
{
line-height: 1.1;
height: 2.2em;
}
该解决方案足以满足我的需求,但我很好奇是否有更好的不涉及 javascript 的解决方案。
原文由 Journey 发布,翻译遵循 CC BY-SA 4.0 许可协议
没有办法在 CSS 中表达这一点。
这不太正确。 因为 您状态中的文本
div
通过级联继承了font-size
、line-height
等的值,因此它“知道”这些并将自己设置样式问题是 CSS 没有提供使用这些值进行计算的方法。它们仅在声明新属性时被隐式考虑。实现你想要的唯一方法是通过 JavaScript。我在 这里 使用一些 jQuery 做了一个小提琴。在我的示例中,一个简单的
body
声明充当了祖先。在正文 CSS 中使用不同的font-size
和line-height
值运行它。在实践中,我会将其与您的方法结合起来,作为后备方案
line-height
以百分比值给出(后代继承 计算 值) , 您决定更改您的状态font-size
。 Example: The ancestor’sfont-size
is16px
and itsline-height
is120%
(~ 19px).现在,如果您决定您的状态需要更多注意并声明.progressStatus {font-size: 24px;}
,它将继承计算出的line-height
(仍然是 19px)。因此,您的行高会小于文本大小。在您的“半解决方案”中明确声明line-height
可以防止这种情况发生。