
CSS позволяет изменить ориентацию изображения без редактирования самого файла. Для этого применяются свойства transform и scale(), которые управляют направлением осей X и Y. Например, значение scaleX(-1) переворачивает изображение по горизонтали, а scaleY(-1) – по вертикали.
Такое решение особенно удобно, если требуется быстро адаптировать элементы интерфейса: зеркалить иконки, аватары или декоративные изображения при смене направления текста или языка. Метод не изменяет исходный файл, поэтому эффект можно легко отменить или применить к конкретным классам через селекторы.
Чтобы избежать искажений, стоит учитывать исходные размеры блока и способ отображения контента. При работе с background-image эффект достигается через transform у родительского контейнера, а при использовании img – у самого элемента. Такой подход сохраняет гибкость верстки и не влияет на производительность страницы.
Использование свойства transform для отражения по горизонтали
Для зеркального отражения элемента по горизонтали применяется свойство transform с функцией scaleX(). Отрицательное значение изменяет направление оси X, создавая эффект отражения.
Пример CSS-кода:
.mirror-horizontal {
transform: scaleX(-1);
}
Такой подход работает для любых элементов, включая фоновые изображения, текстовые блоки и SVG-графику. При этом сохраняются все остальные трансформации, если они указаны в том же правиле через пробел, например: transform: scaleX(-1) rotate(10deg);.
Чтобы центр отражения совпадал с серединой элемента, рекомендуется явно задать transform-origin: center;. Без этого по умолчанию точка отражения находится в центре, но при комбинированных трансформациях явное указание предотвращает смещение.
Если нужно отразить элемент только визуально, без влияния на позиционирование, лучше не использовать отрицательные значения ширины или переворот через флекс-свойства – это может нарушить поток документа. transform: scaleX(-1); безопаснее и кроссбраузерно стабилен.
Отражение изображения по вертикали с помощью scaleY

Свойство transform позволяет перевернуть элемент по вертикали с помощью функции scaleY(). Значение -1 инвертирует ось Y, создавая зеркальное отражение изображения.
Пример кода:
figure {
transform: scaleY(-1);
}
Чтобы сохранить правильное положение, можно добавить свойство transform-origin, задав точку отражения. Например, при установке transform-origin: center; переворот произойдет относительно центра, а при top – относительно верхней границы.
Если требуется отразить только изображение внутри контейнера, а не весь блок, применяйте transform к элементу, содержащему изображение, оставляя остальную разметку без изменений.
Для плавного эффекта можно использовать переход:
figure {
transition: transform 0.4s;
}
figure:hover {
transform: scaleY(-1);
}
Такой подход создаёт четкое вертикальное отражение без искажений и дополнительных графических инструментов.
Комбинирование отражения по обеим осям

Чтобы перевернуть элемент одновременно по горизонтали и вертикали, применяется комбинированное значение свойства transform с функцией scale(). Отрицательные значения масштабирования позволяют добиться полного зеркального отражения.
div {
transform: scale(-1, -1);
}
При этом:
-1по оси X отражает изображение горизонтально;-1по оси Y переворачивает его вертикально;- вместе они создают эффект зеркала, повернутого на 180°.
Чтобы отразить элемент без искажения позиционирования, полезно добавить трансформацию центра:
div {
transform: scale(-1, -1);
transform-origin: center;
}
Если нужно сохранить читаемость текста при отражении, лучше использовать псевдоэлемент и применить трансформацию только к изображению:
.block::before {
content: "";
background: url(photo.jpg) no-repeat center/cover;
display: block;
width: 100%;
height: 100%;
transform: scale(-1, -1);
}
- Для анимации отражения можно добавить плавный переход через
transition. - В сочетании с
rotate()иskew()создаются сложные визуальные эффекты. - Значение
transform-originпозволяет контролировать точку инверсии, что важно при компоновке макета.
Применение отражения только к фону через background-image
Для отражения фона без дублирования содержимого элемента используется псевдоэлемент. Основной блок получает фоновое изображение, а псевдоэлемент создаёт перевёрнутую копию этого изображения с прозрачным градиентом для имитации плавного отражения.
Пример кода:
.block {
position: relative;
width: 400px;
height: 200px;
background-image: url('image.jpg');
background-size: cover;
background-position: center;
overflow: hidden;
}
.block::after {
content: "";
position: absolute;
bottom: -100%;
left: 0;
width: 100%;
height: 100%;
background-image: url('image.jpg');
background-size: cover;
background-position: center;
transform: scaleY(-1);
opacity: 0.5;
mask-image: linear-gradient(to bottom, rgba(0,0,0,0.8), transparent);
-webkit-mask-image: linear-gradient(to bottom, rgba(0,0,0,0.8), transparent);
}
Параметр transform: scaleY(-1) переворачивает фон вертикально. Свойства mask-image или -webkit-mask-image создают эффект затухания отражения. Такой подход позволяет применять отражение исключительно к фоновому изображению, не затрагивая текст и другие элементы внутри блока.
Отражение изображения при наведении курсора

Пример простого отражения изображения с использованием CSS:
| Код | Описание |
|---|---|
img {
transition: transform 0.3s ease, filter 0.3s ease;
}
img:hover {
transform: scaleY(-1);
filter: brightness(0.8);
}
|
При наведении курсора изображение инвертируется по вертикали с помощью scaleY(-1), а также немного затемняется с помощью filter: brightness(0.8). |
Для создания эффекта с отражением по аналогии с зеркалом, можно добавить псевдоэлемент с использованием ::after и задать его зеркальное отображение относительно оригинала.
| Код | Описание |
|---|---|
img {
position: relative;
}
img::after {
content: "";
position: absolute;
bottom: -10px;
left: 0;
width: 100%;
height: 50%;
background: url('image.jpg') no-repeat center;
background-size: cover;
transform: scaleY(-1);
opacity: 0.5;
transition: opacity 0.3s ease;
}
img:hover::after {
opacity: 0.8;
}
|
Псевдоэлемент ::after добавляет отражение под изображением, инвертируя его по вертикали. При наведении курсора изменяется прозрачность отражения. |
Можно добавить анимацию для плавного появления отражения. Для этого применяется свойство transition на прозрачность и трансформацию:
| Код | Описание |
|---|---|
img {
position: relative;
}
img::after {
content: "";
position: absolute;
bottom: -10px;
left: 0;
width: 100%;
height: 50%;
background: url('image.jpg') no-repeat center;
background-size: cover;
transform: scaleY(-1);
opacity: 0;
transition: opacity 0.5s ease;
}
img:hover::after {
opacity: 0.6;
}
|
Эффект плавного появления отражения при наведении курсора на изображение. |
Для улучшения визуализации можно комбинировать несколько свойств, таких как filter: blur() или box-shadow, для создания реалистичных эффектов отражения. Экспериментируя с ними, можно добиться уникальных визуальных решений для отображения изображений.
Создание зеркального эффекта с помощью псевдоэлементов

Псевдоэлементы ::before и ::after позволяют создавать визуальные эффекты без добавления дополнительных HTML-элементов. Чтобы создать зеркальное отражение изображения, можно использовать псевдоэлемент ::after, который будет располагаться под оригинальным изображением и визуально дублировать его.
Для реализации зеркального эффекта нужно следовать нескольким шагам. Сначала добавьте изображение в контейнер, затем с помощью ::after создайте его дубликат. Чтобы зеркалировать изображение, необходимо отзеркалить его по вертикали с помощью свойства transform: scaleY(-1). Для этого можно использовать transform на псевдоэлементе.
Пример реализации:
.container {
position: relative;
}
.container::after {
content: '';
position: absolute;
top: 100%;
left: 0;
width: 100%;
height: 100%;
background-image: url('image.jpg');
background-size: cover;
transform: scaleY(-1);
opacity: 0.5;
}
В этом примере псевдоэлемент ::after отображает изображение под основным элементом, инвертируя его по вертикали. Важно установить прозрачность (opacity), чтобы создать эффект полупрозрачности, что сделает отражение более натуральным.
Контейнеру нужно задать position: relative, чтобы псевдоэлемент располагался относительно него. В свою очередь, псевдоэлементу важно указать position: absolute, чтобы он точно занимал нужное место под изображением.
Для лучшего эффекта можно добавить плавную анимацию, изменяя opacity или другие параметры. Псевдоэлементы позволяют гибко настроить визуальные эффекты, не добавляя лишних элементов в разметку.
Использование фильтра CSS filter: flip для изображений в SVG
Для поворота и отражения изображений в формате SVG с помощью CSS можно использовать фильтр filter с параметром flip. Этот метод позволяет инвертировать изображения без изменения исходной разметки SVG.
Использование filter: flip эффективно при работе с растровыми изображениями в SVG, поскольку фильтр применяет трансформации к элементу, не вмешиваясь в его исходную структуру.
Чтобы отразить изображение по горизонтали или вертикали, необходимо добавить фильтр в стили элемента SVG. Пример:
При применении фильтра к элементу SVG с помощью CSS, происходит инверсия его визуального представления.
Преимущества использования фильтра:
- Не требует изменений в исходном SVG-файле.
- Позволяет динамически изменять изображение с минимальными усилиями.
- Может быть использован совместно с другими фильтрами для создания сложных эффектов.
Основные применения фильтра:
- Отражение и зеркалирование элементов, например, логотипов или иконок.
- Создание динамичных визуальных эффектов на страницах, где требуется быстрое изменение ориентации объектов.
- Изменение направления изображения в ответ на взаимодействие с пользователем (например, при наведении мыши).
Важно учитывать, что filter: flip не поддерживается всеми браузерами. Поэтому перед использованием фильтра стоит проверить совместимость с целевыми браузерами.
Корректировка позиционирования и выравнивания после отражения

После применения CSS-свойства для отражения элемента, его положение и выравнивание могут измениться. Это особенно актуально для изображений, где важно точно управлять тем, как они отображаются на странице. В некоторых случаях после отражения требуется корректировка с помощью свойств позиционирования или выравнивания, чтобы изображение выглядело естественно.
Если используется свойство transform: scaleX(-1) для отражения изображения по горизонтали, оно, скорее всего, изменит его исходное положение. Чтобы вернуть изображение на нужное место, можно использовать свойство transform-origin, которое позволяет точно задать точку начала трансформации. Например, если изображение должно отразиться относительно его центра, можно указать значение transform-origin: center.
При необходимости выравнивания изображения можно использовать стандартные методы CSS. Для вертикального выравнивания изображения относительно его контейнера стоит использовать vertical-align, особенно если изображение размещено рядом с текстом. Для горизонтального выравнивания можно применить margin: 0 auto или использовать text-align: center для родительского элемента, если изображение является inline-элементом.
Если изображение занимает фиксированное пространство на странице и важно сохранить его точное расположение, можно использовать абсолютное или фиксированное позиционирование. Для этого достаточно задать элементу position: absolute или position: fixed, а затем настроить параметры top, left, right, bottom для точной корректировки.
Иногда для исправления небольших смещений после отражения достаточно просто применить transform: translateX() или transform: translateY(). Эти свойства позволяют точно перемещать элемент по оси X или Y, не меняя других параметров его позиционирования. Важно помнить, что значения для translateX() и translateY() можно задавать как в пикселях, так и в процентах, в зависимости от желаемого эффекта.
При работе с отраженными изображениями стоит учитывать, что любые изменения в их выравнивании или позиционировании могут повлиять на расположение других элементов на странице. Чтобы избежать нежелательных изменений, рекомендуется использовать контейнеры с фиксированными размерами или применять flexbox и grid-системы для более гибкого и стабильного позиционирования.
