Menu

Поворот в CSS: rotate(), свойство rotate и вращение

Поверните элемент через transform: rotate(45deg) или новое свойство rotate. Разберем единицы углов (deg, turn, rad), поворот вокруг угла через transform-origin, поворот текста и иконок, вращающийся индикатор загрузки и 3D-поворот через rotateX и rotateY.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Как повернуть элемент

Два способа, один результат: функция rotate() внутри transform или отдельное свойство rotate. Положительные углы поворачивают по часовой стрелке:

Синий и зеленый блоки повернуты одинаково, на 45 градусов по часовой стрелке вокруг своих центров. У янтарного блока отрицательный угол, поэтому он наклонен против часовой стрелки. Поворот никогда не сдвигает раскладку: каждый блок по-прежнему занимает исходное место 90 на 60, поэтому повернутые элементы могут перекрывать соседей.

Единицы углов

ЕдиницаПолный круг90 градусов
deg360deg90deg
turn1turn0.25turn
rad6.2832rad1.5708rad
grad400grad100grad

Обычный выбор это deg; для вращения хорошо читается turn (rotate: 1turn). Углы больше 360 допустимы и важны в анимациях: rotate(720deg) в ключевом кадре дает два оборота. Всегда пишите единицу: rotate(45) невалидно и игнорируется.

Двигайте ползунок, чтобы увидеть угол в каждой единице:

Поворот вокруг угла: transform-origin

По умолчанию элемент поворачивается вокруг своего центра. transform-origin переносит точку вращения. Стрелка часов вращается вокруг своего конца, а не середины:

Нижний конец стрелки стоит на янтарной оси в центре циферблата, а rotate: 120deg поворачивает ее на четыре часа. Удалите строку с transform-origin, и стрелка будет вращаться вокруг собственной середины, мимо оси.

Поворот текста и вертикальные подписи

Небольшой наклон через rotate подходит для бейджа или наклейки. Для по-настоящему вертикальной подписи лучше writing-mode, потому что он меняет раскладку: элемент становится высоким и узким, а не перекрывает то, что рядом.

Ниже показан размер каждой подписи в раскладке. Повернутая по-прежнему занимает исходный широкий низкий блок: она оставляет рядом пустой промежуток и торчит над своей строкой и под ней, залезая на то, что там есть. Подпись с writing-mode занимает высокий узкий блок. rotate: 180deg заставляет ее читаться снизу вверх, и это обычное направление для вертикальной подписи.

Поворот иконки по клику или при наведении

Поворот стрелки на 180 градусов это стандартный способ показать, что раздел открыт. Сочетайте rotate с переходом:

Шеврон это квадрат с двумя рамками, повернутый на 45 градусов, чтобы смотреть вниз. Когда кнопка раскрыта, он поворачивается на 225 градусов и смотрит вверх, а переход анимирует пол-оборота. Стилем управляет атрибут aria-expanded, поэтому видимое состояние и состояние, которое объявляют программы чтения с экрана, никогда не расходятся.

Вращающийся индикатор загрузки

Вращение это поворот от 0 до 360 градусов, повторяемый с функцией linear, чтобы скорость не менялась:

Когда есть только ключевой кадр to, анимация начинается с собственного поворота элемента (нулевого) и заканчивается на 360deg, а infinite повторяет ее без скачка, потому что 360deg выглядит так же, как 0. Для людей, которые попросили систему уменьшить движение, индикатор вращается в три раза медленнее. Подробнее о ключевых кадрах на странице про анимацию.

3D-поворот: rotateX, rotateY

rotateX() наклоняет элемент назад вокруг горизонтальной оси, а rotateY() поворачивает его вокруг вертикальной оси, как дверь. Без перспективы они выглядят просто сплющенными; perspective у родителя добавляет глубину:

.scene { perspective: 600px; }
.card  { transform: rotateY(35deg); }
.flip  { transform: rotateY(180deg); backface-visibility: hidden; } /* card flip */

Чтобы отразить элемент, а не повернуть, используйте scale: -1 1 (горизонтальное отражение). Поворот на 180 градусов переворачивает его вверх ногами, а это не одно и то же.

Частые ошибки

  • <span> или <a> не поворачивается. Простые строчные элементы игнорируют трансформации. Добавьте display: inline-block.
  • Поворот исчезает при наведении. Правило наведения с transform: scale(1.1) заменяет transform: rotate(...). Используйте отдельные свойства rotate и scale или перечислите обе функции.
  • Ожидание, что раскладка освободит место. Повернутое изображение сохраняет неповернутый блок и перекрывает соседей. Дайте контейнеру размер под поворот или используйте writing-mode для текста.
  • Индикаторы загрузки с ease. Функция по умолчанию ускоряет и замедляет каждый оборот. Используйте linear.
  • Поворот не вокруг той точки. Задайте transform-origin, прежде чем подбирать угол.

Часто задаваемые вопросы

Как повернуть элемент в CSS?

Используйте transform: rotate(45deg); или отдельное свойство rotate: 45deg;. Положительные углы поворачивают по часовой стрелке, отрицательные против, вокруг центра элемента, если не изменить transform-origin.

Чем transform: rotate() отличается от свойства rotate?

Результат одинаковый. Свойство rotate не зависит от transform, поэтому правило наведения может менять scale или translate, не убирая поворот, и у каждого может быть свой переход. Вместе они действуют как transform: translate() rotate() scale(), в каком бы порядке вы их ни объявили.

Как повернуть картинку на 90 градусов в CSS?

Задайте элементу img transform: rotate(90deg); (или rotate: 90deg;). Изображение сохраняет исходное место в раскладке, поэтому высокое изображение, повернутое горизонтально, может перекрывать соседей; дайте контейнеру место под повернутый размер.

Как сделать вращение элемента в CSS?

Опишите @keyframes spin { to { rotate: 360deg; } } и примените animation: spin 1s linear infinite;. Используйте linear, чтобы скорость оставалась постоянной, и замедляйте или останавливайте вращение при prefers-reduced-motion: reduce.

Как повернуть текст вертикально в CSS?

Для вертикальной подписи writing-mode: vertical-rl обычно лучше, чем rotate(90deg), потому что он меняет и раскладку: элемент занимает вертикальное пространство, а не перекрывает соседей. rotate используйте для небольших декоративных наклонов.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ