У меня есть несколько div с фиксированной шириной и высотой (подумайте о каком-то вид каталога с картинками). Теперь я хочу показать им похожие на поведение float: left. Это гарантирует, что чем больше ваше окно браузера, тем больше divs отображаются в одной строке.
Недостатком решения float: left является то, что на правой стороне есть большой белый зазор, пока не будет соответствовать другой div. Теперь у меня есть работа по распределению divs равномерно по одной странице, а вместо большого белого пробела с правой стороны должны быть равномерно распределенные промежутки между отдельными div.
Решение в JavaScript легко: http://dl.dropbox.com/u/2719942/css/columns.html
Вы можете видеть, что при изменении размера окна браузера он ведет себя подобно float: left, но пространство равномерно распределяется между полями. Количество столбцов и строк динамически вычисляется с помощью JavaScript:
function updateLayout() {
var boxes = document.getElementsByClassName('box');
var boxWidth = boxes[0].clientWidth;
var boxHeight = boxes[0].clientHeight;
var parentWidth = boxes[0].parentElement.clientWidth;
// Calculate how many boxes can fit into one row
var columns = Math.floor(parentWidth / boxWidth);
// Calculate the space to distribute the boxes evenly
var space = (parentWidth - (boxWidth * columns)) / columns;
// Now let reorder the boxes to their new positions
var col = 0;
var row = 0;
for (var i = 0; i < boxes.length; i++) {
boxes[i].style.left = (col * (boxWidth + space)) + "px";
boxes[i].style.top = (row * boxHeight) + "px";
if (++col >= columns) {
col = 0;
row++;
}
}
}
Теперь мне интересно, есть ли решение без JavaScript? Я бы предпочел решение только для CSS, потому что у меня будет возможно до сотни div на одной странице.
Я просмотрел CSS3 Flexible Box Layout, но это, по-видимому, полезно только для фиксированных макетов столбцов. В моем примере количество столбцов вычисляется динамически. Затем я попробовал CSS3 Multi-column Layout, который я мог бы получить что-то подобное, но divs выровнены по вертикали, отрезаны внутри, и поддержки браузера еще нет. Это кажется более полезным для текста, но в моем случае у меня есть фиксированные div с картинками, которые не должны прерываться.
Итак, мой вопрос: могу ли я реализовать что-то вроде этого без JavaScript?