假设您需要向用户呈现颜色列表。颜色必须以固定的高度显示在列表中,每种颜色占据该高度的相等部分。使用CSS均匀分布子元素的高度
这是它应该是什么样子四种颜色,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像素高 - 在边界内 - 每种颜色都可以在这个空间中看到(看起来)平等的份额。现在,让我们来呈现相同的HTML/CSS在Safari或Chrome:
注意绿色行和边界之间的窄的白色行。对于我们在这里看到的内容,有一个非常简单的解释:0.25 × 90 = 22.5
Safari和Chrome浏览器中的WebKit并不真正喜欢非整数像素高度并丢弃小数。在四行高度为22的情况下,我们在列表底部得到2个像素:90 - 4 × 22 = 2
在静态HTML文件的上下文中,我们可以很容易地将元素的高度设置为23,22,23,23像素,这个列表在任何浏览器中都会显示出来。另一方面,如果从数据库加载颜色并且计数随着每个请求而变化,则需要更灵活的解决方案。
我知道如何解决这个问题,通过使用Javascript计算并在每行上设置一个整数值高度onload
,如果没有其他显示,我会发布此解决方案。然而,我会选择纯粹的基于CSS的解决方案来解决这个问题。你能想到一个吗?
你可以考虑作弊和'ul'的背景色设置为最后的颜色'li'。 – thirtydot 2011-02-25 09:42:41
[约翰Resig在这个问题上。](http://ejohn.org/blog/sub-pixel-problems-in-css/) – thirtydot 2011-02-25 09:47:32
@th好吧,这将看起来好几行。随着行数越来越多,累积间隔可能会增长到高于单行的高度。在这种情况下,“延长”最后一行看起来很奇怪。 – 2011-02-25 09:49:24