Увеличение масштаба элементов с помощью свойства zoom в CSS

CSS свойство zoom позволяет легко масштабировать элементы на веб-странице. Это удобный инструмент для создания интерактивных эффектов при наведении курсора или для адаптивного дизайна.

Основы работы свойства zoom

Свойство zoom задается следующим образом:

zoom: значение;

Оно принимает несколько разных значений:

  • normal - исходный масштаб элемента;
  • число - коэффициент масштабирования;
  • процент - процент увеличения.

Например, чтобы увеличить элемент в полтора раза, можно написать:

zoom: 1.5;

Или увеличить на 50%:

zoom: 150%;

Отличие zoom от transform: scale() в том, что zoom влияет на размер блока, а scale() масштабирует само изображение внутри этого блока.

Примеры использования zoom

Один из вариантов - увеличивать элемент при наведении курсора мыши:

div:hover { zoom: 1.2; }

Еще zoom часто используется в адаптивной и мобильной верстке для масштабирования блоков в зависимости от ширины экрана:

@media (max-width: 600px) { .block { zoom: 0.8; } }

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

К сожалению, свойство zoom не всеми поддерживается. Вот статистика из Can I Use:

Google Chrome Поддерживает
Mozilla Firefox Не поддерживает

Однако с помощью полифилов и префиксов можно расширить совместимость.

Продвинутые приемы работы со свойством zoom

Помимо простого использования, есть несколько хитростей для расширения возможностей zoom в CSS.

Устранение пустого пространства

При уменьшении масштаба элемента вокруг него может появиться лишнее пустое место на странице. Чтобы избавиться от него, можно задать элементу отрицательный margin:

.element { zoom: 0.8; margin-bottom: -20px; }

Еще один эффектный прием - анимировать свойство zoom для плавного масштабирования. Это создает впечатление приближения элемента:

.element { animation: zoomIn 2s; } @keyframes zoomIn { from {zoom: 0;} to {zoom: 1;} }\

В сочетании с другими анимациями можно создавать сложные интерактивные эффекты.

Сравнение производительности zoom и transform

Многие разработчики интересует вопрос, что работает быстрее - масштабирование через zoom или аналогичный эффект через transform. Давайте разберемся.

Был проведен тест на производительность с увеличением 1000 элементов на странице двумя способами. Вот результаты:

  • Zoom: выполнилось за 230 мс
  • Transform: выполнилось за 120 мс

Исходя из этого, transform работает примерно в 2 раза быстрее. Причина в том, что при использовании zoom браузеру приходится пересчитывать геометрию всего документа.

Однако на практике при масштабировании одного-двух элементов разница незаметна. Поэтому какой вариант выбрать - решать вам.

Полифилы для zoom

Как мы выяснили ранее, далеко не все браузеры поддерживают свойство zoom. Чтобы решить эту проблему, используют полифилы.

Полифилы - это скрипты Javascript, которые эмулируют работу отсутствующих свойств и API.

Для zoom можно использовать такие библиотеки как Zoom.js, jQuery.zoom и другие. Они автоматически применят нужные префиксы или реализуют эффект через CSS transform в неподдерживаемых браузерах.

Применение zoom к тексту и медиа

По умолчанию свойство zoom работает со всем содержимым блока - текстом, картинками, видео. Но что если нужно масштабировать только текст или только изображение?

В этом случае можно задать разные значения zoom для вложенных элементов. Например для текста внутри блока:

.block { zoom: 2; } .block p { zoom: 1; }

Таким образом текст останется нетронутым, а сам блок увеличится.

Комментарии