Дайджесты новостей
Интерактивная трехмерная сетка позиционирования CSS anchor positioning с центральным якорем и активной областью в DevTools

Chrome DevTools: визуальный редактор position-area и инструменты отладки для ИИ-агентов

Если ты когда-нибудь верстал всплывающие подсказки, контекстные меню или выпадающие списки в веб-приложении, то наверняка помнишь, в какую инженерную акробатику это превращалось. Казалось бы, тривиальная задача — прикрепить маленький информационный блок к кнопке и удержать его рядом при прокрутке страницы.

Но в реальности разработчикам приходилось подключать увесистые сторонние библиотеки вроде Popper.js или Floating UI. Эти скрипты навешивали глобальные обработчики на события scroll и resize, на каждый чих вызывали тяжелый метод getBoundingClientRect(), провоцировали принудительный пересчет раскладки (reflow) и нередко вызывали раздражающее визуальное мерцание интерфейса при быстрой прокрутке.

Долгожданная спецификация CSS Anchor Positioning перенесла эту механику туда, где ей самое место — непосредственно в браузерный движок рендеринга. Браузер теперь сам рассчитывает координаты всплывающего элемента относительно целевого якоря на этапе компоновки страницы. Однако у этой свободы появилась обратная сторона: декларативное свойство position-area с его девятиклеточной матрицей и десятками вариаций ключевых слов вроде block-end inline-start или top span-left поначалу взрывало мозг даже опытным верстальщикам.

В осенних релизах Chrome 155 и 156 команда Chrome for Developers выкатила мощный ответ на эти трудности, о чем подробно рассказано в нововведениях Chrome DevTools. Разработчики получили интерактивный визуальный редактор сетки прямо в панели инспектора стилей, а кодинг-агенты — специализированный инструмент get_css_styles для программного анализа стилей.

Визуальная сетка: интуитивная настройка position-area

Меня в новом интерфейсе DevTools больше всего порадовало то, насколько наглядно авторы визуализировали математику якорей. Больше не нужно держать в голове шпаргалку по физическим и логическим осям CSS: достаточно открыть панель Elements, перейти на вкладку Styles и кликнуть по миниатюрной пиктограмме (swatch) рядом со свойством position-area.

Перед тобой мгновенно разворачивается интерактивная сетка размером три на три ячейки, моделирующая пространство вокруг опорного элемента:

  • Центральная клетка: символизирует сам якорный элемент (anchor);
  • Окружающие ячейки: отображают восемь внешних секторов (верхний, нижний, левый, правый и четыре угловых квадранта);
  • Диапазоны охвата (span-селекторы): позволяют одним движением мыши растянуть поповер вдоль стороны якоря (например, top span-all или bottom span-left).

При клике на ячейку DevTools не только автоматически подставляет правильное значение свойства в CSS-правило, но и оптимизирует синтаксис, убирая избыточные ключевые слова. Параллельно на самом холсте страницы включается информативный оверлей (Viewport Overlay). Он подсвечивает границы так называемого содержащего блока с измененной вставкой (Inset-Modified Containing Block, IMCB), визуализирует текущие отступы (margin) и показывает предельные линии выравнивания, исключая ситуации, когда тултип неожиданно обрезается краем экрана.

Если в сложной верстке у элемента объявлено несколько неявных якорей (Implicit Anchors), в контекстном меню узла дерева DOM появился прямой пункт перехода к соответствующему опорному блоку, избавляя от ручного поиска по идентификаторам в HTML-разметке.

Декларативная верстка всплывающих подсказок без JavaScript

Давай взглянем, как на практике выглядит связка кнопки и поповера с использованием нативного якорного позиционирования и адаптивного отката стилей:

<!-- Кнопка-якорь и всплывающая подсказка в разметке -->
<button id="deploy-btn" class="anchor-button">
  Запустить деплой
</button>

<div id="deploy-tooltip" popover="manual" class="tooltip-bubble">
  Сборка артефактов и выкатка на серверы продакшена
</div>
/* Назначение имени якоря через системное свойство */
.anchor-button {
  anchor-name: --deploy-action;
}

/* Стилизация и привязка всплывающего элемента */
.tooltip-bubble {
  position: fixed;
  position-anchor: --deploy-action;
  
  /* Размещение подсказки строго над кнопкой по центру */
  position-area: top center;
  margin-bottom: 10px;
  
  padding: 8px 14px;
  background-color: #111827;
  color: #f3f4f6;
  border-radius: 6px;
  font-size: 13px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}

/* Правило адаптивного отката: если сверху экрана не хватает места */
@position-try --flip-to-bottom {
  position-area: bottom center;
  margin-top: 10px;
  margin-bottom: 0;
}

.tooltip-bubble {
  /* Автоматическое переключение на нижнее положение при переполнении */
  position-try-fallbacks: --flip-to-bottom;
}

Обрати внимание на блок @position-try: браузер берет на себя физический расчет геометрических коллизий. Если пользователь проскроллил страницу так, что кнопка оказалась у верхней кромки окна, движок мгновенно и без малейшего участия JavaScript активирует альтернативное правило --flip-to-bottom. Никаких утечек памяти, никаких слушателей событий и нулевой оверхед по скриптам.

DevTools for Agents: глаза для автономных кодинг-ботов

Второе фундаментальное нововведение осенней волны обновлений Chrome DevTools адресовано не столько людям, сколько искусственному интеллекту.

Автономные агенты программирования (Claude Code, Cursor, Windsurf) великолепно пишут алгоритмы и генерируют компоненты, но при верстке пользовательских интерфейсов они буквально действуют вслепую. Модель может изучить исходный CSS-файл, но она не знает, какие именно стили победили в каскаде, перекрыт ли блок соседним слоем и почему верстка поплыла на мобильном разрешении.

Инициатива DevTools for Agents открывает специальный протокол взаимодействия, адаптированный под жесткие лимиты контекстных окон LLM. Центральным элементом этого интерфейса стал инструмент get_css_styles.

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

{
  "method": "get_css_styles",
  "params": {
    "nodeId": 284,
    "pageSize": 20,
    "pageIdx": 0,
    "includeMatchedRules": true,
    "includeInherited": false,
    "includeAtRules": true
  }
}

В ответ агент получает компактный JSON-объект, содержащий точные вычисленные стили (computedStyles), сработавшие селекторы (matchedRules), а также современные директивы @position-try и типизированные пользовательские свойства @property.

Для защиты инфраструктуры разработчика протокол строго разграничивает доступ к файловой системе: флаг командной строки --allow-unrestricted-paths предотвращает несанкционированное чтение файлов проекта за пределами рабочей директории. Кроме того, внутренняя подсистема парсинга трассировок Chrome была оптимизирована под потоковую обработку дампов производительности размером более 1 ГБ, исключая падения процесса отладки при длительных сессиях профилирования.

Эволюция браузерной платформы и инженерные выводы

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

Спецификация CSS Anchor Positioning уже полностью поддерживается в Chromium-браузерах (Chrome, Edge, Opera, Brave). В движках Safari (WebKit) и Firefox реализация находится в активной разработке за экспериментальными флагами, поэтому для критичных кроссбраузерных проектов пока сохраняется потребность в официальном полифиле @oddbird/css-anchor-positioning.

Однако вектор развития очевиден: нативная платформа последовательно забирает себе то, ради чего раньше приходилось тащить мегабайты внешних скриптов. А появление специализированных API для нейросетевых агентов превращает Chrome в полноценного напарника по парному программированию, способного не только исполнять код, но и на понятном языке объяснять моделям, как именно выглядит страница на экране реального пользователя.