Верстка: выравнивание блоков по ширине

Есть набор блоков вида
<div class="item">
1
</div>
<div class="item">
2
</div>

и тд.

ширина и высота блоков фиксирована, допустим, 250*150. нужно выравнивать их, размещая в ряд по 4 или 3 штуки в зависимости от разрешения. например, от 1024 до 1280 ставим в ряд 3 блока, выше 1280 ставим 4 блока. блоки при этом должны занимать все свободное пространство в ряду.

кто может подсказать?
  • Вопрос задан
  • 11355 просмотров
Пригласить эксперта
Ответы на вопрос 8
Shvonder
@Shvonder
Я думаю без скриптов тут не обойтись. Сделал пример с использованием jQuery. Проверил только в FF 3.6:
<style>
	div.item {width: 250px; height: 150px; background: red; float: left;}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
	$(function ()
	{
		changeMargin();
	});
	$(window).resize(function()
	{
		changeMargin();
	});
	function changeMargin()
	{
		var container_width = $('div.container').width();
		var item_width = $('div.item').width();
		var items_count = Math.floor(container_width / item_width);
		var items_width = item_width * items_count;
		var difference = container_width - items_width;
		var margin = difference / (items_count - 1);
		$('div.item').each(function(index)
		{
			if (index > 0 && index % items_count != 0)
				$(this).css('margin-left', margin+'px');
			else
				$(this).css('margin-left', '0px');
		});
	}
</script>
<div class="container">
	<div class="item">1</div>
	<div class="item">2</div>
	<div class="item">3</div>
	<div class="item">4</div>
	<div class="item">5</div>
	<div class="item">6</div>
	<div class="item">7</div>
	<div class="item">8</div>
</div>
Ответ написан
@eresik
А куда вы хотите чтоб девался 4й блок при малом разрешении???
Если заранее известно сколько там будет блоков, то проще всего таблицей сделать.
Ответ написан
dom1n1k
@dom1n1k
Ну если все блоки фиксированного и одинакового размера — тогда просто сказать им всем «float: left» и вся недолга.
Они будут выстраиваться в ряд столько, сколько помещается в окне. Лишнее будет переноситься в следующий ряд.
Только в конце не забыть поток очистить («clear: both»).
Ответ написан
dom1n1k
@dom1n1k
Мм… нет, при justify последняя строчка не центруется. Она выравнивается влево.
Но вот то, что в ней почти наверняка собьется расстояние между блоками — это да.
Ответ написан
conturov
@conturov
Как вариант создайте DIV с определенной высотой(у вас 150px) и overflov:hidden, когда помещаться будет 4 блока то они покажутся все, а если 4-й не влезет он перейдет на следующую строку и не будет виден т.к. все что ниже закрыто для показа.
Ответ написан
k12th
@k12th
console.log(`You're pulling my leg, right?`);
посмотрите, как сделан поиск Яндекса по картинкам. Кажется, там именно таблицы.
Ответ написан
@Akram Автор вопроса
контент генерится на сервере.
Ответ написан
alexbeep
@alexbeep
Вопрос, я так понимаю, сводится к центрированию float-блоков. Задача нетривиальная.
Рабочее решение вот, пожалуй, единственное, когда-то использовал в работе его

www.cssplay.co.uk/menus/centered.html
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы