Почему Autoscale увеличил страницу, но не попап
Если Autoscale увеличил страницу, а попап остался мелким, не добавляйте второй `transform: scale()` вслепую. Сравните `t-record_scaled` и вычисленный `zoom` у обычной записи и попапа. Готовый MOD-181 решает более узкую задачу: вписывает явно размеченный внутренний контейнер в окно, не вмешиваясь в слой попапа и не выдавая себя за исправление родного Autoscale.
Короткий ответ
У родного Autoscale главный признак — класс t-record_scaled, а результат —
вычисленное CSS-свойство zoom. Если попап мелкий, сравните эти два признака у
обычной записи и у записи попапа. Только после этого понятно, не включили ли его
в масштабирование или включили с неправильным коэффициентом.
Что уже известно точно
Рантайм Autoscale не масштабирует страницу через transform. Он добавляет
правила для .t-record_scaled и задаёт переменную масштаба, которую браузер
использует как zoom. Подробно это разобрано в статье
про Autoscale и transform.
Ещё один штатный механизм — data-scale-off. Если у элемента стоит значение
yes, Тильда не применяет к нему масштабирование. Рантайм и сам ставит такой
атрибут некоторым узлам, поэтому правило «найти всё внутри попапа и удалить
data-scale-off» опасно: вместе с нужным содержимым можно затронуть карту,
фиксированную часть или другой специальный элемент.
Какая очевидная версия оказалась неверной
Легко предположить: попап создаётся в конце страницы, лежит вне масштабируемой
записи и потому не получает zoom. На сохранённой странице магазина это не так:
контейнер .t-popup находится внутри <div id="rec…">.
Но положение в HTML ещё не доказывает масштабирование. Решающий вопрос — получает
ли запись попапа t-record_scaled после публикации и открытия. Этот класс может
зависеть от настроек конкретной записи, момента инициализации и сценария чужой
модификации. MOD-181 не пытается чинить этот неизвестный участок:
он работает только с внутренним контейнером, который дизайнер отметил своим
классом, и не меняет масштаб самой записи.
Безопасная проверка на опубликованной странице
Откройте попап, затем вставьте в консоль браузера:
const popup = document.querySelector('.t-popup_show, .t-popup');
const record = popup?.closest('[id^="rec"]');
console.log({
record: record?.id,
scaled: record?.classList.contains('t-record_scaled'),
zoom: record ? getComputedStyle(record).zoom : null,
excluded: record?.getAttribute('data-scale-off'),
});
Проверка только читает страницу. Сделайте тот же замер для обычной записи, которая выглядит правильно. Получатся четыре полезных сценария:
| Обычная запись | Попап | Что проверять дальше |
|---|---|---|
| есть класс и zoom | нет класса | почему запись попапа не включена в Autoscale |
| есть класс и zoom | класс есть, zoom другой | момент пересчёта и собственные отступы |
| обе одинаковы | попап всё равно мелкий | внутренний контейнер или второй масштаб чужого мода |
| класса нет нигде | страница кажется крупнее | это не родной Autoscale или замерен не тот блок |
Почему второй масштаб — плохая заплатка
transform: scale() может визуально увеличить прямоугольник, но не становится
частью контракта Autoscale. У него своя точка трансформации, а размеры раскладки
и видимый результат начинают расходиться. Особенно неприятны последствия внутри
попапа:
- крестик закрытия визуально и фактически оказывается в разных местах;
- появляется лишняя прокрутка или обрезание;
- фиксированная колонка перестаёт вести себя как фиксированная;
- повторное открытие получает второй масштаб;
- на другом брейкпоинте коэффициенты перемножаются.
Слой попапа — отдельный вопрос. Если окно не мелкое, а находится под корзиной, это диагностируется через контексты наложения, а не через масштаб. Для него есть отдельный разбор про попап и z-index.
Что передать разработчику
Снимите четыре значения при открытом окне: id записи, наличие
t-record_scaled, вычисленный zoom и data-scale-off. Добавьте ширину окна и
уточните, работает ли тот же попап без стороннего Autoscale.
Этого достаточно, чтобы отличить недостающий класс от двойного масштаба и ошибки внутренней обёртки. Обещать готовое решение до такого замера нельзя: сохранённая страница доказала устройство DOM, но не доказала состояние класса у конкретного живого проекта.