这可以使用纯 CSS 来完成,无需编写(或通过 SCSS 等生成),使用以下组合:
animation-delay
改变动画开始时间的负数
- 多个
nth-child
或nth-of-type
规则来应用将“随机化”规则应用的公式
movie.nth-child(2n) { animation-delay: -10s }
movie.nth-child(2n+1) { animation-delay: -30s }
movie.nth-child(3n) { animation-delay: -20s; }
movie.nth-child(5n) { animation-delay: -40s }
movie.nth-child(7n) { animation-delay: -15s }
{etc}
仅使用前 2 条规则会给出交替规则(例如表中的偶数/奇数行)。请注意第二条具有+1
偏移量的规则 - 如果您的类 ( movie
) 没有适合您正在更改的规则的默认值(默认情况下为 0),这很重要animation-delay
。
使用nth-child(n)
具有素数倍数的公式n
使有效模式长度等于所有素数的乘积(例如2*3*5*7 = 210
重复之前的元素)。
li {
animation: movie 5s linear infinite;
}
@keyframes movie {
20% { color: white }
40% { color: black }
}
li:nth-child(2n-1) {
background-color: lime;
animation-delay: 1s;
}
li:nth-child(2n) {
background-color: orange;
animation-delay: 2s;
}
li:nth-child(3n) {
background-color: yellow;
animation-delay: 3s;
}
li:nth-child(5n) {
background-color: magenta;
animation-delay: 5s;
}
li:nth-child(7n) {
background-color: aqua;
}
<ul>
<li>0</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
<li>13</li>
</ul>
为了进一步随机化,您可以创建第二组规则,其n
倍数/偏移量略有不同,并更改animation-duration
(或任何其他规则)。