<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[CSS Grid Lanes - Мозаичная верстка]]></title><description><![CDATA[<p dir="auto">Настало будущее «каменной кладки» (masonry) на вебе!</p>
<p dir="auto">После работы, проделанной компании Mozilla, многолетних усилий команды WebKit от Apple и многочисленных дискуссий в рабочей группе CSS со всеми браузерами, теперь стало ясно, как это работает.</p>
<p dir="auto">Компании представили -  CSS Grid Lanes.</p>
<pre><code class="language-css">.container {
  display: grid-lanes;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  gap: 16px;
}
</code></pre>
<p dir="auto">Кстати попробовать можно уже сегодня в <a href="https://developer.apple.com/safari/resources/" target="_blank" rel="noopener noreferrer">Safari Technology Preview 234</a>.</p>
<h2>Как работают Grid Lanes</h2>
<p dir="auto"><img src="/assets/uploads/files/48/2b/ec/1766563204026-ba9f53cd-b2e5-4fa5-9024-0b0201947eb2-image-resized.webp" alt="ba9f53cd-b2e5-4fa5-9024-0b0201947eb2-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">HTML разметка  это просто контейнер с набором картинок:</p>
<pre><code class="language-html">&lt;main class="container"&gt;
  &lt;img src="photo-1.jpg"&gt;
  &lt;img src="photo-2.jpg"&gt;
  &lt;img src="photo-3.jpg"&gt;
  …
&lt;/main&gt;
</code></pre>
<p dir="auto">Сначала задаем <code>display: grid-lanes</code> на <code>main</code>, чтобы превратить его в Grid‑контейнер, готовый к такому типу раскладки. Затем используем <code>grid-template-columns</code>, чтобы создать «полосы» (lanes) с полной мощью CSS Grid.<br />
​<br />
В примере используется <code>repeat(auto-fill, minmax(250px, 1fr))</code>, чтобы создавать гибкие колонки минимум 250 px шириной; браузер сам решает, сколько колонок поместится по ширине.</p>
<pre><code class="language-css">.container {
  display: grid-lanes;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  gap: 16px;
}
</code></pre>
<p dir="auto"><code>gap: 16px</code> задаёт по 16 px между полосами и элементами. Всего тремя строками CSS, без единого media‑ или container‑запроса, получается адаптивный layout под любые размеры экрана.<br />
​<br />
Представьте это как шоссе с машинами в плотной пробке: каждый следующий элемент «перестраивается в полосу», которая продвигает его как можно дальше вперёд (ближе к верху окна).</p>
<p dir="auto"><img src="/assets/uploads/files/3d/d8/6e/1766563378272-9fb4dd09-e5a3-4cae-a910-da3e2611bcd1-image.webp" alt="9fb4dd09-e5a3-4cae-a910-da3e2611bcd1-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Как и в библиотеке <a href="https://masonry.desandro.com/" target="_blank" rel="noopener noreferrer">Masonry</a>, браузер кладёт очередной элемент в ту колонку, где он оказывается максимально близко к верху контейнера. Это позволяет пользователям переходить по табу по видимым элементам слева направо/сверху вниз, а не сначала по всей первой колонке ниже фолда. Также можно бесконечно подгружать контент при скролле без JS‑логики раскладки.<br />
​</p>
<h2>Сила Grid</h2>
<p dir="auto">Grid Lanes используют синтаксис <code>grid-template-*</code>, поэтому легко создавать вариации дизайна.<br />
​<br />
Например, можно сделать чередующиеся узкие и широкие колонки, где первая и последняя всегда узкие, даже когда количество колонок меняется:</p>
<pre><code class="language-css">grid-template-columns:
  repeat(auto-fill,
    minmax(8rem, 1fr) minmax(16rem, 2fr)
  )
  minmax(8rem, 1fr);
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/57/53/8c/1766563474772-498f18e7-b68f-402f-b66c-66c6b6b26ca6-image-resized.webp" alt="498f18e7-b68f-402f-b66c-66c6b6b26ca6-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Это открывает целый мир возможностей с использованием <code>grid-template-*</code>.</p>
<h2>Элементы, растягивающиеся на несколько полос</h2>
<p dir="auto">Поскольку используется полноценный Grid, элементы могут занимать несколько полос (span).</p>
<p dir="auto"><img src="/assets/uploads/files/7b/99/13/1766563519656-700d3a54-e4e6-4f78-9a7a-c462fa45d2e0-image-resized.webp" alt="700d3a54-e4e6-4f78-9a7a-c462fa45d2e0-image.png" class=" img-fluid img-markdown" /></p>
<pre><code class="language-css">main {
  display: grid-lanes;
  grid-template-columns: repeat(auto-fill, minmax(20ch, 1fr));
  gap: 2lh;
}

article {
  grid-column: span 1;
}

@media (1250px &lt; width) {
  article:nth-child(1) {
    grid-column: span 4;
  }
  article:nth-child(2),
  article:nth-child(3),
  article:nth-child(4),
  article:nth-child(5),
  article:nth-child(6),
  article:nth-child(7),
  article:nth-child(8) {
    grid-column: span 2;
  }
}
</code></pre>
<p dir="auto">Сначала всем тизерам статей задают <code>span 1</code>, затем первой - <code>span 4</code>, а 2–8 - <code>span 2</code>, что дает динамичную графическую композицию, отличающуюся от типичных симметричных сеток.<br />
​</p>
<h2>Явное размещение элементов</h2>
<p dir="auto">Grid Lanes также позволяют явно размещать элементы. В примере заголовок сайта всегда попадает в последнюю колонку, независимо от их количества.</p>
<pre><code class="language-css">main {
  display: grid-lanes;
  grid-template-columns: repeat(auto-fill, minmax(24ch, 1fr));
}

header {
  grid-column: -3 / -1;
}
</code></pre>
<h2>Изменение направления</h2>
<p dir="auto">Полосы могут идти в любом направлении. Примеры выше создают «водопад» (waterfall) - контент стекает вниз колонками. Grid Lanes также позволяют получить «кирпичную» (brick) раскладку по строкам.</p>
<p dir="auto"><img src="/assets/uploads/files/c7/a3/0d/1766563616164-51154d21-3084-4dcb-9d89-d909fc41c93d-image.webp" alt="51154d21-3084-4dcb-9d89-d909fc41c93d-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Браузер автоматически делает waterfall‑layout, если вы определяете колонки через <code>grid-template-columns</code>:</p>
<pre><code class="language-css">.container {
  display: grid-lanes;
  grid-template-columns: 1fr 1fr 1fr 1fr;
}
</code></pre>
<p dir="auto">Чтобы получить brick‑layout, вместо этого задайте строки через <code>grid-template-rows</code>:</p>
<pre><code class="language-css">.container {
  display: grid-lanes;
  grid-template-rows: 1fr 1fr 1fr;
}
</code></pre>
<p dir="auto">Это работает благодаря новому значению по умолчанию для <code>grid-auto-flow</code> - <code>normal</code>, которое само определяет, строится ли layout по колонкам или по строкам.</p>
<p dir="auto">Рабочая группа CSS все еще обсуждает, какое свойство явно управляет направлением потока и какой у него будет синтаксис: дорабатывается либо <code>grid-auto-flow</code>, либо новое свойство вроде <code>grid-lanes-direction</code>.</p>
<p dir="auto">Поскольку <code>normal</code> станет начальным значением в любом случае, можно уже учить Grid Lanes: если задать только <code>grid-template-rows</code> или <code>grid-template-columns</code>, все «просто работает». Если не работает - проверьте <code>grid-auto-flow</code> и при необходимости сбросьте через <code>unset</code>.</p>
<h2>Чувствительность размещения (tolerance)</h2>
<p dir="auto">Для Grid Lanes введено новое понятие «tolerance». Оно позволяет управлять тем, насколько строго алгоритм относится к микроскопическим отличиям в высоте элементов при выборе места.<br />
​<br />
Если элемент чуть-чуть ниже другого, при нулевой толерантности он может попасть в «выгодную» колонку, что меняет порядок визуальных групп и может создать неожиданную таб-навигацию.<br />
​<br />
Поэтому значение по умолчанию для <code>item-tolerance</code> - <code>1em</code>, то есть различия по высоте меньше 1em считаются «ничем» и не влияют на выбор полосы.</p>
<p dir="auto"><img src="/assets/uploads/files/7c/e9/81/1766563798120-70a84c6f-110e-494d-8ed8-8c9501de5187-image.webp" alt="70a84c6f-110e-494d-8ed8-8c9501de5187-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Если нужно меньше перетасовок, можно повысить <code>item-tolerance</code>; тогда элементы будут раскладываться почти слева направо, меняя полосу только при большой разнице в высоте (например, из‑за «лимузина» рисунок ниже).</p>
<p dir="auto">Важно учитывать пользователей, которые переходят по табу или работают со screen reader: слишком большая или слишком маленькая толерантность может приводить к неудобным скачкам фокуса. Подбирайте значение под реальные размеры контента.</p>
<p dir="auto"><img src="/assets/uploads/files/dc/12/4a/1766563852176-d5c35b18-eb8e-4960-b7a5-4c59003a0318-image.webp" alt="d5c35b18-eb8e-4960-b7a5-4c59003a0318-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Свойство сейчас называется <code>item-tolerance</code> в спецификации и Safari Technology Preview 234, но имя ещё могут изменить (например, на <code>flow-tolerance</code> или <code>pack-tolerance</code>). Стоит следить за обновлениями перед использованием в проде.</p>
<h2>Что же дальше</h2>
<p dir="auto">Grid Lanes уже доступны в Safari Technology Preview 234; все демо на <a href="http://webkit.org/demos/grid3" target="_blank" rel="noopener noreferrer">webkit.org/demos/grid3</a> обновлены под новый синтаксис, и это не только картинки.</p>
<p dir="auto"><img src="/assets/uploads/files/01/20/ff/1766563935473-cae2f4a5-fda7-40b6-be79-5f8aa21f5e64-image-resized.webp" alt="cae2f4a5-fda7-40b6-be79-5f8aa21f5e64-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Например, «мега‑меню» в футере с кучей ссылок разных высот становится легко раскладывать:</p>
<pre><code class="language-css">.container {
  display: grid-lanes;
  grid-template-columns: repeat(auto-fill, minmax(max-content, 24ch));
  column-gap: 4lh;
}
</code></pre>
<p dir="auto">Осталось немного финальных решений в рабочей группе CSS, но в целом фича в описанном виде уже готова к использованию, и базовый синтаксис можно запоминать.<br />
​<br />
Разработчики призывают делать свои демки, делиться багами и идеями, и отмечают, что команда работает над этим с середины 2022 года, реализуя поддержку в WebKit и прописывая стандарт.</p>
<p dir="auto">Официальную новость можно прочитать тут - <a href="https://webkit.org/blog/17660/introducing-css-grid-lanes/" target="_blank" rel="noopener noreferrer">https://webkit.org/blog/17660/introducing-css-grid-lanes/</a></p>
]]></description><link>https://forum.exlends.ru/topic/363/css-grid-lanes-mozaichnaya-verstka</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Jul 2026 23:48:26 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/363.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Dec 2025 08:13:45 GMT</pubDate><ttl>60</ttl></channel></rss>