Разработка сайта для Вашего бизнеса. Веб дизайн. Дизайн логотипа, фирменного стиля, рекламная фотография . Комплексный рекламный креатив.

Ralex. We do the work.
На рынке с 1999го года. Средняя ценовая категория. Ориентация на эффективность решений.
Ознакомтесь с нашим портфолио
Узнайте больше о услугах
Свяжитесь с нами:
E-mail: [email protected]
Tel: (044) 587 - 84 - 78
Custom web design & дизайн и разработка сайта "под ключ"
Креативный, эффективный дизайн. Система управления сайтом (СУС).
Custom flexible разработка систем электронной коммерции
Система e-commerce разрабатывается под индивидуальные потребности. Гибкая функциональность.
Search Engine Optimzation & оптимизация под поисковые системы (SEO)
Постоянная оптимизация и мониторинг сайта в поисковых системах. Достигаем результата быстро и эффективно
Custom logo design & дизайн логотипа и фирменного стиля
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.
профессиональная рекламная фотография
креативно, смело, качественно
Custom logo design & рекламный креатив. дизайн рекламы
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.

Masonry - висновок html блоків у вигляді цегляної кладки

  1. Masonry на Javascript
  2. HTML
  3. CSS
  4. Включення Masonry (ініціалізація)
  5. Ініціалізація через HTML
  6. Ініціалізація через jQuery
  7. Ініціалізація для блоків з зображеннями
  8. спосіб 1
  9. спосіб 2
  10. спосіб 3
  11. властивості
  12. Масонрі на чистому CSS
  13. Мінусів у цього варіанту вистачає

Наша взаимовыгодная связь https://banwar.org/

Зустрічали сайти, де блоки різних розмірів виводяться в контейнер, максимально раціонально заповнюючи простір?

Приклад блоків Масонрі →

Зробити такий висновок дозволяє скрипт David'a DeSandro , Який називається Masonry (з англ. Цегляна кладка). Також, наочний приклад можете подивитися на офіційному сайті скрипта . На офф. сайті ви знайдете повну документацію англійською.

Masonry - це Javascript бібліотека, що дозволяє виводити HTML блоки в компактно-складеному вигляді. Скрипт аналізує висоту кожного блоку і максимально економлячи простір має його.

Можливо хтось вже давно чув про нього і навіть використовував його в своїх проектах, але я вперше зіткнувся з ним недавно. Не можу сказати, що кожен зможе легко зробити будь-який висновок. Але з базовим використанням думаю впорається кожен. Розібратися що і як там працює не так просто, але сказати що дуже складно я теж не можу. Якщо ви непогано розбираєтеся в JS, то будь-який висновок повинен вийти. Мета цього посту познайомити вас з Masonry і залишити замітку про нього для себе.

Masonry працює самостійно без використання бібліотек, але також може використовуватися як jQuery плагін.

У цьому пості я зроблю переклад головної сторінки офф-сайту, яка пояснює як почати працювати зі скриптом.

меню

Masonry на Javascript

підключення Masonry

Ці пакети установки, містять все що потрібно, для використання Masonry:

Завантажуйте js файл і підключайте його до вашого сайту:

<Script src = "/ path / to / masonry.pkgd.min.js"> </ script>

Для WordPress підключати краще використовуючи функцію wp_enqueue_script () :

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:

<Div id = "container"> <div class = "item"> ... </ div> <div class = "item w2"> ... </ div> <div class = "item"> ... </ div> ... </ div>

Клас можна вказати будь-який, головне при виклику визначити опцію 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:

<Div id = "container" class = "js-masonry" data-masonry-options = '{ "columnWidth": 200, "itemSelector": ".item"}'>

Опції встановлені в 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 код:

<Div class = "masonry"> <div class = "item"> Lorem ipsum dolor sit amet, consectetur adipisicing elit. </ Div> <div class = "item"> ... </ div> ... <div class = "item"> ... </ div> </ div>

І ми підключаємо для нього такі 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; }

Дивитися реальний приклад →

Мінусів у цього варіанту вистачає

Пробіжить по мінусів цього методу і чим він поступається масонрі.

  1. Підтримка браузерів, на сьогодні (2016 г.) відмінна , Але все-таки не повна ...

  2. Будь-яку анімацію, потрібно буде дописувати вручну.

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

    Якщо у masonry читається по горизонталі:
    1 2 3
    4 5 6

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

    З таким підходом використовувати з хронологічної точки зору не варіант.

    з коментаря

  4. Динамічне додавання елементів в блок, наприклад при AJAX навантаження, збиває з пантелику ... Тобто Масонрі, додає нові елементи після поточних і не чіпає поточні, так немає плутанини що додалося, а що ні. А ось цей варіант, плутає елементи.

    Наприклад, у нас є 3 колонки і 30 елементів - умовно по 10 в кожному стовпчику. Додаємо ще 10 і вони додадуться не рівномірно в усі 3 колонки, не зачіпаючи попереднє розташування елементів, а додадуться в HTML, а потім браузер перебудує розташування. При цьому в першу колонку може потрапити 1 елемент, в другу 2, а в третю 8. У результаті, після динамічного додавання елементів майже завжди виходить плутанина: що було і що додалося ...

    Тому, якщо плануєте довантажувати елементи Аяксом - цей варіант розглядати не варто!

Masonry {column-count: 4; // скільки колонок потрібно?
Категории
  • Биология
  • Математика
  • Краеведению
  • Лечебная
  • Наука
  • Физике
  • Природоведение
  • Информатика
  • Новости

  • Новости
    https://banwar.org/
    Наша взаимовыгодная связь https://banwar.org/. Запустив новый сайт, "Пари Матч" обещает своим клиентам незабываемый опыт и возможность выиграть крупные суммы.


    Наши клиенты
    Клиенты

    Быстрая связь

    Тел.: (044) 587-84-78
    E-mail: [email protected]

    Имя:
    E-mail:
    Телефон:
    Вопрос\Комментарий: