Предположим, вам нужно предоставить пользователю список цветов. Цвета должны отображаться в списке с фиксированной высотой, где каждый цвет занимает равную часть этой высоты.
Вот как это должно выглядеть с четырьмя цветами, высотой списка 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
WebKit в Safari и Chrome не очень любит нецелочисленные высоты пикселей и отбрасывает десятичные дроби. С четырьмя строками высотой 22 мы получаем 2 пустых пикселя внизу списка: 90 - 4 × 22 = 2
В контексте статического HTML-файла мы можем легко установить высоту элементов на 23, 22, 23, 23 пикселя соответственно, и список будет нормально отображаться в любом браузере. Если, с другой стороны, цвета загружаются из базы данных, а их количество меняется при каждом запросе, требуется более гибкое решение.
Я знаю, как решить эту проблему, вычисляя и устанавливая высоту целочисленного значения в каждой строке onload
с помощью Javascript, и я опубликую это решение, если ничего не появится. Однако я бы предпочел чисто CSS-решение проблемы. Можете ли вы придумать один?
ul
на цвет последнегоli
. - person thirtydot   schedule 25.02.2011