Динамическое выравнивание контейнера с float-left блоками по центру с помощью JS+CSS
В предыдущей статье мы рассмотрели, как сделать дизайн страницы WordPress в форме "карточек" с помощью JQuery Masonry. Если у вас блоки-карточки одинаковой ширины, то layout визуально будет размещаться в виде колонок.
При этом, ввиду особенностей атрибута стиля float:left, все колонки будут прижаты к левому краю окна, а контейнер будет иметь ширину 100%.
Рассмотрим, как выровнять набор колонок по центру не зависимо от ширины экрана. Предусмотрим также динамическое перестроение при изменении размера окна.
В файле стилей зададим контейнеру и блокам следующие стили:
#postcontainer { margin: 0px auto; width: 100%; } #postcontainer .post { background: #FFFFFF; float: left; margin: 20px 7px 0px; vertical-align: top; width: 300px; } |
Подключаем скрипты jquery и плагин masonry в заголовке страницы.
<script type="text/javascript" src="/js/jquery.min.js"/> <script type="text/javascript" src="/js/masonry.pkgd.min.js"/> |
Нижеприведенный код выполняет "укладку" блоков в стиле карточек с помощью Masonry и в функции stylesheetToggle() динамически пересчитывает ширину контейнера в зависимости от того, сколько колонок помещается в окно.
$(document).ready(function(){ stylesheetToggle(); //первый вызов при загрузке страницы $(window).resize(stylesheetToggle); //вызов при каждом изменении окна браузера $('#postcontainer').masonry({ //опции динамического layout itemSelector: '.post', singleMode: true, isResizable: true, isAnimated: true, animationOptions: { queue: false, duration: 500 } }); }); //функция пересчета ширины контейнера function stylesheetToggle(){ //количество блоков на странице var count = $(".post").length; //количество блоков шириной 320px (с отступами), которые помещаются в текущее окно var columns = $('body').width() / 320 | 0; //если блоков меньше, чем помещается в экран, вычисляем из расчета "сколько есть" if (count<columns) columns=count; //суммарная ширина блоков, которые надо вместить в экран var colwidth = columns*320; //ограничитель ширины контейнера, если не нужно растягивать на весь экран if (colwidth<1280){ //ширина контейнера подгоняется под количество колонок $('#postcontainer').width(columns*320); } else{ $('#postcontainer').width("1280px"); } } |
Приведенная функция рассчитает ширину контейнера согласно числу колонок при первоначальной загрузке страницы. Затем, если размер окна изменится, она определит число колонок, вмещающихся в экран по ширине, и пересчитает ширину контейнера.
Благодаря комбинации заданной ширины и свойства margin: 0px auto, контейнер с блоками выравняется по ширине окна, а внутренние блоки будут равномерно в нем распределены.
В примере ширина контейнера ограничена 1280px.