repeating-linear-gradient VS linear-gradient
Давайте разберёмся, в чём разница между repeating-linear-gradient
и linear-gradient
на примере решения одной и той же задачи.
Будем делать полосатую заливку для прогрессбаров. Заливку верхнего прогрессбара реализуем повторяющимися градиентами, нижнего — обычными.
Начнём с простейшего варианта — вертикальных полосок. При создании повторяющегося паттерна функция repeating-linear-gradient
опирается на колорстопы.
Колорстопы можно задавать как в абсолютных единицах, так и в относительных. Сделаем паттерн шириной 20px
. Он будет повторяться, пока не заполнит весь прогрессбар.
Теперь повторим то же самое с помощью linear-gradient
. Вначале зададим те же цвета, с теми же колорстопами.
Чтобы получить повторяющийся паттерн с linear-gradient
, нужно задать размеры фрагмента с помощью background-size
.
Пока отличия небольшие. repeating-linear-gradient
— одно фоновое изображение, внутри которого повторяются паттерны. linear-gradient
— множество повторяющихся фоновых изображений, внутри которых находится единственный паттерн.
Теперь усложним задачу и сделаем наклонные полоски. Повернём их на угол в 135
градусов.
Для решения задачи на repeating-linear-gradient
нужно изменить направление градиента и паттерн автоматически перерисуется. Задача решена.
Попробуем повторить то же самое на linear-gradient
. Меняем направление градиента на 135deg
. И получаем не то, что нужно.
Давайте разбираться, что не так. Уберём повторение фона и рассмотрим наш повторяющийся паттерн. Очевидно, что его структуру надо изменить.
Главная проблема использования linear-gradient
для создания полосатых фонов — ручное создание паттернов. Пересоберём паттерн, возможно это и не так больно.
Вот пересобранный паттерн. В нём больше полосок, они расположены симметрично и наклонены под углом в 45
градусов. В целом, ничего сложного.
Снова разрешаем повторение фона в нижнем прогрессбаре и получаем красивый повторяющийся фон с наклонными полосками. Однако, есть нюанс — толщина полосок не та.
У repeating-linear-gradient
размер колорстопов (а значит и толщина полосок) сразу задаётся по направлению градиента. В решении с linear-gradient
это не так, ведь с помощью background-size
мы задаём размеры квадрата, внутри которого находится паттерн, а не ширину полосок паттерна.
Наверное, можно было бы выводить формулы с учётом теоремы пифагора, но проще поиграться с размером фона у linear-gradient
и получить то, что нам нужно.
Давайте ещё немного поменяем угол, например на 120deg
. У повторяющегося градиента, ожидаемо, всё хорошо. В решении с обычным градиентом тоже всё должно быть отлично, ведь мы пересобрали паттерн, и он состоит из симметричных полосок.
Ой. Не срослось.
Ничего страшного. Нужно просто пересобрать повторяющийся паттерн таким образом, чтобы полоски давали нужный наклон. Немного несложной математики (нет) и новый паттерн готов. Форма паттерна стала не квадратной, а прямоугольной, структура полосок снова изменилась.
Снова включаем повторение фона и красивый паттерн готов и для linear-gradient
.
Посмотрим, как изменять ширину полосатой заливки. В случае с repeating-linear-gradient
можно использовать background-size
и не забыть отключить повторение фона.
В случае с linear-gradient
всё немного сложнее, так как background-size
уже использован для управления размерами паттерна.
Чтобы иметь возможность управять шириной полосатой заливки, понадобится ещё один контейнер или псевдоэлемент.
Мы рассмотрели основные отличия повторяющихся и обычных линейных градиентов. Повторяющиеся градиенты отлично подходят для создания полосатых фонов с любым наклоном и толщиной полосок.
Обычными линейными градиентами подобные задачи решаются сложнее, так как нужно вручную просчитывать паттерны. Можете потренироваться и самостоятельно повторить верхний паттерн.