Для отражения изображения или другого элемента, в том числе текста, применяется свойство transform и функция scale(). Хотя исходно эта функция предназначена для изменения масштаба элемента, отрицательное значение -1 позволяет сделать отражение.
Варианты такие:
- transform: scale(-1, 1) — отражение по горизонтали;
- transform: scale(1, -1) — отражение по вертикали;
- transform: scale(-1, -1) (или просто scale(-1)) — одновременное отражение по горизонтали и вертикали.
Вместо scale() можно использовать отдельные функции scaleX() и scaleY(), они отвечают за масштабирование по соответствующим координатам:
- transform: scaleX(-1) — отражение по горизонтали;
- transform: scaleY(-1) — отражение по вертикали;
- transform: scaleX(-1) scaleY(-1) — одновременное отражение по горизонтали и вертикали.
В примере 1 показана вёрстка для арабского текста, который читается справа налево. Некоторые картинки также должны быть отражены по горизонтали, чтобы соответствовать направлению чтения. Для этого к селектору img добавляется свойство transform с функцией scaleX(-1). При этом переворачивать нужно не все изображения. К примеру, симметричные картинки (сердце) или традиционные (лупа), лучше оставить как есть. К таким изображениям добавлен класс ltr, а в стилях применяется псевдокласс :not().
Пример 1. Отражение картинок
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Отражение</title>
<style>
header {
display: flex; /* Располагаем по горизонтали */
background-color: #0ab596; /* Цвет фона */
color: #fff; /* Цвет текста */
padding: 1rem; /* Расстояние от текста до края */
margin-bottom: 1rem; /* Расстояние снизу */
}
.logo {
font-size: 1.5rem; /* Размер логотипа */
margin-inline-end: 2rem; /* Расстояние справа (слева для RTL) */
}
ul.menu {
display: flex; /* Располагаем по горизонтали */
flex-wrap: wrap; /* Пункты меню могут переноситься */
margin: 0; padding: 0; /* Убираем отступы и поля */
list-style: none; /* Убираем маркеры */
align-content: center; /* Выравниваем по центру поперечной оси */
}
ul.menu img {
margin-inline-end: 0.5rem; /* Расстояние справа (слева для RTL) */
vertical-align: middle; /* Выравниваем картинки */
}
ul.menu a {
color: #ffcd33; /* Цвет ссылок */
text-decoration: none; /* Убираем подчёркивание */
}
ul.menu > li {
margin-inline-end: 2rem; /* Расстояние справа (слева для RTL) */
}
[dir="rtl"] img:not([class="ltr"]) {
transform: scaleX(-1); /* Переворачиваем картинки */
}
</style>
</head>
<body>
<header>
<div class="logo">Coffee Shop</div>
<ul class="menu">
<li>
<img src="image/button-cart-white.svg" width="24">
<a href="#">Корзина</a>
</li>
<li>
<img src="image/button-heart-white.svg" width="24">
<a href="#">Избранное</a>
</li>
<li>
<img src="image/search.svg" width="24">
<a href="#">Поиск</a>
</li>
</ul>
</header>
<header dir="rtl">
<div class="logo">مقهى</div>
<ul class="menu">
<li>
<img src="image/button-cart-white.svg" width="24">
<a href="#">سلة</a>
</li>
<li>
<img src="image/button-heart-white.svg" width="24" class="ltr">
<a href="#">مميز</a>
</li>
<li>
<img src="image/search.svg" width="24" class="ltr">
<a href="#">يبحث</a>
</li>
</ul>
</header>
</body>
</html>
Результат данного примера показан на рис. 1.

Рис. 1. Картинки для арабского текста