Случайный цвет из массива в Sass [дубликат]
этот вопрос уже есть ответ здесь:
Я хочу указать массив цветов, а затем применить цвета случайным образом к списку.
до сих пор у меня это так, что цвета будут циклически проходить по порядку.
Как я могу рандомизации это?
вот код Sass до сих пор:
$colors: red, orange, yellow, green, blue, purple;
@for $i from 1 through length($colors) {
li:nth-child(#{length($colors)}n+#{$i}) {
background: lighten(nth($colors, $i), 20%);
}
}
li {
list-style: none;
padding: 1em;
}
и разметка:
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
<li>f</li>
<li>g</li>
<li>h</li>
<li>i</li>
<li>j</li>
<li>k</li>
<li>l</li>
</ul>
пример на сайт CodePen: http://codepen.io/anon/pen/azbwJm
1 ответов
во-первых, я должен напомнить всем, кто читает, что Sass предварительно скомпилирован в CSS; вы не можете достичь случайного поведения "во время выполнения" (т. е. При загрузке страницы) с помощью Sass.
Sass имеет функцию random (), которая может вас заинтересовать:
$colors: red, orange, yellow, green, blue, purple;
$repeat: 20 // How often you want the pattern to repeat.
// Warning: a higher number outputs more CSS.
@for $i from 1 through $repeat {
li:nth-child(#{length($colors)}n+#{$i}) {
background: lighten(nth($colors, random(length($colors))), 20%);
}
}
li {
list-style: none;
padding: 1em;
}
это выбирает случайный индекс $colors
array и использует связанный цвет.
интересное примечание:документация Sass утверждает, что random($limit)
"[возвращает] целое число от 1 и $limit
, включая 1, но не $limit
."Однако, если вы используете nth($colors, random(length($colors) + 1))
в вашей демо-версии CodePen, чтобы "компенсировать"random()
функция не выбирая самый высокий индекс, вы можете получить ошибку за использование индекса за пределами границ. Это предполагает, что random()
по сути, подразумевает $limit
.