--- title: linear-gradient() slug: Web/CSS/linear-gradient() tags: - Градиент - Линейный градиент translation_of: Web/CSS/linear-gradient() ---
CSS-функция linear-gradient()
создаёт изображение, состоящее из постепенного перехода между двумя или более цветами вдоль прямой линии. Её результатом является объект типа данных {{CSSxRef("<gradient>")}}, являющийся особым видом {{CSSxRef("<image>")}}.
Как и в случае с любым градиентом, линейный градиент не имеет внутренних размеров; т. е., он не имеет ни естественного или предпочтительного размера, ни предпочтительного соотношения сторон. Его фактический размер будет совпадать с размеров элемента, к которому он применён.
Для создания линейного градиента, повторяющегося таким образом, что он заполняет содержащий его элемент, лучше используйте функцию {{CSSxRef("repeating-linear-gradient")}}.
Так как <gradient>
ы относятся к типу данных <image>
, они могут использоваться только там, где может использоваться <image>
. По этой причине, linear-gradient()
не будет работать в качестве {{CSSxRef("background-color")}} и других свойств, использующих тип данных {{CSSxRef("<color>")}}.
Линейный градиент определяется осью — линией градиента — и двумя или более точками остановки цвета. Каждая точка на оси – это определённый цвет; для создания плавного градиента функция linear-gradient()
рисует серию цветных линий, перпендикулярных линии градиента, каждая из них соответствует цвету точки, в которой она пересекает линию градиента.
Линия градиента определена центром блока, содержащего изображение градиента, и углом. Цвета градиента задаются двумя или более точками: начальной точкой, конечной точкой, и необязательными точками остановки цвета между ними.
Начальная точка – это место на линии градиента, где начинается первый цвет. Конечная точка – это точка, на которой заканчивается последний цвет. Каждая из этих двух точек определяется пересечением линии градиента с перпендикулярной линией, проходящей от угла, находящегося в том же квадранте блока. Конечную точку можно просто считать как точку, симметричную начальной точке. Эти несколько сложные определения приводят к интересному эффекту, иногда называемому магическими углами: углы, ближайшие к начальной и конечной точке, имеют те же цвета, что и соответствующая им начальная или конечная точка.
Добавляя больше точек остановки цвета на линию градиента, вы можете точно задавать переходы между разными цветами. Позиции остановок цвета могут быть явно заданы использованием значений типа {{CSSxRef("<length>")}} или {{CSSxRef("<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%);
Если две или более точки остановки цвета находятся в одной и той же позиции, переход будет в виде чёткой линии между первым и последним цветом, объявленным на этой позиции.
Точки остановки цвета должны быть перечислены в порядке возрастания. Соседние точки остановки цвета с меньшим значением переопределят значение предыдущей точки остановки цвета, создавая резкий переход. В примере ниже на позиции 30% происходит замена красного на жёлтый, и затем идёт переход от жёлтого до синего на протяжении 35% длины градиента.
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%, если на этой последней остановке не было объявлено никакой длины.
/* Градиент наклонён на 45 градусов, начинается с синего, заканчивается красным */ linear-gradient(45deg, blue, red); /* Градиент идёт от правого нижнего до левого верхнего угла, от синего до красного */ linear-gradient(to left top, blue, red); /* Остановка цвета: градиент идёт снизу вверх, начинается синим, становится зелёным на 40% своей длины, и заканчивается красным */ linear-gradient(0deg, blue, green 40%, red); /* Цветовая подсказка: градиент идёт слева направо, начинается с красного, достигает среднего цвета на 10% пути длины градиента, занимая оставшиеся 90% длины переходом в синий */ linear-gradient(.25turn, red, 10%, blue); /* Многопозиционная остановка цвета: градиент повёрнут на 45 градусов, с красной нижней левой половиной, синей верхней правой половиной, с чёткой линией на месте перехода градиента из красного в синий */ 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
, соответственно. Другие значения переводятся в значение угла.0deg
эквивалентно to top
; увеличение значения увеличивает угол поворота по часовой стрелке от этой позиции.<linear-color-stop>
<color-hint>
Примечание: Отрисовка цветовых остановок в CSS-градиентах следует тем же правилам, что и цветовые остановки в SVG-градиентах.
linear-gradient( [ <angle> | to <side-or-corner> ,]? <color-stop-list> ) \---------------------------------/ \----------------------------/ Определение линии градиента Список остановок цвета где <side-or-corner> = [ left | right ] || [ top | bottom ] и <color-stop-list> = [ <linear-color-stop> [, <color-hint> ]? ]#, <linear-color-stop> и <linear-color-stop> = <color> [ <color-stop-length> ]? и <color-stop-length> = [ <percentage> | <length> ]{1,2} и <color-hint> = [ <percentage> | <length> ]
body { width: 100vw; height: 100vh; }
body { background: linear-gradient(45deg, red, blue); }
{{EmbedLiveSample("Градиент_под_углом_45_градусов", 120, 120)}}
body { width: 100vw; height: 100vh; }
body { background: linear-gradient(135deg, orange, orange 60%, cyan); }
{{EmbedLiveSample("Градиент_начинающийся_на_60_линии_градиента", 120, 120)}}
Этот пример использует многопозиционные остановки цвета, и со смежными цветами, имеющими те же точки остановки цвета, создаёт полосатый эффект.
body { width: 100vw; height: 100vh; }
body { background: linear-gradient(to right, red 20%, orange 20% 40%, yellow 40% 60%, green 60% 80%, blue 80%); }
{{EmbedLiveSample("Градиент_с_многопозиционными_остановками_цвета", 120, 120)}}
Примечание: Больше примеров смотрите на странице Использование CSS-градиентов.
Спецификация | Статус | Комментарий |
---|---|---|
{{SpecName('CSS4 Images', '#color-stop-syntax', 'Gradient Color-Stops')}} | {{Spec2('CSS4 Images')}} | Добавлены подсказки по переходам |
{{SpecName('CSS3 Images', '#linear-gradients', 'linear-gradient()')}} | {{Spec2('CSS3 Images')}} | Первоначальное определение |