Как адаптировать отступ под вырез в Telegram Mini App

    При разработке Telegram Mini App (TMA) в полноэкранном режиме разработчики сталкиваются с необходимостью учитывать вырез (notch) в верхней части экрана. На разных устройствах его размер и форма отличаются, а штатные кнопки закрытия и сворачивания приложения привязаны именно к этой области. Ручная установка отступа для каждого девайса неэффективна - гораздо удобнее использовать встроенные CSS-переменные.

    Почему отступ сверху важен в Telegram Mini App

    В полноэкранном режиме TMA контент может заходить под системную панель или вырез камеры. Если не задать корректный отступ, элементы интерфейса (кнопки, текст, меню) окажутся невидными или перекроются. Telegram предоставляет CSS-функцию safe-area-inset-top, которая автоматически возвращает актуальную высоту выреза для текущего устройства.

    Использование safe-area-inset-top для адаптации

    Свойство safe-area-inset-top - часть спецификации CSS env(). Оно возвращает значение в пикселях, соответствующее безопасной зоне в верхней части экрана. Для работы в Telegram Mini App необходимо добавить в CSS следующий код:

    .app-container {
      padding-top: env(safe-area-inset-top);
    }
    

    Этот подход гарантирует, что отступ будет меняться динамически в зависимости от модели смартфона (iPhone с «чёлкой», Android с каплевидным вырезом и т.д.).

    Дополнительные настройки для кнопок закрытия и сворачивания

    Штатные кнопки TMA (закрытие, сворачивание) расположены в верхней части экрана сразу под вырезом. Чтобы ваш интерфейс не перекрывал их, добавьте отступ не только для контента, но и для верхней панели навигации:

    .top-bar {
      position: fixed;
      top: 0;
      left: 0;
      right: 0;
      height: calc(env(safe-area-inset-top) + 44px);
      background: #fff;
    }
    

    Здесь 44px - примерная высота стандартной панели. Вы можете подобрать своё значение под дизайн приложения.

    Поддержка старых браузеров и fallback

    Не все версии WebView поддерживают env(). Для обеспечения обратной совместимости используйте fallback-значение:

    .app-container {
      padding-top: 20px; /* fallback для старых устройств */
      padding-top: env(safe-area-inset-top);
    }
    

    Браузеры, не поддерживающие env(), проигнорируют второе правило и применят отступ 20px. Для самых современных устройств (iPhone X и новее) сработает именно safe-area-inset-top.

    Проверка на разных устройствах

    После внедрения CSS-переменной обязательно протестируйте Mini App на нескольких устройствах: iPhone с вырезом, Android-смартфоны с разными типами notch, а также на планшетах. Используйте эмуляторы или реальные девайсы. Telegram Desktop не имеет выреза, поэтому там отступ будет равен 0.

    Заключение

    Адаптация отступа под вырез в Telegram Mini App не требует ручной подстройки под каждое устройство. Достаточно применить CSS env(safe-area-inset-top) и добавить fallback для старых браузеров. Это обеспечит корректное отображение интерфейса и сохранит доступ к системным кнопкам закрытия и сворачивания на любом смартфоне.

    Часто задаваемые вопросы