Каменная кладка: подходы на CSS и JS
Создавайте сетки в стиле Pinterest с помощью column-count в CSS и стратегий запасного варианта на JavaScript.
«Каменная кладка: подходы на CSS и JS» — бесплатный урок CSS Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CSS Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CSS Academy содержит 4 уроков всего.
Что такое мозаичный макет
Мозаичный макет размещает элементы в столбцах, где каждый элемент заполняет следующее доступное вертикальное пространство, подобно Pinterest. Столбцы имеют одинаковую ширину, но элементы — разную высоту. В результате получается плотная, визуально динамичная сетка без пустого пространства между строками.
Мозаичная раскладка в CSS-сетке (экспериментальная)
В браузерах Chrome и Firefox при включённом флаге поддерживается grid-template-rows: masonry. Элементы размещаются в столбцах, но высота строк определяется их содержимым, поэтому элементы разной высоты уплотняются без промежутков. Это будущее нативное решение.
<div class="grid">
<div>1</div><div>2</div><div>3</div><div>4</div>
</div>Подход с колонками CSS
Колонки CSS создают раскладку, похожую на мозаичную: columns: 3; column-gap: 1rem. Элементы автоматически идут сверху вниз внутри каждого столбца. Ограничение: элементы упорядочиваются по столбцам (верх столбца 1, верх столбца 2 и так далее), а не по строкам, что влияет на порядок чтения и доступность.
Предотвращение разрывов между столбцами
Не позволяйте элементам разрываться между столбцами: задайте для каждого элемента break-inside: avoid. Без этого высокая карточка может разделиться между двумя столбцами, разрезав содержимое пополам. Всегда добавляйте это свойство, если используете колонки CSS для содержимого в виде карточек.
Библиотеки мозаичной раскладки на JavaScript
Masonry.js (автор David DeSandro) перемещает абсолютно позиционированные элементы, вычисляя высоту столбцов и помещая каждый элемент в самый короткий столбец. Isotope расширяет эту возможность сортировкой и фильтрацией. Обе библиотеки требуют JavaScript для вычисления и применения позиций.
Гибридный подход: CSS-сетка и JS
Лёгкий подход: определите сетку с фиксированным числом столбцов и строками высотой 1 пиксель, а затем с помощью JS задайте каждому элементу grid-row-end: span N в зависимости от высоты его содержимого и высоты строки. Элементы сохраняют выравнивание по строкам сетки, обеспечивая при этом разную высоту.
ResizeObserver для повторного вычисления
Позиции элементов мозаичной раскладки устаревают при изменении размера окна или загрузке изображений. Используйте ResizeObserver, чтобы обнаруживать изменения размера и запускать повторное вычисление. Устанавливайте задержку между пересчётами, чтобы избежать чрезмерных вычислений во время быстрых изменений размера.
Загрузка изображений и стабильность макета
Изображения с неизвестной высотой заставляют мозаичную раскладку пересчитываться после загрузки. Указывайте явные атрибуты ширины и высоты для всех изображений, чтобы браузер зарезервировал место до загрузки. Это предотвращает смещение позиций и уменьшает количество проходов повторного вычисления.
Бесконечная прокрутка с мозаичной раскладкой
Добавление элементов в мозаичную раскладку требует пересчёта только затронутых столбцов (столбцов с новыми элементами), а не всей сетки. Библиотеки вроде Masonry.js поддерживают анимацию добавляемых элементов и поэтапную раскладку без полного переразмещения при каждой новой порции.
Особенности доступности
Визуальный порядок элементов отличается от порядка DOM в раскладках, где элементы размещаются с помощью JavaScript. Убедитесь, что порядок перехода с клавиатуры соответствует порядку DOM (логической последовательности чтения), а не визуальному расположению. Осторожно добавляйте tabindex или полагайтесь на естественный порядок DOM для навигации с клавиатуры.
Компромиссы мозаичной раскладки только на CSS
Колонки CSS просты и не требуют JS, но задают порядок чтения по столбцам, а не по строкам, и не поддерживают фильтрацию или сортировку. Мозаичная сетка пока не поддерживается в готовых к эксплуатации браузерах. Мозаичная раскладка на JavaScript полнофункциональна, но увеличивает объём кода и добавляет задержку отрисовки, поскольку позиции вычисляются после загрузки содержимого.
Проверка знаний
Какое свойство CSS предотвращает разделение карточки между двумя колонками CSS?
Итоги
Мозаичный макет можно создать с помощью колонок CSS (просто, но с порядком элементов по столбцам), экспериментального grid-template-rows: masonry (перспективное будущее решение) или библиотек JavaScript, таких как Masonry.js (полнофункциональных, с сортировкой и фильтрацией). Каждый подход предполагает компромисс между простотой, доступностью и возможностями.
Часто задаваемые вопросы
Урок «Каменная кладка: подходы на CSS и JS» бесплатный?
Да — полный текст урока «Каменная кладка: подходы на CSS и JS» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CSS Academy, подпишись на CoddyKit PRO. Курс CSS Academy содержит 4 уроков всего.
Чему я научусь в уроке «Каменная кладка: подходы на CSS и JS»?
Создавайте сетки в стиле Pinterest с помощью column-count в CSS и стратегий запасного варианта на JavaScript. Ты практикуешь CSS Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CSS Academy?
Предыдущий опыт не требуется. CSS Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Каменная кладка: подходы на CSS и JS»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CSS Academy?
Да. Каждый урок CSS Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Компоновка с фиксированными подвалом и боковой панелью
- Компоновка «священный грааль» с Grid
- Каменная кладка: подходы на CSS и JS
- Внутренняя компоновка: размеры по содержимому