Подключение и настройка плагина masonry. Используем Masonry для добавления сеточного стиля записей в WordPress

Включение скрипта jQuery Masonry в состав основных библиотек WordPress 3.5 позволяет легко изменить подход к выводу постов на экран главной странице вашего сайта. Этот скрипт позволяет представить все посты и картинки в виде единой "стены из кирпичиков", независимо от длины поста и размера картинок, что делает сайт визуально привлекательнее для читателей и к тому же напоминает по виду популярный нынче сервис Pinterest . При помощи jQuery Masonry все посты "подстраиваются" друг под друга и заполняют целиком отведенное им пространство без "пробелов" и "пустых мест" на главной странице. Давайте разберемся, как настроить такой внешний вид для вашего сайта.

Что такое вывод в "кирпичном" формате

Вывод контента на странице с такими настройками отображения постов напоминает, как мы уже сказали, главную страницу Pinterest . Все посты упорядочены вертикально и заполняют все отведенное под ленту пространство. Использовать можно и "плавающий" CSS, но в этом случае вы рискуете столкнуться "белыми пятнами" на странице, поскольку контент сначала упорядочивается по горизонтали, а уже потом по вертикали. В случае с jQuery Masonry проблему "белых пятен" можно легко решить.

Пример "плавающего" CSSПример jQuery Masonry ("кирпичная" структура)

В случае с jQuery Masonry каждый пост отлично вписывается в общую структуру, и при этом нет "белых пятен".

Давайте создадим достаточно простой вывод ваших постов на основе скрипта jQuery Masonry, раз мы уже знаем, что такое "кирпичная структура" для вывода постов на главной и как она работает.

Шаг 1. Используем wp_enqueue_script , чтобы загрузить библиотеку

Перед началом работы надо загрузить подходящий к данной задаче скрипт. Для этого следующий код надо добавить в файл под названием functions.php :

Function mason_script() { wp_enqueue_script("jquery-masonry"); } add_action("wp_enqueue_scripts", "mason_script");

Шаг 2. Настраиваем сетку

Для основной верстки нашей структуры добавляем следующий код HTML в цикл (либо же в ту часть шаблона, где планируется использовать нашу "кирпичную стену"). Для начала настроим общий контейнер для всех таких постов, а затем включим такой тип отображения для каждого отдельного поста:

Настраиваем CSS

Надо также указать ширину контейнер-блока и ширину отдельного поста, чтобы сохранить нужный нам вид "как в Pinterest." В нашем примере мы задаем ширину полосы в 960 px , и получаем 4 колонки постов с шириной в 240 px для каждого поста. Запоминаем эти параметры и настраиваем вывод в таблице стилей:

#container { width: 960px; // width of the entire container for the wall } .brick { width: 220px; // width of each brick less the padding inbetween padding: 0px 10px 15px 10px; }

Шаг 3. Настраиваем функцию

JQuery(document).ready(function($) { $("#container").masonry({ columnWidth: 220 }); });

Заключение

Masonry поставляется со множеством встроенных возможностей для использования данного скрипта в рамках WordPress. К примеру, вы можете применить эффекты анимации для "оживления" своих постов, добавить "на стену" дополнительные настройки и упорядочить вывод контента в определенном порядке либо же использовать этот скрипт наряду с Infinte Scroll . Независимо от того, как вы будете использовать скрипт jQuery Masonry, очень хорошо, что его добавили в WordPress 3.5.

Встречали сайты, где блоки разных размеров выводятся в контейнер, максимально рационально заполняя пространство?

Сделать такой вывод позволяет скрипт David"a DeSandro , который называется Masonry (с англ. кирпичная кладка). Также, наглядный пример можете посмотреть на официальном сайте скрипта . На офф. сайте вы найдете полную документацию на английском.

Masonry - это Javascript библиотека, позволяющая выводить HTML блоки в компактно-сложенном виде. Скрипт анализирует высоту каждого блока и максимально экономя пространство располагает его.

Возможно кто-то уже давно слышал о нем и даже использовал его в своих проектах, но я впервые столкнулся с ним недавно. Не могу сказать, что каждый сможет легко сделать любой вывод. Но с базовым использованием думаю справится каждый. Разобраться что и как там работает не так просто, но сказать что очень сложно я тоже не могу. Если вы неплохо разбираетесь в JS, то любой вывод должен получиться. Цель этого поста познакомить вас с Masonry и оставить заметку о нем для себя.

Masonry работает самостоятельно без использования библиотек, но также может использоваться как jQuery плагин.

В этом посте я сделаю перевод главной страницы офф-сайта, которая объясняет как начать работать со скриптом.

Masonry на Javascript Подключение Masonry

Эти пакеты установки, содержат все что нужно, для использования Masonry:

  • function mason_script() { // wp_register_script("masonry", "/path/to/masonry.pkgd.min.js"); // верхняя строка не нужна, потому что в WordPress masonry есть в комплекте по умолчанию, поэтому можно просто его подключить. wp_enqueue_script("masonry"); } add_action("wp_enqueue_scripts", "mason_script"); HTML

    Masonry работает с элементами контейнера, для которых указан один и тот же класс item:

    ... ... ... ...

    Класс можно указать любой, главное при вызове определить опцию itemSelector: ".item" .

    CSS

    Для блоков контейнера нужно указать ширину. Ширину нужно подбирать соответствующую контейнеру и параметру columnWidth (ширина колонки):

    Item { width: 25%; } .item.w2 { width: 50%; }

    Включение Masonry (Инициализация)

    Чтобы скрипт начал работать его нужно применить к нашему контейнеру. Запуск скрипта в виде экземпляра на чистом javascript делает так:

    Var container = document.querySelector("#container"); var msnry = new Masonry(container, { // Настройки columnWidth: 200, itemSelector: ".item" });

    В этом случае конструктор экземпляра содержит 2 аргумента: columnWidth (ширина колонки) и itemSelector (класс блоков в контейнере с которыми будет работать Masonry). Это не все опции, остальные смотрите в документации или ниже на этой странице.

    Инициализация через HTML

    Masonry можно запустить не используя Javascript, прямо из HTML, указав class js_masonry контейнеру и указав параметры в атрибуте data-masonry-options:

    Опции установленные в HTML должны быть в формате JSON. Аргументы должны быть в кавычках "itemSelector": . Имейте ввиду, что значение аттрибута HTML должно быть в одинарных кавычках " , потому что свойства JSON используют двойные кавычки " .

    Инициализация через jQuery

    Для использования Masonry не нужно jQuery, но если вам удобнее работать с jQuery, masonry работает с ним как плагин.

    Var $container = $("#container"); // Инициализация $container.masonry({ columnWidth: 200, itemSelector: ".item" });

    Чтобы получить экземпляр используйте метод.data("masonry") :

    Var msnry = $container.data("masonry");

    Инициализация для блоков с изображениями

    Так как картинки подгружаются отдельно от HTML кода, применение "Масонри" для блоков с картинкой обычно вызывает ошибку - наложение одного блока на другой. Так происходит потому что Масонри срабатывает до того, как картинка в блоке подгружается, блоку устанавливается высота, а затем картинка "рушит" эту высоту. Решить эту проблему можно несколькими способами:

    Способ 1

    Установить для всех изображений размеры жестко: ширину и высоту в пикселях.

    Способ 2

    Повесить обработку Масонри на событие load . Код для jQuery:

    JQuery(window).load(function(){ jQuery(".masonry").masonry({ columnWidth:310, itemSelector:".box, .item" }); });

    Минус этого способа в том, что тут скорее всего придется ждать загрузки всего "окна": jQuery(window).load . Использовать load отдельно для элемента редко допустимо, потому что jQuery будет интерпретировать его как AJAX функцию load. Чтобы этого избежать используйте 3-й пример.

    Способ 3

    Инициализировать работу Масонри, после того, как все картинки будут загружены. А для проверки загрузки использовать дополнительный JS скрипт imagesLoaded . Код:

    Var container = document.querySelector("#container"); var msnry; // Инициализация Масонри, после загрузки изображений imagesLoaded(container, function() { msnry = new Masonry(container); });

    Код для jQuery:

    Var $container = $("#container"); // Инициализация Масонри, после загрузки изображений $container.imagesLoaded(function() { $container.masonry(); });

    Заметка: также ошибка может быть при использовании дополнительных шрифтов, поэтому загрузку шрифтов нужно проверять.

    Свойства

    Обязательные свойства это: columnWidth and itemSelector . Все остальные можно использовать по желанию:

    ItemSelector(строка) (обязательный) Определяет какой дочерний элемент контейнера будет использован при построении кладки. Элемент нужно указывать, чтобы исключить другие элементы контейнера, которые используются для установки размеров см. "columnWidth": ".grid-sizer" .
    По умолчанию: нет columnWidth(число/элемент/селектор в виде строки) (обязательный) Ширина колонки в пикселях: "columnWidth": 60 . Если установить селектор или элемент, masonry будет использовать ширину установленного элемента: "columnWidth": ".gutter-sizer" .Masonry рассчитывает внешнюю ширину блоков, с учетом css свойств border, padding, margin.
    По умолчанию: нет containerStyle(объект) CSS стили которые применяются к контейнеру. Чтобы отменить применение masonry стилей к контейнеру укажите containerStyle: null
    По умолчанию: { position: "relative" } gutter(число/элемент/селектор в виде строки) Расстояние между элементами, подобное margin-right . Пример: "gutter": 10
    По умолчанию: 0 hiddenStyle(объект) Стили применяемые к спрятанным элементам.
    По умолчанию: { opacity: 0, transform: "scale(0.001)" } isFitWidth(логический) Устанавливает ширину контейнера равную доступному числу колонок, рассчитанную из ширины элементов контейнера. Когда установлен параметр, вы можете отцентровать контейнер через CSS. Заметка: это свойство не работает, если элементам контейнера установлена ширина в %, нужно в пикселях: width: 120px . Также, опция columnWidth должна быть установлена в фиксированное значение, например: columnWidth: 120 .
    По умолчанию: false isInitLayout(логический) Включает подстройку блоков во время инициализации. Установите в false, чтобы скрипт не строил кирпичную кладку при инициализации, так вы сможете использовать методы и добавлять события перед обработкой элементов контейнера.
    По умолчанию: true isOriginLeft(логический) Контролирует горизонтальное расположение блоков. По умолчанию блоки расставляются с лева на права. Установите в false, чтобы расположить блоки с права на лева.
    По умолчанию: true isOriginTop(логический) Контролирует вертикальное расположение блоков. По умолчанию блоки располагаются сверху вниз. Установите в false, чтобы блоки располагались снизу вверх.
    По умолчанию: true isResizeBound(логический) Связывает расположение блоков с изменениями размеров окна.
    По умолчанию: true stamp(элемент/массив элементов/строка селектор/NodeList) Определяет какие блоки нужно зафиксировать при выводе. Это специальные элементы к которым не будет применен эффект masonry. "stamp": ".stamp"
    По умолчанию: нет transitionDuration(строка) Продолжительность перехода (скорость анимации), когда блоки меняют позицию или появляются. Нужно устанавливать в формате времени для CSS. Чтобы отменить всю анимацию установите в 0: transitionDuration: 0
    По умолчанию: "0.4s" visibleStyle(объект) Стили, которые будут применены при показе скрытых элементов.
    По умолчанию: { opacity: 1, transform: "scale(1)" }

    Масонри на чистом CSS

    C недавних пор, практически все браузеры понимают свойство CSS column-count , .

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

    Суть такова.

    У нас есть такой HTML код:

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. ... ... ...

    И мы подключаем для него такие css стили:

    /* Контейнер блоков Masonry */ .masonry { column-count: 4; // сколько колонок нужно? column-gap: 1em; // промежуток между блоками (справа или слева) /* тоже самое с нужными префиксами на 18 марта 2016 */ -webkit-column-count: 4; -moz-column-count: 4; column-count: 4; -webkit-column-gap: 1em; -moz-column-gap: 1em; column-gap: 1em; } /* Блоки Masonry */ .masonry .item { display: inline-block; // важно! width: 100%; // важно! margin-bottom: 1em; background-color: #eee; }

    Минусов у этого варианта хватает

    Пробежимся по минусам этого метода и чем он уступает масонри.

    Поддержка браузеров, на сегодня (2016 г.) отличная , но все же не полная...

    Любую анимацию, нужно будет дописывать вручную.

    Главный минус column-count и, собственно, причина, по которой нельзя использовать этот способ вместо masonry в большинстве случаев - это направление блоков.

    Если у masonry читается по горизонтали:
    1 2 3
    4 5 6

    То в column-count по вертикали:
    1 3 5
    2 4 6

    С таким подходом использовать с хронологической точки зрения не вариант.

    Доброго времени суток всем! Это моя вторая статья в этом году. Первую про иконочный шрифт я опубликовал совсем недавно и меня радует, что я нашел время для написания второй статьи с таким небольшим отрывом. Пока для меня это небольшой отрыв, т.к. чаще писать нет возможности, но я стараюсь. 😎 А теперь давайте разберемся о чем пойдет речь в этой статье.

    Быть может многие из вас видели на сайтах расположение элементов (картинок, статей, различных блоков) кирпичным эффектом. Вы скажите — это же можно и через CSS сделать? Может и можно, но только такой гибкости не будет. Скрипт сам расставляет элементы на странице, используя вертикальное пространство. Также при позиционировании блоков скрипт добавляет анимацию. Пронаблюдать это можно в адаптивном дизайне, уменьшая окно браузера. Так вот, достигается это все с помощью небольшой javaScript-библиотеки — Masonry. Данный скрипт очень широко используется в современных трендовых дизайнах. Не знаю как в русско-язычном, но в зарубежном интернете Masonry получил большую популярность.

    Автором Masonry является David DeSandro из США. Хотелось бы сказать ему большое спасибо за такой хороший скрипт. Распространяется данная библиотека абсолютно бесплатно, так что смело можете использовать ее на своем сайте.

    Я думаю многим понравилось. На самом деле все очень красиво смотрится. Давайте разберемся как работать с Masonry, как вывести на нашем сайте наши блоки кирпичным эффектом?

    Структура статьи

    Для начала нам необходимо перейти на страничку скрипта — http://masonry.desandro.com и скачать последнюю версию. На момент написания данной статьи это версия — 4.0. Также на данном сайте вы найдете подробную документацию на английском языке. Я ниже разберу основные моменты из документации — как подключать, какие имеются опции и т.д. Все затрагивать не буду, т.к. я сам в некоторых моментах еще не разобрался. Для внедрения на свой сайт требуется сделать минимум действий. Вы сейчас в этом убедитесь.

    На сайте для скачивания имеются две версии скрипта — сжатая (минимизированная) и несжатая. Лучше использовать именно сжатую — masonry.pkgd.min.js. Также библиотеку можно подгрузить и из CDN:

    несжатая

    сжатая (минимизированная)

    Советую подключить минимизированную версию Masonry из CDN. Так мы уменьшим количество ненужных http-запросов. Вообще, какой бы вы скрипт не подключали, если есть возможность подключить минизированную версию с CDN, то подключайте именно ее.

    Для работы Masonry нам необходимо создать родительский блок и положить в него сами элементы.

    Для наглядности я создал демо-страничку с картинками разных размеров. В качестве примера элементов я взял именно картинки, т.к. они имеют разную высоту, но вместо картинок может быть любой блок: текст, видео и др. Попробуйте уменьшить окно браузера и вы увидите, как картинки плавно меняют свою позицию.

    Давайте посмотрим как будет выглядеть html-код:

    ...

    #container { border: 1px solid #ccc; margin: 0 auto; padding: 50px 0; max-width: 1170px; } /* Элемент сетки */ .element-item { border: 2px solid rgba(0, 0, 0, 0.35); margin-bottom: 15px; padding: 1px; width: 280px } /* /элемент сетки */ h1 { text-align: center; margin: 0 0 50px }

    Как видим, css используется здесь по минимуму.

    Инициализируем плагин Masonry

    Сделать это можно несколькими способами.

    Инициализация Masonry через javaScript

    Вы можете использовать Masonry как jQuery-плагин:

    $("selector").masonry();

    Но имейте ввиду, что для этого метода у вас должна быть подключена библиотека jQuery:

    На демо-страничке я инициализировал Masonry, как jQuery-плагин, т.е. код инициализации у меня следующий:

    JQuery(document).ready(function($) { $(".elements-gride").masonry({ // options itemSelector: ".element-item", columnWidth: 300 }); });

    Если вы обратили внимание методу «masonry()» мы передали две опции: ItemSelector и columnWidth. Это обязательные две опции. По словам разработчика они необходимы для нормальной работы скрипта. Впрочем, об опциях мы поговорим чуть ниже. Все, после этих действий должно все работать.

    Инициализация с помощью Vanilla JavaScript

    Вы можете использовать Masonry также и с Vanilla JS:

    New Masonry(elem, options)

    Конструктор Masonry() принимает два аргумента: дочерний элемент контейнера и опции объекта. Код инициализации будет следующий.

    Var elem = document.querySelector(".elements-gride"); var msnry = new Masonry(elem, { // options itemSelector: ".element-item", columnWidth: 200 }); // element argument can be a selector string // for an individual element var msnry = new Masonry(".elements-gride", { // options });

    Честно говоря, не работал с Vanilla JS поэтому конкретно не могу сказать чем он хорош, чем jQuery. Просто знайте, что есть такой метод.

    Инициализация через HTML

    Вы можете инициализировать Masonry через HTML, не написав ни единой строчки javaScript кода. Для этого понадобится добавить всем дочерним элементам контейнера атрибут — «data-masonry». Опции можно передать, в качестве значения.

    Передаваемые параметры должны соответствовать формату JSON. Хочу обратить ваше внимание на использование кавычек в коде. Кавычки для атрибута data-masonry пишутся одинарными, а для передаваемых опций — двойные. Т.е. именно так, как показано на примере.

    Данный вариант можно использовать, если вы не хотите использовать на сайте лишний javaScript. Например, я бы не стал лишний раз грузить jQuery, если на сайте он у меня нигде не используется.

    Вот такая вот библиотека. Ничего сложного нет. А что дальше?

    Размеры элементов

    Размеры дочерних элементов могут быть как фиксированными, так и резиновыми. При фиксированном размере (ширина и высота) элементов ширина блоков и их оформление задается в пользовательском css-файле стилей. По высоте хочу сказать, если вы используете не пустые блоки, то высота блока будет высчитываться браузером, исходя из его содержимого. В моем случае я высоту не задаю, т.к. картинки итак имеют свою высоту.

    ... .element-item { padding: 2px; width: 280px } jQuery(document).ready(function($) { $(".elements-gride").masonry({ // options itemSelector: ".element-item", columnWidth: 280 }); });

    Резиновая сетка

    При резиновой сетке ширина элементов задается в процентах. Резиновую сетку в основном используют в адаптивном дизайне. Подробнее об опциях поговорим ниже.

    ...

    ImagesLoaded

    Иногда при загрузке страницы может случиться так, что элементы будут перекрывать друг друга. При этом они собираются все в один комок и смотрится все ужасно. Так вот решить эту проблему можно с помощью небольшой библиотеки — imagesLoaded . Наиболее хорошо это проявилось у меня при адаптивном дизайне. Именно, когда я сайт открывал с мобильного телефона сетка изображений у меня собиралась в одну кучу.

    Подключаем imagesLoaded с CDN:

    С помощью imagesLoaded элемент позиционируется на странице только после полной его загрузки.

    // init Masonry var $grid = $(".grid").masonry({ // options... }); // layout Masonry after each image loads $grid.imagesLoaded().progress(function() { $grid.masonry("layout"); });

    Или инициализация Masonry происходит только после полной загрузки всех изображений.

    Var $grid = $(".grid").imagesLoaded(function() { // init Masonry after all images have loaded $grid.masonry({ // options... }); });

    Опции (Options)

    Теперь давайте разберем какие мы можем передать опции методу masonry() .

    Все опции сгруппированы. Ну, это сделано, чтобы легче было в них ориентироваться.

    Теперь давайте посмотрим какие опции входят в определенную группу.

    itemSelector

    Данная опция указывает к каким элементам будет применяться эффект Masonry. Полезно указывать данную опцию, потому что тем самым мы можем отсечь элементы которые не являются частью макета. Этот параметр нам уже знаком, когда мы разбирали инициализацию Masonry.

    ItemSelector: ".element-item"

    columnWidth

    Задает ширину элементов макета. Если данный параметр опустить Masonry возьмет внешнюю ширину первого элемента. Разработчик всегда советует указывать ширину колонок, будь то элементы фиксированные или резиновые.

    ColumnWidth: 80

    Размеры элементов (Element sizing)

    Если мы хотим сделать наш макет с элементами резиновым, например, при адаптивном дизайне, то для этих целей предусмотрен параметр, который делает нашу сетку резиновой.

    percentPosition

    Код резиновой сетки мы разбирали выше, но в подробности опций не вдавались.

    ... .element-item { padding: 2px; } .persent-size { width: 25% } jQuery(document).ready(function($) { $(".elements-gride").masonry({ // options itemSelector: ".element-item", columnWidth: ".persent-size", percentPosition: true }); });

    Как видим, чтобы активировать резиновую сетку мы добавили параметр percentPosition в код инициализации с булево значением «true «. А в качестве ширины указали класс элемента, которому в css присвоена ширина в процентах.демо

    gutter

    Между элементами можно задать отступ по горизонтали с помощью опции gutter , передав число. Число будет соответствовать отступам в пикселях.

    Gutter: 15

    Отступы по вертикали между элементами задаются в css.

    Element-item { margin-bottom: 15px; }

    Отступы можно задать и в процентах, т.е. они будут меняться в зависимости от размера окна браузера.

    ... .element-item { margin-bottom: 15px; padding: 2px; } .gutter-width { width: 4% } .persent-size { width: 22% } jQuery(document).ready(function($) { $(".elements-gride").masonry({ // options itemSelector: ".element-item", columnWidth: ".persent-size", gutter: ".gutter-width", percentPosition: true }); });

    Мы создали пустой DIV-блок перед списком элементов.

    В CSS для данного блока указали ширину в процентах. А в коде инициализации опции gutter мы указали класс данного пустого элемента. Скрипт сам создаст отступы в процентах, исходя из ширины данного блока.Демо

    stamp

    Данной опцией можно назначить элементы, которые будут штампованы в сетке Masonry. Остальные элементы будут находиться ниже и будут обтекать штампованные. Иногда это может быть полезным. Опции stamp передаем класс штампованного элемента.

    Stamp: ".stamp"

    Детальнее пример вы можете посмотреть на Codepen, а также отредактировать при необходимости.

    fitWidth

    Суть данной опции состоит в том, что когда мы ее активируем родительскому блоку элементов добавляется фиксированная ширина в пикселях. Причем ширина родительского блока равна сумме ширин всех дочерних элементов. Таким образом, указав в css родительскому блоку правило «margin: 0 auto » мы можем расположить блок с элементами Masonry по центру.

    Elements-gride { margin: 0 auto; } isFitWidth: true

    Внимание! Данная опция не работает с элементами, ширина которых указана в процентах. Значение опции «columnWidth» должно быть указано в пикселях, например, «columnWidth: 120». Иначе, элементы могут налезть друг на друга.

    originLeft

    По умолчанию все элементы сетки выравниваются слева на право. С опцией originLeft можно изменить горизонтальный поток элементов и задать выравнивание справа налево. Достаточно передать булево значение «false».

    OriginLeft: false

    originTop

    Также как и по горизонтали по умолчанию элементы сетки выравниваются по верхнему краю. С опцией originTop можно изменить поток элементов по вертикали и задать выравнивание снизу вверх, примерно как в тетрисе 🙂 .

    OriginTop: false

    Настройки (Setup)

    Переходим к опциям настроек.

    containerStyle

    Данная опция отменяет стили родительского контейнера элементов. По умолчанию родителю задается правило «position: relative». Данное правило можно отменить.

    ContainerStyle: null

    Конечно, можно было и переопределить через файл CSS с помощью «!important», но я не люблю так делать. Вообще я считаю это правило дурного тона в верстке. Лучше все же очистить стили, тем более разработчик дает нам такую возможность.

    transitionDuration

    Продолжительность перехода, когда элементы меняют свое местоположение. По умолчанию задано время — 0.4 сек. Формат времени задается, как формат времени CSS.

    TransitionDuration: "0.4s"

    Вот некоторые примеры установки времени.

    // Быстрая анимация transitionDuration: "0.2s" // Медленная анимация transitionDuration: "0.8s" // Нет анимации transitionDuration: 0

    resize

    C помощью данной опции можно отменить изменение размеров родительского блока. Т.е. по умолчанию, если не задать фиксированный размер родителю при уменьшении экрана браузера наши дочерние элементы сетки будут менять свое месторасположение, будут перемещаться вниз, занимая свободное пространство. Так вот с помощью опции «resize» можно отменить переходы.

    Resize: false

    Честно говоря, такого же эффекта можно добиться, если задать родителю просто фиксированный размер. Здесь я не понимаю разработчика — либо я что-то недопонял, либо данная опция имеет место быть в определенных случаях. Подробнее можете посмотреть на примере в Codepen. Попробуйте изменить размер экрана браузера. Потом поменяйте «resize: false» на «resize: true» и поймете о чем идет речь.

    initLayout

    Данная опция активирует нашу кирпичную сетку при инициализации скрипта. По умолчанию она включена — «initLayout: true». Но можно и отменить.

    InitLayout: false

    Вы можете использовать методы и события перед активацией сетки. Например, вы можете сделать так, что ваша сетка будет активироваться по клику определенной кнопки. Ну и далее что-то в этом роде.

    В данной статье я не буду разбирать события и методы, т.к. статья итак получилась объемной. Вы можете их самостоятельно изучить на сайте разработчика . Там же найдете и примеры реализации. Все довольно понятно изложено. Не всегда авторами скриптов пишутся такие инструкции. За инструкцию Masonry разработчику я бы поставил твердую — 5 . 🙂

    Masonry на чистом CSS

    Есть также вариант реализовать кирпичную кладку на чистом css. Не буду приводить здесь весь код. Можете глянуть на CodePen , ничего сложного нет. В данном случае удобно тем, что не нужно подключать лишние js-библиотеки и разбираться в опциях плагина.

    В принципе все то, что я изложил выше хватает, чтобы задействовать кирпичный эффект на своем сайте.

    А на этом все. Всем спасибо за внимание. Задавайте вопросы в комментариях, всегда буду рад помочь. Встретимся в следующих статьях. Пока!

    Сеточный вывод записей а-ля Pinterest – довольно популярный тип дизайна для главных страниц блогов WordPress. Популярен он не только потому, что подражает внешнему виду известного сайта, но и потому, что идеально использует свободное пространство экрана. Сеточный дизайн, примененный к главным страницам блогов WordPress, позволяет подогнать каждое превью записей так, чтобы они были в естественном размере, и на главной странице не оставалось пустого пространства.

    В данном руководстве я покажу вам, как использовать популярную JS-библиотеку Masonry для создания каскадных сеточных макетов вашей главной страницы, а также архивных страниц вашей темы. Я раскрою решение нескольких проблем, с которыми вы можете столкнуться при мобильной оптимизации.

    Шаг 1. Добавляем необходимые библиотеки к своей теме.

    Перед тем, как мы начнем, вам понадобится скачать два файла и добавить их в каталог JS вашей темы. Первый файл – это Masonry 3 , второй файл – ImaglesLoaded . Последний позволит нам использовать задержку вычисления сеточного макета, чтобы получить все необходимые размеры изображений, что позволит избежать различных проблем с разметкой.

    WordPress включает в себя Masonry 2, однако вместе с WordPress 3.7 библиотека не была обновлена до 3. В результате нам придется отменить регистрацию Masonry, что я обычно не делаю, но в данном случае поступить иначе не получится. Как вы можете заметить в функции ниже, мы просто добавляем Masonry 3 к фронт-энду, а не к области администратора, где библиотека по сути не требуется.

    Вот функция, а также действие для добавления двух библиотек и таблицы стилей для Masonry:

    If (! function_exists("slug_scripts_masonry")) : if (! is_admin()) : function slug_scripts_masonry() { //deregister built in masonry since it is old version 3. wp_deregister_script("jquery-masonry"); wp_enqueue_script("imagesLoaded", get_template_directory_uri()."/js/imagesloaded.pkgd.min.js", false, null, true); wp_enqueue_script("jquery-masonry", get_template_directory_uri()."/js/masonry.pkgd.min.js", array("imagesLoaded"), null, true); } wp_enquqe_style("masonry’, get_template_directory_uri()."/css/’); add_action("wp_enqueue_scripts", "slug_scripts_masonry"); endif; //! is_admin() endif; //! slug_scripts_masonry exists

    Единственное, что стоит отметить здесь: мы передаем хэндл imagesLoaded в качестве третьего параметра wp_enqueue_scripts(), который определяет зависимости. С его помощью мы убедимся в том, что Masonry будет загружаться всегда после imagesLoaded. Также отметьте для себя то, что мы не добавляем jQuery в качестве зависимостей для них. Одно из преимуществ Masonry 3 над Masonry 2 заключается в том, что версия 3 не требует библиотеки jQuery, но может использоваться с ней. Как показывает мой опыт, инициализация Masonry без jQuery более надежная, и открывает возможность пропуска загрузки jQuery, что позволяет решить проблемы с совместимостью и временем загрузки страниц.

    Шаг 2. Инициализируем Javascript.

    Следующая функция устанавливает Masonry, определяет контейнеры, которые будут использоваться библиотекой, а также проверяет корректность подключения. Masonry необходимо вычислить размер каждого из элементов страницы, чтобы динамично расположить свою сетку. Проблема, с которой я столкнулся, используя Masonry в большинстве браузеров, заключается в том, что Masonry неверно высчитывает высоту элементов при медленной загрузке изображений, что приводит к перекрытию элементов. Решение состоит в том, чтобы использовать imagesLoaded. Это поможет предотвратить проведение вычислений для разметки до тех пор, пока все изображения не будут загружены. В итоге будут проведены корректные измерения.

    Вот функция и действия, которые будут выводить скрипт инициализации в футере страницы:

    If (! function_exists("slug_masonry_init")) : function slug_masonry_exists() { ?> //set the container that Masonry will be inside of in a var var container = document.querySelector("#masonry-loop"); //create empty var msnry var msnry; // initialize Masonry after all images have loaded imagesLoaded(container, function() { msnry = new Masonry(container, { itemSelector: ".masonry-entry" }); }); >