Это довольно длительный, но он работает:
//$blue: #177DEF;
$firstR: 23;
$firstG: 239;
$firstB: 125;
$blue: rgb(23, 125, 239);
//$green: #2FF0D5;
$secondR: 47;
$secondG: 240;
$secondB: 213;
$green: rgb(47, 240, 213);
body{
background-color: #000;
}
#panel {
font-size: 0;
}
span {
font-size: 16px;
display: inline-block;
vertical-align: bottom;
width: 10px;
&:not(:first-of-type) {
margin-left: 2px;
}
}
$elements: 51;
$redDiv: ($firstR - $secondR)/$elements;
@if $redDiv < 0 {
$redDiv: $redDiv * -1
}
$greenDiv: ($firstG - $secondG)/$elements;
@if $greenDiv < 0 {
$greenDiv: $greenDiv * -1
}
$blueDiv: ($firstB - $secondB)/$elements;
@if $blueDiv < 0 {
$blueDiv: $blueDiv * -1
}
@for $i from 0 to $elements {
$redValue: $redDiv * $i;
$greenValue: $greenDiv * $i;
$blueValue: $blueDiv * $i;
span:nth-child(#{$i}) {
height: random(260) + px;
background-color: rgb($firstR + $redValue, $firstG + $greenValue, $firstB + $blueValue);
}
}
Я преобразовал шестнадцатеричные значения RGB here, а затем сделал отдельные переменные для каждого красного, зеленого , синее значение в обоих цветах.
Вычитайте второе значение из первого, затем разделите на количество элементов (это дает вам количество изменений, необходимых для каждой итерации).
Убедитесь, что значения не являются отрицательными с помощью @if
.
Рассчитать изменение путем умножения на $i
, а затем добавить/вычесть это изменение в зависимости от того, какое значение было меньше (первое или второе). Если первое значение меньше $first + $value
, если второе значение меньше $first - $value
.
Это была единственная деталь, которую нужно изменить в зависимости от цветов, остальное будет работать для любого значения RGB.
Codepen: http://codepen.io/anon/pen/ezpmXJ
Nice один, но мне кажется, что "переход" не завершен? Начальный «зеленый» хорош, но он не заканчивается в финале «синий»? – Vucko
Посмотрите на код еще раз, я создал блоки, которые показывают цвета начала и конца. Они выглядят одинаково; – theblindprophet
Да, конечно. Мой плохой, я выглядел неправильно. Спасибо за решение. ура – Vucko