假設您需要向用戶呈現顏色列表。顏色必須以固定的高度顯示在列表中,每種顏色佔據該高度的相等部分。使用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