【发布时间】:2011-07-04 04:35:57
【问题描述】:
假设您需要向用户呈现颜色列表。颜色必须显示在具有固定高度的列表中,每种颜色占据该高度的相等部分。
这应该是四种颜色、90 像素的列表高度和粗边框的外观:
上图是在 Firefox 3.6.13 中渲染的,来源如下:
<ul style="height: 90px; border: 5px solid black; padding: 0;">
<li style="height: 25%; background: red;">
<li style="height: 25%; background: blue;">
<li style="height: 25%; background: yellow;">
<li style="height: 25%; background: green;">
</ul>
这一切都很好。该列表确实有 90 像素高——在边界内——并且每种颜色都获得了(看似)相等的空间份额。现在,让我们在 Safari 或 Chrome 中渲染相同的 HTML/CSS:
请注意绿色行和边框之间的白色窄行。对于我们在这里看到的内容有一个非常简单的解释:0.25 × 90 = 22.5
Safari 和 Chrome 中的 WebKit 并不真正喜欢非整数像素高度并丢弃小数点。使用高度为 22 的四行,我们在列表底部得到 2 个像素,即:90 - 4 × 22 = 2
在静态 HTML 文件的上下文中,我们可以轻松地将元素的高度分别设置为 23、22、23、23 像素,并且列表可以在任何浏览器中正常显示。另一方面,如果颜色是从数据库加载的,并且计数随每个请求而变化,则需要更灵活的解决方案。
我知道如何通过使用 Javascript 在每行 onload 上计算和设置整数值高度来解决这个问题,如果没有其他问题出现,我将发布此解决方案。但是,我更喜欢纯基于 CSS 的解决方案。你能想到一个吗?
【问题讨论】:
-
你可以考虑作弊,将
ul的背景颜色设置为最后一个li的颜色。 -
@thirty 好吧,几行看起来没问题。随着行数的增加,累积的间隙可能会增长到大于单行的高度。在这种情况下,它“扩展”最后一行看起来很奇怪。
-
@thirty 不错的链接!不过,从快速浏览来看,这篇文章似乎并没有讨论解决方案。也许 cmets 会——我会仔细看看。
-
Another article on the issue - 虽然没有解决方案:(