Функция CSS `repeating-linear-gradient()`
Baseline Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
repeating-linear-gradient() CSS-функция создает изображение, состоящее из повторяющихся линейных градиентов. Она похожа на linear-gradient() и принимает те же аргументы, но бесконечно повторяет цветовые переходы во всех направлениях, чтобы заполнить весь контейнер. Результат функции — объект типа данных <gradient>, представляющий собой особый вид <image>.
Попробуйте
background: repeating-linear-gradient( #e66465, #e66465 20px, #9198e5 20px, #9198e5 25px );
background: repeating-linear-gradient(45deg, #3f87a6, #ebf8e1 15%, #f69d3c 20%);
background: repeating-linear-gradient(transparent, #4d9f0c 40px), repeating-linear-gradient(0.25turn, transparent, #3f87a6 20px);
<section class="display-block" id="default-example"> <div id="example-element"></div> </section>
#example-element {
min-height: 100%;
}
Длина повторяющегося градиента — это расстояние между первым и последним цветовыми переходами. Если для первого цвета не указана длина цветового перехода, она по умолчанию равна 0. При каждом повторении позиции цветовых переходов смещаются на величину, кратную длине базового линейного градиента. Поэтому позиция каждого завершающего цветового перехода совпадает с начальным цветовым переходом; если значения цветов различаются, это приводит к резкому визуальному переходу. Этого можно избежать, указав первый цвет еще раз в качестве последнего.
Как и любой градиент, повторяющийся линейный градиент не имеет собственных размеров, то есть у него нет естественного или предпочтительного размера и предпочтительного соотношения сторон. Его фактический размер соответствует размеру элемента, к которому он применяется.
Поскольку <gradient>s относятся к типу данных <image>, их можно использовать только там, где допустимы <image>s. Поэтому repeating-linear-gradient() не будет работать со свойством background-color и другими свойствами, использующими тип данных color.
Синтаксис
/* A repeating gradient tilted 45 degrees, starting blue and finishing red, repeating 3 times */ repeating-linear-gradient(45deg, blue, red 33.3%) /* A repeating gradient going from the bottom right to the top left, starting blue and finishing red, repeating every 20px */ repeating-linear-gradient(to left top, blue, red 20px) /* A gradient going from the bottom to top, starting blue, turning green after 40%, and finishing red. This gradient doesn't repeat because the last color stop defaults to 100% */ repeating-linear-gradient(0deg, blue, green 40%, red) /* A gradient repeating five times, going from the left to right, starting red, turning green, and back to red */ repeating-linear-gradient(to right, red 0%, green 10%, red 20%) /* Interpolation in rectangular color space */ repeating-linear-gradient(in oklab, blue, red 50px) /* Interpolation in polar color space */ repeating-linear-gradient(in hsl, blue, red 50px) /* Interpolation in polar color space with longer hue interpolation method */ repeating-linear-gradient(in hsl longer hue, blue, red 50px)
Значения
-
<side-or-corner> -
Положение начальной точки линии градиента. Если оно указано, значение состоит из слова
toи до двух ключевых слов: одно обозначает горизонтальную сторону (leftилиright), а другое — вертикальную (topилиbottom). Порядок ключевых слов, обозначающих стороны, не имеет значения. Если значение не указано, по умолчанию используетсяto bottom.Значения
to top,to bottom,to leftиto rightэквивалентны углам0deg,180deg,270degи90degсоответственно. Остальные значения преобразуются в угол. -
<angle> - Угол направления линии градиента. Значение
0degэквивалентно значениюto top; при увеличении значения угол поворачивается по часовой стрелке. -
<linear-color-stop> - Значение
colorдля цветового перехода, за которым следуют одна или две необязательные позиции перехода (каждая из них может быть<percentage>или<length>вдоль оси градиента). Процентное значение0%или длина0обозначает начало градиента; значение100%соответствует 100% размера изображения, то есть градиент не будет повторяться. -
<color-hint> - Цветовая подсказка — это подсказка для интерполяции, которая определяет ход градиента между соседними цветовыми переходами. Длина указывает точку между двумя цветовыми переходами, в которой цвет градиента должен достичь середины цветового перехода. Если значение не указано, середина цветового перехода находится посередине между двумя цветовыми переходами.
Примечание: Отображение цветовых переходов в повторяющихся линейных градиентах подчиняется тем же правилам, что и цветовые переходы в линейных градиентах.
Формальный синтаксис
<repeating-linear-gradient()> = repeating-linear-gradient( [ <linear-gradient-syntax> ] ) <linear-gradient-syntax> = [ [ <angle> | <zero> | to <side-or-corner> ] || <color-interpolation-method> ]? , <color-stop-list> <side-or-corner> = [ left | right ] || [ top | bottom ] <color-interpolation-method> = in [ <rectangular-color-space> | <polar-color-space> <hue-interpolation-method>? | <custom-color-space> ] <color-stop-list> = <linear-color-stop> , [ <linear-color-hint>? , <linear-color-stop> ]#? <rectangular-color-space> = srgb | srgb-linear | display-p3 | display-p3-linear | a98-rgb | prophoto-rgb | rec2020 | lab | oklab | xyz | xyz-d50 | xyz-d65 <polar-color-space> = hsl | hwb | lch | oklch <hue-interpolation-method> = [ shorter | longer | increasing | decreasing ] hue <custom-color-space> = <dashed-ident> <linear-color-stop> = <color> <color-stop-length>? <linear-color-hint> = <length-percentage> <color> = <color-base> | currentColor | <system-color> | <light-dark()> | <deprecated-system-color> <color-stop-length> = <length-percentage>{1,2} <length-percentage> = <length> | <percentage> <color-base> = <hex-color> | <color-function> | <named-color> | <color-mix()> | transparent <system-color> = AccentColor | AccentColorText | ActiveText | ButtonBorder | ButtonFace | ButtonText | Canvas | CanvasText | Field | FieldText | GrayText | Highlight | HighlightText | LinkText | Mark | MarkText | SelectedItem | SelectedItemText | VisitedText <light-dark()> = light-dark( <color>, <color> ) <deprecated-system-color> = ActiveBorder | ActiveCaption | AppWorkspace | Background | ButtonHighlight | ButtonShadow | CaptionText | InactiveBorder | InactiveCaption | InactiveCaptionText | InfoBackground | InfoText | Menu | MenuText | Scrollbar | ThreeDDarkShadow | ThreeDFace | ThreeDHighlight | ThreeDLightShadow | ThreeDShadow | Window | WindowFrame | WindowText <color-function> = <rgb()> | <rgba()> | <hsl()> | <hsla()> | <hwb()> | <lab()> | <lch()> | <oklab()> | <oklch()> | <color()> <named-color> = aliceblue | antiquewhite | aqua | aquamarine | azure | beige | bisque | black | blanchedalmond | blue | blueviolet | brown | burlywood | cadetblue | chartreuse | chocolate | coral | cornflowerblue | cornsilk | crimson | cyan | darkblue | darkcyan | darkgoldenrod | darkgray | darkgreen | darkgrey | darkkhaki | darkmagenta | darkolivegreen | darkorange | darkorchid | darkred | darksalmon | darkseagreen | darkslateblue | darkslategray | darkslategrey | darkturquoise | darkviolet | deeppink | deepskyblue | dimgray | dimgrey | dodgerblue | firebrick | floralwhite | forestgreen | fuchsia | gainsboro | ghostwhite | gold | goldenrod | gray | green | greenyellow | grey | honeydew | hotpink | indianred | indigo | ivory | khaki | lavender | lavenderblush | lawngreen | lemonchiffon | lightblue | lightcoral | lightcyan | lightgoldenrodyellow | lightgray | lightgreen | lightgrey | lightpink | lightsalmon | lightseagreen | lightskyblue | lightslategray | lightslategrey | lightsteelblue | lightyellow | lime | limegreen | linen | magenta | maroon | mediumaquamarine | mediumblue | mediumorchid | mediumpurple | mediumseagreen | mediumslateblue | mediumspringgreen | mediumturquoise | mediumvioletred | midnightblue | mintcream | mistyrose | moccasin | navajowhite | navy | oldlace | olive | olivedrab | orange | orangered | orchid | palegoldenrod | palegreen | paleturquoise | palevioletred | papayawhip | peachpuff | peru | pink | plum | powderblue | purple | rebeccapurple | red | rosybrown | royalblue | saddlebrown | salmon | sandybrown | seagreen | seashell | sienna | silver | skyblue | slateblue | slategray | slategrey | snow | springgreen | steelblue | tan | teal | thistle | tomato | turquoise | violet | wheat | white | whitesmoke | yellow | yellowgreen <color-mix()> = color-mix( <color-interpolation-method> , [ <color> && <percentage [0,100]>? ]#{2}) <rgb()> = rgb( <percentage>#{3} , <alpha-value>? ) | rgb( <number>#{3} , <alpha-value>? ) | rgb( [ <number> | <percentage> | none ]{3} [ / [ <alpha-value> | none ] ]? ) <rgba()> = rgba( <percentage>#{3} , <alpha-value>? ) | rgba( <number>#{3} , <alpha-value>? ) | rgba( [ <number> | <percentage> | none ]{3} [ / [ <alpha-value> | none ] ]? ) <hsl()> = hsl( <hue>, <percentage>, <percentage>, <alpha-value>? ) | hsl( [ <hue> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? ) <hsla()> = hsla( <hue>, <percentage>, <percentage>, <alpha-value>? ) | hsla( [ <hue> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? ) <hwb()> = hwb( [ <hue> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? ) <lab()> = lab( [<percentage> | <number> | none] [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ / [<alpha-value> | none] ]? ) <lch()> = lch( [<percentage> | <number> | none] [ <percentage> | <number> | none] [ <hue> | none] [ / [<alpha-value> | none] ]? ) <oklab()> = oklab( [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ / [<alpha-value> | none] ]? ) <oklch()> = oklch( [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ <hue> | none] [ / [<alpha-value> | none] ]? ) <color()> = color( [ from <color> ]? <colorspace-params> [ / [ <alpha-value> | none ] ]? ) <alpha-value> = <number> | <percentage> <hue> = <number> | <angle> <colorspace-params> = [<custom-params> | <predefined-rgb-params> | <xyz-params>] <custom-params> = <dashed-ident> [ <number> | <percentage> | none ]+ <predefined-rgb-params> = <predefined-rgb> [ <number> | <percentage> | none ]{3} <xyz-params> = <xyz> [ <number> | <percentage> | none ]{3} <predefined-rgb> = srgb | srgb-linear | display-p3 | display-p3-linear | a98-rgb | prophoto-rgb | rec2020 <xyz> = xyz | xyz-d50 | xyz-d65
Примеры
Полосы зебры
body {
width: 100vw;
height: 100vh;
}
body {
background-image: repeating-linear-gradient(
-45deg,
transparent,
transparent 20px,
black 20px,
black 40px
);
/* with multiple color stop lengths */
background-image: repeating-linear-gradient(
-45deg,
transparent 0 20px,
black 20px 40px
);
}
Десять повторяющихся горизонтальных полос
body {
width: 100vw;
height: 100vh;
}
body {
background-image: repeating-linear-gradient(
to bottom,
rgb(26 198 204),
rgb(26 198 204) 7%,
rgb(100 100 100) 10%
);
}
Поскольку последний цветовой переход находится на отметке 10%, а градиент направлен вертикально, каждый градиент в повторяющемся градиенте занимает 10% высоты, что позволяет разместить 10 горизонтальных полос.
Интерполяция в прямоугольном цветовом пространстве
body {
width: 100vw;
height: 100vh;
}
body {
background: repeating-linear-gradient(90deg in oklab, blue, red 100px);
}
Интерполяция с использованием тона
<div class="shorter">shorter hue</div> <div class="longer">longer hue</div>
div {
height: 50vh;
color: #333300;
font-weight: bolder;
padding-left: 1.5rem;
}
В этом примере интерполяции используется цветовая система hsl и интерполируется тон.
.shorter {
background: repeating-linear-gradient(
90deg in hsl shorter hue,
red,
blue 300px
);
}
.longer {
background: repeating-linear-gradient(
90deg in hsl longer hue,
red,
blue 300px
);
}
В верхнем блоке используется короткая интерполяция: цвет меняется с красного на синий по короткой дуге цветового круга. В нижнем блоке используется длинная интерполяция: цвет меняется с красного на синий по длинной дуге, проходя через зеленые, желтые и оранжевые оттенки.
Примечание: Другие примеры см. в разделе Использование градиентов CSS.
Спецификации
| Спецификация |
|---|
| Модуль CSS Images уровня 3 # repeating-gradients |
Совместимость с браузерами
| Компьютерные | Мобильные | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | WebView для Android | WebView на iOS | |
repeating-linear-gradient |
26
10
|
12 |
16До Firefox 36 градиенты применялись не в предварительно умноженном цветовом пространстве, из-за чего при использовании прозрачности неожиданно появлялись оттенки серого.49
3.6Начиная с Firefox 42 версию градиентов с префиксом можно отключить, задав дляlayout.css.prefixes.gradients значение false.Считает, что <angle> начинается справа, а не сверху. То есть угол 0deg считается направлением вправо. |
12.1
15Считает, что<angle> начинается справа, а не сверху. То есть угол 0deg считается направлением вправо.11–15Считает, что<angle> начинается справа, а не сверху. То есть угол 0deg считается направлением вправо. |
7
5.1Safari 4 поддерживал экспериментальную функцию-webkit-gradient(linear,…). Она более ограничена, чем появившаяся позднее стандартная версия: нельзя одновременно указать позицию и угол, как в repeating-linear-gradient(). Этот устаревший синтаксис по-прежнему поддерживается для обеспечения совместимости.Считает, что <angle> начинается справа, а не сверху. То есть угол 0deg считается направлением вправо. |
26
18
|
16До Firefox для Android 36 градиенты применялись не в предварительно умноженном цветовом пространстве, из-за чего при использовании прозрачности неожиданно появлялись оттенки серого.49
4Начиная с Firefox для Android 42 версию градиентов с префиксом можно отключить, задав дляlayout.css.prefixes.gradients значение false.Считает, что <angle> начинается справа, а не сверху. То есть угол 0deg считается направлением вправо. |
12.1
14Считает, что<angle> начинается справа, а не сверху. То есть угол 0deg считается направлением вправо.11–14Считает, что<angle> начинается справа, а не сверху. То есть угол 0deg считается направлением вправо. |
7
5Safari на iOS 3.2 поддерживал экспериментальную функцию-webkit-gradient(linear,…). Она более ограничена, чем появившаяся позднее стандартная версия: нельзя одновременно указать позицию и угол, как в repeating-linear-gradient(). Этот устаревший синтаксис по-прежнему поддерживается для обеспечения совместимости.Считает, что <angle> начинается справа, а не сверху. То есть угол 0deg считается направлением вправо. |
1.5
1.0
|
4.4
4.4
|
7
5WebView на iOS 3.2 поддерживал экспериментальную функцию-webkit-gradient(linear,…). Она более ограничена, чем появившаяся позднее стандартная версия: нельзя одновременно указать позицию и угол, как в repeating-linear-gradient(). Этот устаревший синтаксис по-прежнему поддерживается для обеспечения совместимости.Считает, что <angle> начинается справа, а не сверху. То есть угол 0deg считается направлением вправо. |
doubleposition |
71 |
79 |
64 |
58 |
12.1 |
71 |
64 |
50 |
12.2 |
10.0 |
71 |
12.2 |
hue_interpolation_method |
111 |
111 |
127 |
97 |
16.2 |
111 |
127 |
75 |
16.2 |
22.0 |
111 |
16.2 |
interpolation_color_space |
111 |
111 |
127 |
97 |
16.2 |
111 |
127 |
75 |
16.2 |
22.0 |
111 |
16.2 |
interpolation_hints |
40 |
79 |
36 |
27 |
7 |
40 |
36 |
27 |
7 |
4.0 |
40 |
7 |
single_color_stop |
135 |
135 |
136 |
120 |
18.4 |
135 |
136 |
89 |
18.4 |
29.0 |
135 |
18.4 |
to |
26 |
12 |
10 |
12.1 |
7 |
26 |
10 |
14 |
7 |
1.5 |
4.4 |
7 |
unitless_0_angle |
26 |
12 |
55
46–55Поддерживалось только в-webkit-repeating-linear-gradient() и -moz-repeating-linear-gradient(), но не в repeating-linear-gradient(). |
16 |
7 |
26 |
55
46–55Поддерживалось только в-webkit-repeating-linear-gradient() и -moz-repeating-linear-gradient(), но не в repeating-linear-gradient(). |
14 |
7 |
1.5 |
4.4 |
7 |
См. также
- Использование градиентов CSS
- Другие функции градиентов:
linear-gradient(),radial-gradient(),repeating-radial-gradient(),conic-gradient(),repeating-conic-gradient() <hue-interpolation-method><color-interpolation-method><image>image()element()image-set()cross-fade()
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/gradient/repeating-linear-gradient