Как сделать градиентную рамку в CSS: 3 рабочих способа
Градиентную рамку в CSS можно собрать через border-image, два фоновых слоя или псевдоэлемент с маской. Первый способ подходит для прямых углов, второй сохраняет скругление, третий оставляет центр прозрачным. В статье есть готовая разметка для блоков и изображений, а также примеры вертикального, горизонтального и диагонального градиента.
Рамка через border-image
Свойство border-image использует градиент как источник изображения для рамки. Способ подходит для блока с прямыми углами и требует ненулевой ширины рамки.
Сначала добавьте элемент в HTML. Один и тот же класс подойдет для следующих примеров.
<div class="box"></div>В CSS задайте прозрачную рамку толщиной 8 пикселей. Затем передайте градиент в border-image и добавьте значение разреза 1.
.box {
width: 250px;
min-height: 150px;
margin: 24px auto;
padding: 24px;
background: #eee;
border: 8px solid transparent;
border-image: linear-gradient(to bottom, #3acfd5, #3a4ed5) 1;
}Градиент идет сверху вниз, а значение 8px задает толщину рамки. Число 1 определяет разрезы изображения для углов и сторон.
Для прозрачного центра удалите строку background: #eee. Тогда содержимое блока и фон родителя останутся видимыми внутри рамки.
Горизонтальный и диагональный переход
Направление задает первое значение функции linear-gradient. Замените только объявление border-image, сохранив значение разреза 1.
/* Слева направо */
.box {
border-image: linear-gradient(to right, #3acfd5, #3a4ed5) 1;
}
/* По диагонали */
.box {
border-image: linear-gradient(135deg, #3acfd5, #3a4ed5) 1;
}Значение to right направляет переход слева направо. Угол 135deg задает диагональный переход, а другие значения меняют его наклон.
Что происходит с border-radius
border-image не повторяет скругление из border-radius. Углы градиентной рамки останутся прямыми, хотя фон блока можно скруглить. Для круглых углов используйте фоновые слои или псевдоэлемент с маской.
Рамка через фоновые слои
Два фоновых слоя позволяют сделать скругленную рамку без псевдоэлементов. Первый слой заполняет внутреннюю область, второй занимает весь блок вместе с рамкой.
Свойство background-clip ограничивает область отрисовки каждого слоя. Прозрачная рамка показывает нижний градиент по краям, а верхний фон скрывает его в центре.
.box {
width: 250px;
min-height: 150px;
margin: 24px auto;
padding: 24px;
border: 8px solid transparent;
border-radius: 20px;
background:
linear-gradient(#eee, #eee) padding-box,
linear-gradient(135deg, #3acfd5, #3a4ed5) border-box;
}Первый слой закрашивает область внутри рамки цветом #eee. Второй слой виден по краям и повторяет радиус блока, поэтому углы остаются скругленными.
Прозрачный центр поверх фона
Свойство background-clip не вырезает отверстие в верхнем слое. Если заменить #eee на transparent, нижний градиент заполнит центр блока.
Для прозрачного центра используйте псевдоэлемент с маской. Такой вариант оставляет фон родителя видимым и одновременно сохраняет скругленную границу.
Градиентная рамка для изображения
Для изображения удобно использовать обертку с отступом. Обертка получает градиентный фон, а картинка закрывает внутреннюю область.
<div class="image-frame">
<img src="photo.jpg" alt="Пейзаж у озера">
</div>.image-frame {
width: 320px;
padding: 8px;
border-radius: 20px;
background: linear-gradient(135deg, #3acfd5, #3a4ed5);
}
.image-frame img {
display: block;
width: 100%;
border-radius: 12px;
}Отступ обертки задает толщину рамки. Радиус изображения сделайте меньше радиуса контейнера, чтобы края совпали.
Рамка через псевдоэлемент и mask
Псевдоэлемент отделяет декоративный контур от содержимого блока. Этот прием подходит для прозрачной карточки, фона с изображением и других неоднородных поверхностей.
Свойство mask-composite объединяет две маски. Операция exclude удаляет внутреннюю область и оставляет только границу.
<div class="masked-box">
Содержимое блока
</div>.masked-box {
position: relative;
min-height: 150px;
padding: 24px;
border-radius: 20px;
background: transparent;
}
.masked-box::before {
content: "";
position: absolute;
inset: 0;
padding: 8px;
border-radius: inherit;
background: linear-gradient(135deg, #3acfd5, #3a4ed5);
mask:
linear-gradient(#000 0 0) content-box,
linear-gradient(#000 0 0);
mask-composite: exclude;
pointer-events: none;
}Псевдоэлемент рисует контур поверх блока, а маска оставляет центр прозрачным. Значение pointer-events: none сохраняет клики по ссылкам и кнопкам внутри карточки.
Маска для изображения
Тот же прием можно применить к обертке изображения. Псевдоэлемент наложит контур поверх картинки и не увеличит размеры контейнера.
<div class="masked-image">
<img src="photo.jpg" alt="Пейзаж у озера">
</div>.masked-image {
position: relative;
width: 320px;
border-radius: 20px;
}
.masked-image img {
display: block;
width: 100%;
border-radius: inherit;
}
.masked-image::before {
content: "";
position: absolute;
inset: 0;
padding: 8px;
border-radius: inherit;
background: linear-gradient(45deg, #3acfd5, #3a4ed5);
mask:
linear-gradient(#000 0 0) content-box,
linear-gradient(#000 0 0);
mask-composite: exclude;
pointer-events: none;
}Измените padding псевдоэлемента, чтобы сделать контур толще или тоньше.
Сравнение способов градиентной рамки
Выбирайте прием по форме углов, фону внутри блока и типу содержимого. border-image дает короткий код, фоновые слои подходят для обычной карточки, а маска сохраняет прозрачный центр со скруглением.
| Параметр | border-image | Фоновые слои | Псевдоэлемент и mask |
|---|---|---|---|
| Поддержка border-radius | Углы рамки прямые | Да | Да |
| Прозрачный центр | Да, без собственного фона блока | Нет в показанном приеме | Да, без собственного фона блока |
| Работа с изображениями | Через обертку | Через обертку | Через обертку |
| Сложность кода | Низкая | Средняя | Выше средней |
Как выбрать направление градиента
Во всех трех подходах направление задает первое значение linear-gradient. Цвета, толщину рамки и радиус можно оставить прежними.
- Вертикаль. Используйте
to bottomдля перехода сверху вниз. - Горизонталь. Используйте
to rightдля перехода слева направо. - Диагональ. Укажите
to bottom rightили задайте угол в градусах. - Точный угол. Используйте значение вроде
135deg.
Значение 0deg направляет переход вверх, 90deg – вправо, 180deg – вниз. Направление через стороны света зависит от пропорций блока, а угол в градусах задает фиксированный наклон.
Какой способ выбрать для блока или изображения
Для прямоугольного блока с прозрачным центром берите border-image. Для карточки со скругленными углами используйте фоновые слои. Маска подходит для прозрачного центра поверх фона или изображения.
Для картинки с рамкой добавьте обертку и задайте ей отступ. Если контур должен лежать поверх изображения, примените псевдоэлемент с маской.
Начните с толщины рамки 8 пикселей и радиуса 20 пикселей. Затем измените цвета, направление и размеры под свой макет.
Совет от нашей редакции: храните толщину рамки и радиус в начале CSS-блока, чтобы менять оформление в одном месте.
Популярное за неделю
- Как создать сайт самому в 2026: 4 способа + пошаговая инструкция 34 мин чтения
- Лучшие конструкторы для создания сайтов — плюсы, минусы и сравнения 22 мин чтения
- overflow hidden что это и почему обрезка не работает 6 мин чтения
- 50 примеров CSS3‑кнопок с эффектами для сайта 5 мин чтения
- 17 эффектных CSS‑анимаций с готовыми примерами 3 мин чтения
- 19 CSS‑спиннеров и прелоадеров для загрузки 5 мин чтения
Комментарии
А вот если поставить border-left и с лева на право градиент выставить так не выйдет..
Очень странно.. Мне вот нужен переходящий градиент с лева на право., только у левой рамки. И точно так-же у правой только наоборот. А вот с верху и с низу градиент вовсе не нужен. Поэтому и интересует как выставить градиент слева на право только у border-left
Воспользуйтесь сервисом
https://www.colorzilla.com/gradient-editor/
И не забывайте, что можно сделать несколько градиентов через запятую.