Spec-Zone.ru › CSS

Свойство 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() для включения такой анимации только в том случае, если она также требует вычислений.

Значения, которые можно интерполировать

В настоящее время анимацию можно включить для следующих внутренних значений:

  • auto
  • min-content
  • max-content
  • fit-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> или перевести на него фокус с помощью клавиатуры — его высота будет анимирована до полного размера, и отобразится всё содержимое.

Спецификации

Спецификация
Модуль значений и единиц CSS, уровень 5
# interpolate-size

Совместимость с браузерами

Настольные компьютеры Мобильные устройства
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API