Функция CSS `linear-gradient()`
Базовая поддержка Широко доступна
Эта функция хорошо зарекомендовала себя и работает на множестве устройств и в различных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
linear-gradient() CSS функция создаёт изображение, состоящее из плавного перехода между двумя или более цветами вдоль прямой линии. Её результат — объект типа данных <gradient>, представляющего собой особый вид <image>.
Попробуйте
background: linear-gradient(#e66465, #9198e5);
background: linear-gradient(0.25turn, #3f87a6, #ebf8e1, #f69d3c);
background: linear-gradient( to left, #333333, #333333 50%, #eeeeee 75%, #333333 75% );
background: linear-gradient(217deg, rgb(255 0 0 / 0.8), transparent 70.71%), linear-gradient(127deg, rgb(0 255 0 / 0.8), transparent 70.71%), linear-gradient(336deg, rgb(0 0 255 / 0.8), transparent 70.71%);
<section class="display-block" id="default-example"> <div id="example-element"></div> </section>
#example-element {
min-height: 100%;
}
Синтаксис
/* A gradient with a single color of red */ linear-gradient(red) /* A gradient tilted 45 degrees, starting blue and finishing red */ linear-gradient(45deg, blue, red) /* A gradient going from the bottom right to the top left corner, starting blue and finishing red */ linear-gradient(to left top, blue, red) /* Interpolation in rectangular color space */ linear-gradient(in oklab, blue, red) /* Interpolation in polar color space */ linear-gradient(in hsl, blue, red) /* Interpolation in polar color space with longer hue interpolation method */ linear-gradient(in hsl longer hue, blue, red) /* Color stop: A gradient going from the bottom to top, starting blue, turning green at 40% of its length, and finishing red */ linear-gradient(0deg, blue, green 40%, red) /* Color hint: A gradient going from the left to right, starting red, getting to the midpoint color 10% of the way across the length of the gradient, taking the rest of the 90% of the length to change to blue */ linear-gradient(.25turn, red, 10%, blue) /* Multi-position color stop: A gradient tilted 45 degrees, with a red bottom-left half and a blue top-right half, with a hard line where the gradient changes from red to blue */ linear-gradient(45deg, red 0 50%, blue 50% 100%)
Значения
-
<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>вдоль оси градиента). -
<color-hint> - Подсказка для интерполяции, определяющая переход градиента между соседними цветовыми точками. Длина указывает, в какой точке между двумя цветовыми точками цвет градиента должен достичь середины цветового перехода. Если значение не указано, середина цветового перехода находится посередине между двумя цветовыми точками.
Примечание: Отображение цветовых точек в градиентах CSS подчиняется тем же правилам, что и цветовые точки в градиентах SVG.
Описание
Как и любой градиент, линейный градиент не имеет собственных размеров; то есть у него нет естественного или предпочтительного размера, а также предпочтительного соотношения сторон. Его фактический размер будет соответствовать размеру элемента, к которому он применяется.
Чтобы создать линейный градиент, который повторяется и заполняет контейнер, используйте функцию repeating-linear-gradient().
Поскольку <gradient>ы относятся к типу данных <image>, их можно использовать только там, где допустимы <image>ы. Поэтому linear-gradient() не будет работать со свойством background-color и другими свойствами, использующими тип данных color.
Состав линейного градиента
Линейный градиент определяется осью — линией градиента — и двумя или более точками цветовых переходов. Каждая точка на оси имеет свой цвет; чтобы создать плавный градиент, функция linear-gradient() рисует ряд цветных линий, перпендикулярных линии градиента, каждая из которых соответствует цвету точки пересечения с линией градиента.

Линия градиента определяется центром прямоугольника, содержащего изображение градиента, и углом. Цвета градиента задаются двумя или более точками: начальной, конечной и, при необходимости, промежуточными цветовыми точками.
Начальная точка — это место на линии градиента, где начинается первый цвет. Конечная точка — это место, где заканчивается последний цвет. Каждая из этих двух точек определяется пересечением линии градиента с перпендикулярной линией, проходящей через угол прямоугольника, расположенный в том же квадранте. Конечную точку можно считать симметричной начальной точке. Эти несколько сложные определения приводят к интересному эффекту, который иногда называют магическими углами: углы, ближайшие к начальной и конечной точкам, имеют тот же цвет, что и соответствующая начальная или конечная точка.
Настройка градиентов
Добавляя на линию градиента новые цветовые точки, можно создать тщательно настроенный переход между несколькими цветами. Положение цветовой точки можно явно задать с помощью <length> или <percentage>. Если положение цвета не указано, он размещается посередине между предшествующим и следующим цветами. Следующие два градиента эквивалентны.
linear-gradient(red, orange, yellow, green, blue); linear-gradient(red 0%, orange 25%, yellow 50%, green 75%, blue 100%);
По умолчанию цвета плавно переходят от цвета одной цветовой точки к цвету следующей, а середина перехода находится ровно посередине между цветами. Можно переместить эту середину в любое место между двумя цветовыми точками, добавив между цветами неподписанную подсказку в процентах, которая указывает положение середины цветового перехода. В следующем примере от начала до отметки 10% отображается сплошной красный цвет, а от 90% до конца — сплошной синий. На участке от 10% до 90% красный цвет переходит в синий, однако середина перехода находится на отметке 30%, а не 50%, как было бы без подсказки цвета 30%.
linear-gradient(red 10%, 30%, blue 90%);
Если две или более цветовые точки находятся в одном месте, между первым и последним цветами, заданными для этого места, будет резкая граница.
Цветовые точки следует перечислять в порядке возрастания. Последующие цветовые точки с меньшим значением переопределяют значение предыдущей точки, создавая резкий переход. В следующем примере цвет меняется с красного на жёлтый на отметке 40%, а затем переходит от жёлтого к синему на протяжении 25% градиента:
linear-gradient(red 40%, yellow 30%, blue 65%);
Допускаются цветовые точки с несколькими позициями. Цвет можно задать как две соседние цветовые точки, указав обе позиции в объявлении CSS. Следующие три градиента эквивалентны:
linear-gradient(red 0%, orange 10%, orange 30%, yellow 50%, yellow 70%, green 90%, green 100%); linear-gradient(red, orange 10% 30%, yellow 50% 70%, green 90%); linear-gradient(red 0%, orange 10% 30%, yellow 50% 70%, green 90% 100%);
По умолчанию, если для точки 0% не задан цвет, в этой точке будет использоваться первый объявленный цвет. Аналогично последний цвет будет продолжаться до отметки 100% или находиться на отметке 100%, если для последней точки не задана длина.
Формальный синтаксис
<linear-gradient()> = 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
Примеры
Градиент под углом 45 градусов
body {
width: 100vw;
height: 100vh;
}
body {
background: linear-gradient(45deg, red, blue);
}
Градиент, начинающийся на отметке 60% линии градиента
body {
width: 100vw;
height: 100vh;
}
body {
background: linear-gradient(135deg, orange 60%, cyan);
}
Интерполяция в прямоугольном цветовом пространстве
body {
width: 100vw;
height: 100vh;
}
body {
background: linear-gradient(90deg in oklab, blue, red);
}
Интерполяция с использованием тона
<div class="shorter">shorter hue</div> <div class="longer">longer hue</div>
div {
height: 50vh;
color: white;
font-weight: bolder;
}
В этом примере интерполяции используется цветовая система hsl и интерполируется тон.
.shorter {
background: linear-gradient(90deg in hsl shorter hue, red, blue);
}
.longer {
background: linear-gradient(90deg in hsl longer hue, red, blue);
}
В верхнем блоке используется интерполяция по кратчайшему пути, то есть цвет переходит от красного к синему по кратчайшей дуге цветового круга. В нижнем блоке используется интерполяция по длинному пути, то есть цвет переходит от красного к синему по длинной дуге, проходя через зелёные, жёлтые и оранжевые оттенки.
Градиент с цветовыми точками, имеющими несколько позиций
В этом примере используются цветовые точки с несколькими позициями: соседним цветам присвоено одинаковое значение цветовой точки, что создаёт эффект полос.
body {
width: 100vw;
height: 100vh;
}
body {
background: linear-gradient(
to right,
red 20%,
orange 20% 40%,
yellow 40% 60%,
green 60% 80%,
blue 80%
);
}
Другие примеры linear-gradient
Другие примеры см. в статье Использование градиентов CSS.
Спецификации
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
linear-gradient |
26
10
|
12 |
16
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,…). Она имеет более ограниченные возможности, чем появившаяся позднее стандартная версия: нельзя указывать одновременно положение и угол, как в linear-gradient(). Этот устаревший синтаксис по-прежнему поддерживается для обеспечения совместимости.Считает, что <angle> начинается справа, а не сверху. То есть угол 0deg считался указателем направления вправо. |
26
18
|
16
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,…). Она имеет более ограниченные возможности, чем появившаяся позднее стандартная версия: нельзя указывать одновременно положение и угол, как в linear-gradient(). Этот устаревший синтаксис по-прежнему поддерживается для обеспечения совместимости.Считает, что <angle> начинается справа, а не сверху. То есть угол 0deg считался указателем направления вправо. |
1.5
1.0
|
4.4
4.4
|
7
5WebView на iOS 3.2 поддерживал экспериментальную функцию-webkit-gradient(linear,…). Она имеет более ограниченные возможности, чем появившаяся позднее стандартная версия: нельзя указывать одновременно положение и угол, как в 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 |
premultiplied_gradients |
29 |
79 |
36 |
16 |
15 |
29 |
36 |
16 |
15 |
2.0 |
4.4 |
15 |
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-linear-gradient() и -moz-linear-gradient(), но не в linear-gradient(). |
16 |
7 |
26 |
55
46–55Поддерживается только в-webkit-linear-gradient() и -moz-linear-gradient(), но не в linear-gradient(). |
14 |
7 |
1.5 |
4.4 |
7 |
См. также
- Использование градиентов CSS
- Другие функции градиентов:
repeating-linear-gradient(),radial-gradient(),repeating-radial-gradient(),conic-gradient(),repeating-conic-gradient() <hue-interpolation-method><color-interpolation-method><image>- Модуль изображений CSS
© 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/linear-gradient