2011-01-21 3 views
2

У меня есть набор левых плавающих DIV внутри гибкого контейнера (часть № 1), когда размер контейнера изменяется таким образом, что он не может содержать все DIV в одной строке вместо поведения по умолчанию (2) Я хочу, чтобы строки были идеально выровнены, поддерживая пространства там, где это необходимо (поведение, подобное таблицам), как показано в части №3.Выравнивание плавающих DIVs в гибком контейнере

Можно ли выполнить это, используя только CSS и HTML? alt text

ответ

1

Вашего # 2 изображения является не, что происходит, когда элементы слева плавало. Вы можете увидеть пример того, что будет произойдет на this fiddle.

И если вы заинтересованы в the reason:

перемещаемого окно сдвигается влево или вправо, пока его внешний край коснется содержащий блок край или внешний край другого поплавка. Если есть строка строки, внешний верх плавающего поля выравнивается с верхней частью текущего строкового поля.

Если вы знаете заранее, насколько широк контейнер будет, вы можете установить каждый :nth-child() иметь clear:left для отображения в строке.

в скрипку, вы можете добавить:

div:nth-child(3n) 
{ 
    clear: left; 
} 

В CSS, и все будет выровнен. Проблема будет состоять в том, что если вы хотите создать макет с автоматическими настройками строк. Вам нужно будет использовать JavaScript для настройки стилей элементов при изменении размера.

+0

Спасибо, не знал об этом материале nth-child. Я буду экспериментировать с этим, и, возможно, мне удастся объединить это с запросами медиа-запросов по ширине таким образом, что для некоторого диапазона в зависимости от ширины контейнера N будет изменено на основе выражения запроса. – Anton

+0

поддерживается только в современных браузерах, то есть не в IE. – zzzzBov

+1

Все еще будет работать для меня. Я буду использовать это в своем собственном проекте, где я уже решил отказаться от поддержки IE ниже 9. – Anton

0

Первое, что приходит в голову, - это обернуть каждую коробку в div с равномерным размером, который делает плавающий, и который имеет прозрачный фон.

0

Для этого вам нужно знать высоту для вашего самого большого div. Если это динамично, и вы не можете контролировать или прогнозировать высоту, я не думаю, что это сработает.

По существу, оберните каждый из divs в другой div и установите свойство min-height самому большому div, который вы ожидаете увидеть.

Это должно произвести №3.

Также проверьте мин высоту хак для IE 7 - Min-Height Fast Hack

+0

Насколько я понимаю, для этого мне нужно будет использовать JS, чтобы найти самый большой DIV в каждой «строке» после каждого изменения размера? – Anton

+0

Если вы еще не знаете или можете предсказать самую большую высоту. В противном случае я думаю, что javascript будет единственным способом. Если вы знаете высоту своего самого большого div, просто примените свойство min-height в своем CSS к div, который их обертывает. –

Смежные вопросы