Клавиша / esc

scale()

Элементы интерфейса могут стать больше или меньше, стоит только захотеть и применить знания CSS.

Время чтения: меньше 5 мин

Кратко

Скопировано

Функция scale() в CSS используется для масштабирования (изменения размера) элементов на странице. Это одна из функций трансформации, которая позволяет увеличивать или уменьшать элементы в 2D-пространстве.

Пример

Скопировано

Увеличиваем элемент в полтора раза:

        
          
          .element {  transform: scale(1.5);}
          .element {
  transform: scale(1.5);
}

        
        
          
        
      

Как пишется

Скопировано

x и y — положительные числа, либо значение 0.

Открыть демо в новой вкладке

Как понять

Скопировано

Если в функцию передать 0, то элемент визуально исчезнет. 1 соответствует нормальному масштабу. Значения от 0 до 1 — уменьшенный масштаб. Чем больше единицы, тем больше масштаб. Чтобы визуально увеличить элемент в три раза, нужно написать transform: scale(3).

Когда значение координаты выходит за пределы диапазона [-1, 1], элемент увеличивается вдоль этой оси. Когда значение находится внутри диапазона (-1, 1) — элемент уменьшается. Отрицательное значение даёт зеркальное отражение элемента по соответствующей оси. Значение 1 оставит элемент без изменений.

Нюансы

Скопировано

📝 Точка трансформации по умолчанию — центр элемента. Можно его изменить с помощью свойства transform-origin.

📝 scale() масштабирует весь элемент, включая содержимое, границы (border), тени (box-shadow) и внутренние отступы (padding).

📝 Не влияет на поток документа: окружающие элементы не сдвигаются.

📝 Единицы измерения — безразмерные коэффициенты (1 = 100%, 1.5 = 150% и так далее).

Доступность

Скопировано

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

Также рекомендуется использовать prefers-reduced-motion. Создайте медиазапрос @media, который будет отключать анимации, если у пользователя включена эта настройка в операционной системе.

Стандартная анимация:

        
          
          .animated-element {  transition: transform 0.3s ease;  transform: scale(1);}.animated-element:hover {  transform: scale(1.1);}
          .animated-element {
  transition: transform 0.3s ease;
  transform: scale(1);
}

.animated-element:hover {
  transform: scale(1.1);
}

        
        
          
        
      

Отключённая анимация с prefers-reduced-motion:

        
          
          @media (prefers-reduced-motion: reduce) {  .animated-element {    transition: none !important;    transform: none !important;  }}
          @media (prefers-reduced-motion: reduce) {
  .animated-element {
    transition: none !important;
    transform: none !important;
  }
}

        
        
          
        
      

Советы

Скопировано

💡 Уважайте системные настройки пользователя.
💡 Предоставляйте альтернативные способы взаимодействия без анимаций. Например, добавьте переключатель анимаций в настройки сайта.
💡 Для важной информации не полагайтесь исключительно на анимационные эффекты.

Открыть демо в новой вкладке

skaleX(), skaleY(), skaleZ()

Скопировано

CSS-функция scaleX() определяет изменение размера элемента по оси x (по горизонтали), scaleY() — изменение размера элемента по оси y (по вертикали), scaleZ() — изменение размера элемента по оси z.

        
          
          .block {  transform: scaleX(0.7);}div {  transform: scaleY(0.2);}.element {  transform: scaleZ(-1.5);}
          .block {
  transform: scaleX(0.7);
}
div {
  transform: scaleY(0.2);
}
.element {
  transform: scaleZ(-1.5);
}

        
        
          
        
      

scale3d()

Скопировано

Функция scale3d() в CSS позволяет масштабировать элементы в трёхмерном пространстве по осям x, y и z одновременно.

Синтаксис:

        
          
          .block {  transform: scale3d(sx, sy, sz);}
          .block {
  transform: scale3d(sx, sy, sz);
}

        
        
          
        
      

Где:

  • sx: коэффициент масштабирования по оси x (горизонталь);
  • sy: коэффициент масштабирования по оси y (вертикаль);
  • sz: коэффициент масштабирования по оси z (глубина).

Как это работает:

Скопировано

— если одно из значений равно нулю, весь элемент исчезает из виду;
— изменения значения одной из осей влияет на изменение размера вдоль этой оси;
— если все три значения равны, элемент не изменяется;
— по-другому можно записать scale3d() как значения scaleX(), scaleY() и scaleZ().

Такой код:

        
          
          .block {  transform: scale3d(0, 1, 2);}
          .block {
  transform: scale3d(0, 1, 2);
}

        
        
          
        
      

эквивалентен такому:

        
          
          .block {  transform: scaleX(0);  transform: scaleY(1);  transform: scaleZ(2);}
          .block {
  transform: scaleX(0);
  transform: scaleY(1);
  transform: scaleZ(2);
}

        
        
          
        
      
Поддержка в браузерах:
  • Chrome 104, поддерживается
  • Edge 104, поддерживается
  • Firefox 72, поддерживается
  • Safari 14.1, поддерживается
О Baseline