Как повернуть элемент
Два способа, один результат: функция rotate() внутри transform или отдельное свойство rotate. Положительные углы поворачивают по часовой стрелке:
Синий и зеленый блоки повернуты одинаково, на 45 градусов по часовой стрелке вокруг своих центров. У янтарного блока отрицательный угол, поэтому он наклонен против часовой стрелки. Поворот никогда не сдвигает раскладку: каждый блок по-прежнему занимает исходное место 90 на 60, поэтому повернутые элементы могут перекрывать соседей.
Единицы углов
| Единица | Полный круг | 90 градусов |
|---|---|---|
deg | 360deg | 90deg |
turn | 1turn | 0.25turn |
rad | 6.2832rad | 1.5708rad |
grad | 400grad | 100grad |
Обычный выбор это 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 используйте для небольших декоративных наклонов.