Свойство CSS `interpolate-size`
Базовая поддержка Ограниченная доступность
Эта функция не имеет базовой поддержки, поскольку не работает в некоторых наиболее широко используемых браузерах.
Экспериментальная функция: Это экспериментальная технология
Перед использованием в рабочей среде внимательно ознакомьтесь с таблицей совместимости с браузерами.
Экспериментальная функция: Это экспериментальная технология
Перед использованием в рабочей среде внимательно ознакомьтесь с таблицей совместимости с браузерами.
Свойство interpolate-size CSS позволяет включить анимацию и переходы между значением <length-percentage> и внутренним размером, fit-content или max-content.
Это свойство обычно используется для анимации width и/или height контейнера между <length-percentage> и полной величиной его содержимого (то есть между состояниями «закрыто» и «открыто» или «скрыто» и «показано»), если анимация немодельного CSS-свойства, например transform, не является подходящим решением.
Примечание: Поведение, включаемое свойством interpolate-size, нельзя включить по умолчанию во всём интернете, поскольку многие существующие сайты используют таблицы стилей, в которых предполагается, что значения внутренних размеров нельзя анимировать. Включение этого поведения по умолчанию вызвало бы ряд проблем обратной совместимости (см. соответствующее обсуждение CSS WG).
Синтаксис
/* Keyword values */ interpolate-size: allow-keywords; interpolate-size: numeric-only; /* Global values */ interpolate-size: inherit; interpolate-size: initial; interpolate-size: revert; interpolate-size: revert-layer; interpolate-size: unset;
Значения
Это свойство задаётся одним из следующих ключевых слов:
-
allow-keywords - Включает интерполяцию между значением
<length-percentage>и значением внутреннего размера, что позволяет анимировать переход между ними. -
numeric-only - Поведение по умолчанию — интерполяция значений внутренних размеров невозможна.
Описание
Задание interpolate-size: allow-keywords включает интерполяцию между значением <length-percentage> и значением внутреннего размера. Обратите внимание, что это не позволяет анимировать переход между двумя значениями внутренних размеров. Одним из концов анимации должно быть значение <length-percentage>.
Значение interpolate-size наследуется, поэтому возможность анимации к значению внутреннего размера (или от него) можно включить для всего документа, задав его корневому элементу:
:root {
interpolate-size: allow-keywords;
}
Чтобы ограничить область действия, можно задать его соответствующему элементу-контейнеру. Следующий пример включает интерполяцию внутренних размеров только для элемента <main> и его потомков:
main {
interpolate-size: allow-keywords;
}
Примечание: Возвращаемые значения функции calc-size() также можно интерполировать. Фактически, включение calc-size() в значение свойства автоматически применяет interpolate-size: allow-keywords к выбранному элементу. Однако, поскольку interpolate-size наследуется, как описано выше, в большинстве случаев для включения анимации внутренних размеров предпочтительно использовать именно его. Используйте calc-size() для включения такой анимации только в том случае, если она также требует вычислений.
Значения, которые можно интерполировать
В настоящее время анимацию можно включить для следующих внутренних значений:
automin-contentmax-contentfit-content-
content(для контейнеров, размер которых задаётся с помощьюflex-basis).
Формальное определение
| Начальное значение | numeric-only |
|---|---|
| Применяется к | всем элементам |
| Наследуется | да |
| Вычисленное значение | как задано |
| Тип анимации | Не анимируется |
Формальный синтаксис
interpolate-size =
numeric-only |
allow-keywords
Примеры
Основные сведения об использовании interpolate-size
В этом примере показано, как задать interpolate-size: allow-keywords для документа, чтобы включить анимацию с участием внутреннего размера. В демонстрации представлен значок персонажа с именем, при наведении указателя или получении фокуса которого отображается информация о персонаже. Для этого используется переход height между заданной длиной и max-content.
HTML
HTML содержит один элемент <section>, которому задано значение tabindex="0", чтобы он мог получать фокус клавиатуры. Элемент <section> содержит элементы <header> и <main>, каждый из которых содержит собственное дочернее содержимое.
<section tabindex="0">
<header>
<h2>Tanuki</h2>
</header>
<main>
<p>Tanuki is the silent phantom of MDN.</p>
<ul>
<li><strong>Height</strong>: 3.03m</li>
<li><strong>Weight</strong>: 160kg</li>
<li><strong>Tech Fu</strong>: 7</li>
<li><strong>Bad Jokes</strong>: 9</li>
</ul>
</main>
</section>
CSS
* {
box-sizing: border-box;
}
section {
font-family: "Helvetica", "Arial", sans-serif;
width: 175px;
border-radius: 5px;
background: #eeeeee;
box-shadow:
inset 1px 1px 4px rgb(255 255 255 / 0.5),
inset -1px -1px 4px rgb(0 0 0 / 0.5);
}
header {
padding: 0.7rem;
border-bottom: 2px solid #cccccc;
}
main {
padding: 10px;
}
h2 {
margin: 0;
font-weight: normal;
font-size: 1.1rem;
text-align: center;
letter-spacing: 1px;
}
p,
li {
font-size: 0.8rem;
line-height: 1.5;
}
p {
margin-top: 0;
}
В CSS сначала задаём interpolate-size: allow-keywords для :root, чтобы включить его для всего документа.
:root {
interpolate-size: allow-keywords;
}
Затем задаём для height элемента <section> значение 2.5rem, а для overflow — hidden, чтобы по умолчанию отображался только <header>. После этого указываем transition, которое анимирует <section> height в течение 1 секунды при смене состояния. Наконец, задаём <section> height для :hover и :focus, чтобы получить значение max-content.
section {
height: 2.5rem;
overflow: hidden;
transition: height ease 1s;
}
section:hover,
section:focus {
height: max-content;
}
Остальная часть CSS скрыта для краткости.
Результат
Попробуйте навести указатель на <section> или перевести на него фокус с помощью клавиатуры — его высота будет анимирована до полного размера, и отобразится всё содержимое.
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | WebView для Android | WebView на iOS | |
interpolate-size |
129 |
129 |
Нет |
115 |
Нет |
129 |
Нет |
86 |
Нет |
28.0 |
129 |
Нет |
allow-keywords |
129 |
129 |
Нет |
115 |
Нет |
129 |
Нет |
86 |
Нет |
28.0 |
129 |
Нет |
numeric-only |
129 |
129 |
Нет |
115 |
Нет |
129 |
Нет |
86 |
Нет |
28.0 |
129 |
Нет |
См. также
calc-size()- Анимация перехода к height: auto; (и другим ключевым словам внутреннего размера) в CSS на developer.chrome.com (2024)
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/interpolate-size