Если у вас есть 2 цвета, проценты составляют 0%
и 100%
.box {
height:200px;
background:
linear-gradient(to right,red,blue) top/100% 40%,
linear-gradient(to right,red 0%,blue 100%) bottom/100% 40%;
background-repeat:no-repeat;
border:5px solid;
}
<div class="box">
</div>
Если мы проверим спецификацию , то увидим следующее:
Цвета в градиентах задаются с помощью цветовых ограничителей. Остановка цвета - это сочетание цвета и позиции. Хотя каждая остановка цвета концептуально имеет позицию, позиция может быть опущена в синтаксисе, и в этом случае она автоматически заполняется пользовательским агентом; подробности см. ниже.
А потом
Когда позиция цветовой остановки не указана, она автоматически устанавливается на полпути между двумя окружающими остановками. Если нескольким стопам подряд не хватает позиции, они распределяются одинаково.
И полный набор правил:
Для обработки списка цветовых остановок необходимо выполнить следующие шаги. После применения этих правил все цветовые остановки будут иметь определенную позицию и цвет, и они будут в порядке возрастания:
Если у первой цветовой остановки нет позиции, установите ее положение на 0%. Если последний цветовой стоп не имеет позиции, установите его положение на 100%.
Если у цветовой остановки есть позиция, которая меньше указанной позиции любой цветовой остановки перед ним в списке, установите его положение равным наибольшей указанной позиции любой цветовой остановки перед ним.
Если у какой-либо цветовой остановки по-прежнему нет позиции, то для каждого запуска смежных цветовых остановок без позиций установите их положения так, чтобы они были равномерно распределены между предыдущей и следующей цветовой остановками с позициями.
Первое правило тривиально. Второе правило означает, что мы должны логически иметь приращение. Так что если у нас будет что-то вроде linear-gradient(red 20%, blue 10%, yellow 5%)
, оно будет преобразовано в linear-gradient(red 20%, blue 20%, yellow 20%)
. Третье правило просто позиционирует непозиционированный цвет, чтобы он был равномерно распределен между двумя позиционированными цветами.
Так что, если у нас есть несколько цветов без позиции, это будет примерно так:
.box {
height:100px;
background:
linear-gradient(to right,red,yellow,blue) top/100% 40%,
linear-gradient(to right,red 0%,yellow 50%,blue 100%) bottom/100% 40%;
background-repeat:no-repeat;
border:5px solid;
}
.box1 {
height:100px;
background:
linear-gradient(to right,red,yellow,purple,blue) top/100% 40%,
linear-gradient(to right,red 0%,yellow 33.333%,purple 66.66%,blue 100%) bottom/100% 40%;
background-repeat:no-repeat;
border:5px solid;
}
<div class="box">
</div>
<div class="box1">
</div>
И в случае, если у нас есть определенные позиции, у нас будет это:
.box {
height:100px;
background:
linear-gradient(to right,red,yellow,blue 80%) top/100% 40%,
linear-gradient(to right,red 0%,yellow 40%,blue 80%) bottom/100% 40%;
background-repeat:no-repeat;
border:5px solid;
}
.box1 {
height:100px;
background:
linear-gradient(to right,red,yellow 20%,purple,blue 80%) top/100% 40%,
linear-gradient(to right,red 0%,yellow 20%,purple 50%,blue 80%) bottom/100% 40%;
background-repeat:no-repeat;
border:5px solid;
}
<div class="box">
</div>
<div class="box1">
</div>
Более сложные случаи:
.box {
height:100px;
background:
linear-gradient(to right,red 20%,yellow 5%,red,orange,blue 80%,pink) top/100% 40%,
linear-gradient(to right,red 20%,yellow 20%,red 40%,orange 60%,blue 80%,pink 100%) bottom/100% 40%;
background-repeat:no-repeat;
border:5px solid;
}
<div class="box">
</div>