W3docs

Свойство CSS zoom

Свойство CSS zoom масштабирует элементы страницы. Это нестандартное свойство, поддерживаемое лишь некоторыми браузерами.

Свойство CSS zoom масштабирует элемент и его содержимое, увеличивая или уменьшая его в заданное число раз. Значение 2 удваивает отрисованный размер, 0.5 — уменьшает вдвое, а normal (значение по умолчанию) оставляет элемент без изменений.

На этой странице описаны синтаксис zoom, все допустимые значения, отличия от transform: scale(), поддержка браузерами и рекомендации по выбору между ними.

Чем zoom отличается от transform: scale()

На первый взгляд эти свойства взаимозаменяемы, однако ведут себя совершенно по-разному:

  • zoom масштабирует макет и отрисовку. Масштабированный элемент занимает новый, увеличенный блок в потоке документа, сдвигая соседние элементы в стороны. Браузер также повторно выполняет расчёт макета, поэтому текст перераспределяется чётко по новому размеру.
  • transform: scale() масштабирует только отрисовку. Элемент сохраняет свой исходный блок для целей макета — визуально он увеличивается, но перекрывает соседей, а не сдвигает их, и масштабированные пиксели могут выглядеть слегка размыто.

Используйте zoom, когда нужно, чтобы окружающий макет реагировал на новый размер. Используйте transform: scale() (стандартный, полностью поддерживаемый вариант) для эффектов при наведении, анимаций и всего, что не должно нарушать поток.

Внимание

zoom является нестандартным и не поддерживается в старых версиях Firefox. Для продакшн-сайтов, которые должны работать везде, предпочтительнее использовать transform: scale() для изменения размера элемента.

Начальное значениеnormal
Применяется кВсем элементам.
НаследуетсяНет.
АнимируемоеДа.
ВерсияНестандартное
DOM Синтаксисobject.style.zoom = "4";

Синтаксис

Значения CSS zoom

zoom: normal | number | percentage | reset | initial | inherit;

На практике чаще всего используются формы number и percentage: zoom: 1.5 и zoom: 150% означают одно и то же.

Пример свойства zoom

В примере ниже отрисовываются три одинаковых круга, каждый масштабируется с разным коэффициентом, что позволяет сравнить normal, значение в процентах и безразмерное число рядом.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      div.element {
        width: 30px;
        height: 30px;
        border-radius: 50%;
        text-align: center;
        vertical-align: middle;
        display: inline-block;
        zoom: 2;
      }
      div#grey {
        background-color: #666;
        zoom: normal;
      }
      div#blue {
        background-color: #1c87c9;
        zoom: 300%;
      }
      div#green {
        background-color: #8ebf42;
        zoom: 5;
      }
    </style>
  </head>
  <body>
    <h2>Zoom property example</h2>
    <div id="grey" class="element"></div>
    <div id="blue" class="element"></div>
    <div id="green" class="element"></div>
  </body>
</html>

Результат

Таблица описания CSS zoom

На изображении показаны три круга, масштабированных с разными коэффициентами: серый круг использует normal (1x), синий — 300% (3x), зелёный — 5 (5x). Обратите внимание, как более крупные круги раздвигают окружающий макет, демонстрируя поведение zoom при масштабировании макета.

Значения

ЗначениеОписание
normalЗадаёт нормальный размер элемента.
numberКоэффициент масштабирования. Эквивалентен соответствующему проценту (1.0 = 100% = normal). Значения больше 1.0 увеличивают. Значения меньше 1.0 уменьшают.
percentageЗадаёт значение в процентах. 100% эквивалентно normal.
resetНе увеличивать элемент, если пользователь применяет немасштабирующее по жесту масштабирование документа.
initialУстанавливает для свойства значение по умолчанию.
inheritНаследует значение свойства от родительского элемента.

Поддержка браузерами

zoom возникло в Internet Explorer и впоследствии было подхвачено Chrome, Edge, Safari и Opera. Firefox добавил поддержку сравнительно недавно и долгие годы игнорировал это свойство, поэтому воспринимайте его как прогрессивное улучшение, а не как основной инструмент компоновки. Поскольку свойство нестандартное, всегда предоставляйте запасной вариант через transform: scale() для всего критичного.

Связанные свойства

  • transform — стандартный, полностью поддерживаемый способ масштабирования, поворота, наклона и перемещения элементов.
  • transition — анимация изменения при масштабировании по наведению или фокусу.
  • width — задаёт явный размер вместо коэффициента масштабирования.
  • overflow — управляет поведением при выходе масштабированного элемента за пределы контейнера.

Практика

Практика
Какое свойство следует использовать вместо этого свойства, если возможно?
Какое свойство следует использовать вместо этого свойства, если возможно?
Was this page helpful?