env()
Базовая поддержка Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.
Функция env() CSS функция позволяет вставлять значения переменной среды, определенной агентом пользователя, в CSS, аналогично функции var() и настраиваемым свойствам. Разница в том, что переменные среды определяются агентом пользователя, а не автором, и имеют глобальный охват для документа, в то время как настраиваемые свойства имеют охват для элемента(ов), в котором они объявлены.
Кроме того, в отличие от настраиваемых свойств, которые нельзя использовать вне объявлений, функция env() может использоваться вместо любой части значения свойства или любой части описателя (например, в правилах правилах медиазапросов). По мере развития спецификации она также может быть использована в других местах, таких как селекторы.
Изначально предоставленная браузером iOS для размещения контента в безопасной области viewport, значения safe-area-inset-* , определенные в спецификации, помогают обеспечить видимость контента даже для пользователей с непрямоугольными дисплеями.
Например, распространённая проблема, решаемая с помощью env() — это уведомления устройства, которые могут перекрывать часть пользовательского интерфейса приложения. Размещая фиксированные элементы с помощью env() , вы можете гарантировать, что они отображаются в безопасной области viewport.
Ещё один пример использования переменных env() — это десктопные прогрессивные веб-приложения (PWA), которые используют функцию наложения управления окном, чтобы использовать всю область окна приложения. Используя значения titlebar-area-* , они могут разместить элементы там, где обычно находится строка заголовка, и гарантировать, что контент не перекрывает кнопки управления окном.
Синтаксис
/* Using the four safe area inset values with no fallback values */ env(safe-area-inset-top); env(safe-area-inset-right); env(safe-area-inset-bottom); env(safe-area-inset-left); /* Using them with fallback values */ env(safe-area-inset-top, 20px); env(safe-area-inset-right, 1em); env(safe-area-inset-bottom, 0.5vh); env(safe-area-inset-left, 1.4rem);
Значения
-
safe-area-inset-top,safe-area-inset-right,safe-area-inset-bottom,safe-area-inset-left -
Переменные
safe-area-inset-*— это четыре переменные среды, которые определяют прямоугольник по отступам сверху, справа, снизу и слева от края viewport, в котором можно размещать контент, не рискуя тем, что он будет обрезаться непрямоугольным дисплеем. Для прямоугольных viewport, таких как обычный монитор ноутбука, их значение равно нулю. Для непрямоугольных дисплеев, таких как круглые циферблаты часов, четыре значения, установленные агентом пользователя, образуют прямоугольник, так что весь контент внутри прямоугольника будет виден. -
titlebar-area-x,titlebar-area-y,titlebar-area-width,titlebar-area-height -
Переменные
titlebar-area-*полезны для PWA, установленных на устройствах с десктопной операционной системой. Когда десктопное PWA использует значение display_override, то оно может использовать переменныеtitlebar-area-*, чтобы убедиться, что контент не накладывается на кнопки управления окном (например, сворачивание, разворачивание и закрытие). -
keyboard-inset-top,keyboard-inset-right,keyboard-inset-bottom,keyboard-inset-left,keyboard-inset-width,keyboard-inset-height -
Переменные
keyboard-inset-*предоставляют информацию о виртуальной клавиатуре на экране. Они определяют прямоугольник по отступам сверху, справа, снизу и слева от края viewport (отступы по ширине и высоте рассчитываются из других отступов). Чтобы узнать больше, обратитесь к API виртуальной клавиатуры.
Примечание: В отличие от других свойств CSS, имена свойств, определяемых агентом пользователя, чувствительны к регистру.
Формальный синтаксис
<env()> =
env( <custom-ident> <integer [0,∞]>* , <declaration-value>? )
Использование
Чтобы указать браузеру использовать всё доступное пространство на экране и тем самым дать возможность использовать переменные env() , нужно добавить новое значение мета-тега viewport:
<meta name="viewport" content="viewport-fit=cover" />
Затем вы можете использовать env() в вашем CSS:
body {
padding: env(safe-area-inset-top, 20px) env(safe-area-inset-right, 20px)
env(safe-area-inset-bottom, 20px) env(safe-area-inset-left, 20px);
}
Примеры
Использование env() для предотвращения перекрытия кнопок интерфейсом устройства
В следующем примере используется env() для предотвращения перекрытия кнопок фиксированной панели инструментов приложения уведомлениями устройства, которые могут появляться в нижней части экрана. На десктопах safe-area-inset-bottom имеет значение 0. Однако на устройствах, отображающих уведомления в нижней части экрана, например, iOS, оно содержит значение, оставляющее место для отображения уведомления. Это значение затем используется в значении для padding-bottom , чтобы создать естественный для устройства зазор.
<main>Main content of app here</main> <footer> <button>Go here</button> <button>Or here</button> </footer>
body {
display: flex;
flex-direction: column;
min-height: 100vh;
font: 1em system-ui;
}
main {
flex: 1;
background-color: #eee;
padding: 1em;
}
footer {
flex: none;
display: flex;
gap: 1em;
justify-content: space-evenly;
background: black;
padding: 1em 1em calc(1em + env(safe-area-inset-bottom));
/* adds the safe-area-inset-bottom value to the initial 1em of padding.
a larger black area will display for a device that has a positive value for this variable. */
position: sticky;
bottom: 0;
}
button {
padding: 1em;
background: white;
color: black;
margin: 0;
width: 100%;
border: none;
font: 1em system-ui;
}
Использование значения по умолчанию
В следующем примере используется необязательный второй параметр env() , который позволяет указать значение по умолчанию на случай, если переменная среды недоступна.
<p> If the <code>env()</code> function is supported in your browser, this paragraph's text will have 50px of padding between it and the left border — but not the top, right and bottom. This is because the accompanying CSS is the equivalent of <code>padding: 0 0 0 50px</code>, because, unlike other CSS properties, user agent property names are case-sensitive. </p>
p {
width: 300px;
border: 2px solid red;
padding: env(safe-area-inset-top, 50px) env(safe-area-inset-right, 50px)
env(safe-area-inset-bottom, 50px) env(SAFE-AREA-INSET-LEFT, 50px);
}
Примеры значений
/* zero for all rectangular user agents */ padding: env(safe-area-inset-bottom, 50px); /* 50px because UA properties are case sensitive */ padding: env(Safe-area-inset-bottom, 50px); /* as if padding: '50px 20px' were set because x is not a valid environment variable */ padding: env(x, 50px 20px); /* ignored because '50px, 20px' is not a valid padding value and x is not a valid environment variable */ padding: env(x, 50px, 20px);
Синтаксис значения по умолчанию, как и для настраиваемых свойств, позволяет использовать запятые. Однако, если значение свойства не поддерживает запятые, оно считается некорректным.
Примечание: Свойства, определяемые агентом пользователя, не сбрасываются свойством all.
Использование env() для предотвращения перекрытия контента кнопками управления окном в десктопных PWA
В следующем примере env() обеспечивает, что контент, отображаемый в десктопном прогрессивном веб-приложении, использующем API наложения управления окном, не перекрывается кнопками управления окном операционной системы. Значения titlebar-area-* определяют прямоугольник, где обычно отображалась строка заголовка. На устройствах, не поддерживающих функцию наложения управления окном, таких как мобильные устройства, используются значения по умолчанию.
Вот как обычно выглядит PWA, установленная на десктопном устройстве:
С функцией наложения управления окном веб-контент занимает всю область окна приложения, а кнопки управления окном и кнопки PWA отображаются в виде наложений:
<header>Title of the app here</header> <main>Main content of app here</main>
header {
position: fixed;
left: env(titlebar-area-x);
top: env(titlebar-area-y);
width: env(titlebar-area-width);
height: env(titlebar-area-height);
}
main {
margin-top: env(titlebar-area-height);
}
Примечание: Использование position:fixed гарантирует, что заголовок не прокручивается вместе с остальным содержимым, а остаётся выровненным с кнопками управления окном, даже на устройствах/браузерах, поддерживающих эластичное прокручивание (также известное как "резиновая полоса").
Спецификации
Совместимость браузеров
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | WebView для Android | |
env |
69 | 79 | 65 | 56 | 11.111–11.1 | 69 | 65 | 48 | 11.311–11.3 | 10.0 | 69 |
safe-area-inset-bottom |
69 | 79 | 65 | 56 | 11 | 69 | 65 | 48 | 11 | 10.0 | 69 |
safe-area-inset-left |
69 | 79 | 65 | 56 | 11 | 69 | 65 | 48 | 11 | 10.0 | 69 |
safe-area-inset-right |
69 | 79 | 65 | 56 | 11 | 69 | 65 | 48 | 11 | 10.0 | 69 |
safe-area-inset-top |
69 | 79 | 65 | 56 | 11 | 69 | 65 | 48 | 11 | 10.0 | 69 |
titlebar-area-height |
9392–93Перед версией 93 поддержка Linux отсутствовала. |
9392–93Перед версией 93 поддержка Linux отсутствовала. |
Нет | 78 | Нет | 9392–93Перед версией 93 поддержка Linux отсутствовала. |
Нет | 65 | Нет | 17.0 | Нет |
titlebar-area-width |
9392–93Перед версией 93 поддержка Linux отсутствовала. |
9392–93Перед версией 93 поддержка Linux отсутствовала. |
Нет | 78 | Нет | 9392–93Перед версией 93 поддержка Linux отсутствовала. |
Нет | 65 | Нет | 17.0 | Нет |
titlebar-area-x |
9392–93Перед версией 93 поддержка Linux отсутствовала. |
9392–93Перед версией 93 поддержка Linux отсутствовала. |
Нет | 78 | Нет | 9392–93Перед версией 93 поддержка Linux отсутствовала. |
Нет | 65 | Нет | 17.0 | Нет |
titlebar-area-y |
9392–93Перед версией 93 поддержка Linux отсутствовала. |
9392–93Перед версией 93 поддержка Linux отсутствовала. |
Нет | 78 | Нет | 9392–93Перед версией 93 поддержка Linux отсутствовала. |
Нет | 65 | Нет | 17.0 | Нет |
См. также
var(…)- Модуль CSS пользовательских свойств для каскадных переменных
- Пользовательские свойства (
--*): переменные CSS - Использование пользовательских свойств CSS (переменных)
- Настройка наложения элементов управления окном в строке заголовка вашего PWA
- Отображение содержимого в строке заголовка
- Выход за рамки
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/env