Masonry — это библиотека для динамической компоновки элементов на веб-странице, реализующая эффект «каменной кладки». Семантическая разметка при работе с Masonry играет ключевую роль в обеспечении правильного восприятия контента как пользователем, так и поисковыми системами. Она позволяет создавать структурированные, доступные и логически организованные блоки без потери визуального эффекта.
Семантика контейнера
Контейнер, внутри которого Masonry располагает элементы, должен иметь
логический HTML-тег, соответствующий типу контента. Для коллекций
изображений или карточек товаров целесообразно использовать
<section> или <div> с атрибутом
role="list". Если контент представляет собой список статей,
предпочтительнее <ul> или
<ol>.
<section class="grid" role="list">
<article class="grid-item" role="listitem">
<h2>Заголовок статьи</h2>
<p>Краткое описание контента.</p>
</article>
<article class="grid-item" role="listitem">
<h2>Заголовок статьи</h2>
<p>Краткое описание контента.</p>
</article>
</section>
В этом примере каждый элемент Masonry (grid-item)
оформлен как <article> с
role="listitem", что сохраняет логическую структуру
документа.
Семантика элементов
Каждый блок, размещаемый Masonry, должен быть самостоятельным и
семантически корректным. Для изображений используется
<figure> с подписью
<figcaption>:
<figure class="grid-item">
<img src="image1.jpg" alt="Описание изображения">
<figcaption>Подпись к изображению</figcaption>
</figure>
Это обеспечивает доступность контента для экранных читалок и улучшает SEO, позволяя поисковикам правильно индексировать изображения.
Атрибуты ARIA
При динамическом добавлении и перестройке элементов Masonry важна
поддержка ARIA-атрибутов. Атрибуты role,
aria-label, aria-live помогают пользователю
ориентироваться в изменяющемся контенте:
role="list" для контейнера;role="listitem" для элементов;aria-live="polite" для контейнера при динамическом
добавлении новых элементов.Пример динамического добавления элементов с Masonry и ARIA:
var grid = document.querySelector('.grid');
var msnry = new Masonry(grid, {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
percentPosition: true
});
function addItem(content) {
var item = document.createElement('article');
item.className = 'grid-item';
item.setAttribute('role', 'listitem');
item.innerHTML = `<h2>${content.title}</h2><p>${content.text}</p>`;
grid.appendChild(item);
msnry.appended(item);
}
Использование <header> и
<footer> внутри элементов
Каждый элемент Masonry может содержать собственные заголовки и футеры для структурирования информации:
<article class="grid-item">
<header>
<h2>Название карточки</h2>
</header>
<p>Описание контента карточки.</p>
<footer>
<small>Дата публикации: 13 марта 2026</small>
</footer>
</article>
Такой подход обеспечивает четкую семантическую иерархию и делает код удобным для поддержки.
Стилизация с сохранением семантики
Стилизовать Masonry можно без нарушения семантики. Для контейнера
применяется класс .grid, для элементов —
.grid-item. Сетка задается через CSS Flexbox или CSS
Grid:
.grid {
display: flex;
flex-wrap: wrap;
margin: -10px;
}
.grid-item {
width: 200px;
margin: 10px;
box-sizing: border-box;
}
Masonry автоматически распределяет элементы по колонкам, сохраняя исходную семантическую структуру.
Доступность и SEO
Семантическая разметка повышает:
Практические рекомендации
<div> без
семантической необходимости.Соблюдение этих принципов обеспечивает совместимость Masonry с современными стандартами веб-разработки и делает страницу структурированной, доступной и SEO-дружелюбной.