
Стрелки в CSS можно реализовать без использования изображений или Canvas, полагаясь исключительно на свойства границ и трансформации. Например, для треугольной стрелки достаточно элемента с нулевой шириной и высотой, к которому применяются границы с прозрачными сторонами, оставляя видимой только одну сторону.
Для горизонтальной стрелки вправо задайте border-top и border-bottom одинаковой толщины и прозрачного цвета, а border-left – цвет стрелки. Высота стрелки будет соответствовать сумме толщин верхней и нижней границ, а ширина – толщине левой границы.
Вертикальные и диагональные стрелки создаются аналогично, меняя активную границу и применяя rotate() через transform для поворота. Такой подход позволяет легко менять размер, цвет и направление стрелки, сохраняя компактность HTML и полную управляемость через CSS.
Для динамических интерфейсов рекомендуется использовать стрелки как псевдоэлементы ::before или ::after. Это минимизирует количество DOM-элементов и упрощает адаптацию под различные состояния кнопок, меню и навигационных блоков.
Стрелка через границы элемента

Создание стрелки через границы элемента в CSS обычно реализуется с помощью треугольника через свойства border. Такой метод позволяет формировать стрелку без дополнительных элементов или изображений.
Простейший пример стрелки направленной вправо:
.arrow-right {
width: 0;
height: 0;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-left: 20px solid #333;
}
Объяснение работы:
widthиheightустанавливаются в0, чтобы видимой была только граница.border-topиborder-bottomделают треугольник прозрачным сверху и снизу.border-leftзадает цвет и форму самой стрелки.
Чтобы создать стрелку в другую сторону, меняют направление границы:
- Влево:
border-right: 20px solid #333; - Вверх:
border-bottom: 20px solid #333; - Вниз:
border-top: 20px solid #333;
Для масштабирования стрелки изменяют значения толщины границ. Например, стрелка шириной 30px и высотой 15px:
.arrow-large {
width: 0;
height: 0;
border-top: 15px solid transparent;
border-bottom: 15px solid transparent;
border-left: 30px solid #007bff;
}
Для размещения стрелки на элементе используют абсолютное позиционирование:
.button {
position: relative;
padding: 10px 20px;
background: #eee;
}
.button .arrow-right {
position: absolute;
top: 50%;
right: -20px;
transform: translateY(-50%);
}
Советы:
- Использовать
transparentдля боковых границ, чтобы сохранялась форма треугольника. - Подбирать толщину границ под размер элемента, чтобы стрелка выглядела пропорционально.
- Для нескольких направлений можно создавать универсальный класс и менять только цвет и направление границ.
Использование псевдоэлементов ::before и ::after для стрелки

Псевдоэлементы ::before и ::after позволяют создавать стрелки без добавления дополнительных элементов в HTML. Они генерируют содержимое, которое можно стилизовать с помощью CSS, создавая визуальные указатели, треугольники или стрелки.
Для создания стрелки обычно используют технику треугольника с помощью границ:
- Задайте элементу position: relative; для корректного позиционирования псевдоэлементов.
- Псевдоэлементу присвойте content: » для отображения.
- Используйте display: block; и position: absolute; для точного размещения стрелки.
- Создайте треугольник через border: например, border-width: 10px; border-style: solid; и прозрачные границы кроме нужной стороны.
Пример стрелки вправо:
.element::after {
content: '';
display: block;
position: absolute;
top: 50%;
right: -10px;
width: 0;
height: 0;
border-top: 5px solid transparent;
border-bottom: 5px solid transparent;
border-left: 10px solid #000;
transform: translateY(-50%);
}
Рекомендации по использованию:
- Для горизонтальных стрелок меняйте border-left и border-right.
- Для вертикальных – используйте border-top и border-bottom.
- Цвет стрелки задается через границу, прозрачные границы формируют форму треугольника.
- Размер стрелки регулируется шириной и высотой border.
- При сложных комбинациях используйте оба псевдоэлемента: ::before для одной части стрелки, ::after для другой.
Псевдоэлементы удобны для динамических интерфейсов: стрелки можно менять через hover, active или добавлять анимацию с transform и transition.
Важно: стрелки через ::before и ::after не создают дополнительные DOM-элементы, что повышает производительность и упрощает поддержку кода.
Создание стрелки с помощью CSS-треугольника

Для формирования стрелки в CSS применяют технику треугольника, используя свойство border. Основная идея – задать элементу нулевую ширину и высоту и управлять видимыми границами. Например, чтобы создать правую стрелку, используют:
width: 0; height: 0; border-top: 10px solid transparent; border-bottom: 10px solid transparent; border-left: 20px solid #000;
Здесь прозрачные верхняя и нижняя границы формируют наклон треугольника, а левая граница окрашена для видимой стрелки. Размеры границ определяют высоту и длину стрелки.
Для изменения направления достаточно переназначить окрашенную границу: верхняя – стрелка вниз, правая – стрелка влево, нижняя – стрелка вверх. Пропорции границ позволяют создавать острые или широкие кончики.
Цвет стрелки управляется цветом окрашенной границы. Техника не требует дополнительных элементов, поддерживается всеми современными браузерами и легко интегрируется в кнопки или указатели.
Для динамического изменения размеров стрелки используют относительные единицы em или rem. При необходимости анимации достаточно изменять значения границ с помощью transition.
Поворот стрелки с помощью transform: rotate()

Чтобы повернуть стрелку, созданную через CSS, используется свойство transform: rotate(). Значение задаётся в градусах: 0deg – исходное положение, 90deg – поворот на 90° по часовой стрелке.
Пример для стрелки, созданной с помощью границ: при стрелке вправо border-left: 10px solid black; border-top: 5px solid transparent; border-bottom: 5px solid transparent;, поворот на 90° изменит направление на вниз: transform: rotate(90deg);.
Важно учитывать точку вращения: по умолчанию это центр элемента. Для поворота относительно конца стрелки применяется transform-origin. Например, transform-origin: left center; смещает ось вращения к основанию стрелки.
Для плавной анимации поворота добавляют transition: transform 0.3s ease;. Комбинация с :hover позволяет визуально изменять направление стрелки при наведении без изменения структуры HTML.
Для произвольного угла поворота задают отрицательные значения: transform: rotate(-45deg); повернёт стрелку против часовой стрелки. Для динамического управления углом используют CSS-переменные: --angle: 30deg; transform: rotate(var(--angle));.
При работе с несколькими стрелками внутри одного контейнера рекомендуется использовать отдельные div с независимым transform, чтобы избежать наложений и некорректного позиционирования.
Изменение цвета стрелки без дополнительных элементов

Для изменения цвета стрелки, созданной через CSS, можно использовать свойство border-color или color в зависимости от способа формирования стрелки. Если стрелка выполнена через треугольник с помощью border, достаточно заменить соответствующую сторону:
| Сторона | Свойство CSS | Пример |
|---|---|---|
| Вправо | border-left-color | border-left: 20px solid red; |
| Влево | border-right-color | border-right: 20px solid #3498db; |
| Вниз | border-top-color | border-top: 15px solid green; |
| Вверх | border-bottom-color | border-bottom: 15px solid orange; |
Если стрелка создается через символ Unicode или псевдоэлемент ::after, цвет изменяется свойством color:
Пример для псевдоэлемента:
a::after { content: "→"; color: purple; font-size: 18px; }
Для динамического изменения цвета стрелки при наведении или активном состоянии используйте :hover или :active:
Пример:
.arrow:hover { border-left-color: #e74c3c; }
Важно учитывать, что изменение background-color не повлияет на стрелку, созданную через border, так как видимая часть формируется именно цветом границы.
Для сложных комбинаций цветов можно использовать градиенты через border-image, что позволяет получить плавные переходы без дополнительных элементов:
Пример:
.arrow { border-left: 20px solid; border-image: linear-gradient(to bottom, red, yellow) 1; }
Регулировка размера стрелки через border-width

Размер CSS-стрелки определяется толщиной границ элемента. Чем больше значение border-width, тем массивнее и длиннее будут стороны треугольника, формирующего стрелку.
Например, при создании стрелки вправо можно использовать следующий подход:
Пример:
.arrow {
width: 0;
height: 0;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-left: 15px solid #000;
}
Параметры border-top и border-bottom определяют высоту стрелки, а border-left – её длину и толщину. Увеличивая значения верхней и нижней границ, можно сделать стрелку выше, а изменяя ширину левой границы – длиннее и «острее».
Для пропорционального масштабирования стоит изменять все три значения одновременно. Например, если увеличить каждое значение border-width в два раза, стрелка сохранит форму, но станет крупнее без искажений.
Точный подбор размеров позволяет визуально сбалансировать стрелку в интерфейсе без использования изображений или псевдоэлементов.
Добавление стрелки к ссылке или кнопке
Чтобы добавить стрелку к ссылке или кнопке без изображений, используйте псевдоэлемент ::after. Он создаётся внутри элемента и может содержать стрелку, заданную через символ Unicode или CSS-границы.
Пример с Unicode:
a::after {
content: " →";
transition: transform 0.3s;
}
a:hover::after {
transform: translateX(4px);
}
Такой приём делает стрелку частью текста и упрощает адаптацию под любые размеры шрифта. Для стрелки, выполненной с помощью границ, можно использовать следующий вариант:
button::after {
content: "";
display: inline-block;
width: 6px;
height: 6px;
border-top: 2px solid currentColor;
border-right: 2px solid currentColor;
transform: rotate(45deg);
margin-left: 6px;
transition: transform 0.3s;
}
button:hover::after {
transform: rotate(45deg) translateX(3px);
}
Свойство currentColor обеспечивает соответствие цвета стрелки цвету текста, а transition добавляет плавность при наведении. Такой способ не требует изображений и корректно масштабируется в адаптивных интерфейсах.
Анимация стрелки при наведении курсора

Для создания динамики стрелку можно анимировать с помощью свойства transition и изменения её положения или формы при наведении курсора. Такой приём делает интерфейс более отзывчивым и визуально направляет пользователя.
Пример кода:
.arrow {
display: inline-block;
width: 10px;
height: 10px;
border-top: 2px solid #000;
border-right: 2px solid #000;
transform: rotate(45deg);
transition: transform 0.3s ease, margin-left 0.3s ease;
}
.button:hover .arrow {
transform: rotate(45deg) translateX(4px);
margin-left: 4px;
}
В примере используется поворот и смещение, создающие эффект движения стрелки вправо. Для плавности изменений важно задать одинаковые параметры перехода для всех изменяемых свойств.
Чтобы подчеркнуть направление, можно добавить изменение цвета:
.button:hover .arrow {
border-color: #007bff;
}
Комбинируя transform и transition, легко добиться выразительной реакции без использования JavaScript.
