Ответ 1
Добавьте clear: left
в класс .result
, чтобы ваши поля располагались вертикально.
Затем оберните результаты блоками по 3 и плавайте эти блоки по горизонтали. Вы можете сделать эту логику с помощью любого внешнего языка, который вы можете использовать для вывода разметки результатов или с помощью jQuery:
$('.result:nth-child(3n+1)').each(function() {
$(this).add( $(this).next().next().addBack() ).wrapAll('<div style="float:left"></div>');
});
Здесь более отзывчивое решение, которое пересчитывает при изменении размера окна: Демо.
Примечание: предполагается, что все ящики имеют одинаковую высоту. Вы можете жестко закодировать a max-height
в переменной resultHeight
, если это не так.
$(window).resize(function() {
var resultHeight = $('.result:first').outerHeight(true),
nRows = Math.floor( $('#wrap1').height() / resultHeight );
$('.results-column').contents().unwrap();
$('.result:nth-child('+nRows+'n+1)').each(function() {
$(this).nextAll().slice(0, nRows-1).add(this).wrapAll('<div class="results-column"></div>');
});
}).resize();
Добавлен CSS:
#wrap1 {
white-space: nowrap;
}
.results-column {
display: inline-block;
vertical-align: top;
}
Также проверьте Isotope с его макетами cellsByColumn
/fitColumns
.
И, наконец, ваш пример использования является ярким примером использования Flexible Box Layout. Я еще не упомянул об этом, потому что уже есть другие ответы, показывающие это решение, а также потому, что на данный момент довольно сложно сделать кросс-браузер:
- Firefox <= 27, IE10 и Safari <= 6 поддерживают старую версию спецификации
- Новые Chrome, Safari и IE11 поддерживают новый синтаксис
- Невозможно забыть все префиксы браузера!
Ссылка: http://caniuse.com/flexbox
Хотя, все еще не потеряно. Если вы хотите использовать Flexbox сегодня, есть очень полезный Flexbox generator.
Решение только с CSS с помощью Flexbox: Демо
#wrap1 {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-direction: normal;
-moz-box-direction: normal;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-pack: start;
-moz-box-pack: start;
-webkit-justify-content: flex-start;
-ms-flex-pack: start;
justify-content: flex-start;
-webkit-align-content: flex-start;
-ms-flex-line-pack: start;
align-content: flex-start;
-webkit-box-align: start;
-moz-box-align: start;
-webkit-align-items: flex-start;
-ms-flex-align: start;
align-items: flex-start;
}
Я тестировал это решение, и он корректно работает в IE10, IE11, Chrome 31, Opera 18 и Firefox 29 Nightly.
Примечание. Firefox <= 27 не поддерживает Flexbox более чем с одной строкой/столбцом (он не поддерживает flex-wrap: wrap
). Я тестировал это на Firefox 29 (ночное время), и он работает правильно, поэтому я считаю, что он должен скоро приземлиться на стабильном уровне.