よくわからない動きをさせながら円周上に点を配置
よくわからない動きをさせながら円周上に点を配置 | JSFiddle
こんなコードになった。
li { ... $r: 40; @for $t from 1 through 100 { &:nth-child(#{$t}) { // 色 $hue: (360 / 100) * $t; $color: hsl($hue, 100, 68); background-color: $color; // アニメーション animation-name: scale#{$t}; animation-duration: calc(100s / #{$t}); animation-timing-function: ease-in-out; animation-direction: alternate; animation-iteration-count: infinite; // それぞれ100%のときの座標が違うので、点ごとに@keyframesが必要になる @keyframes scale#{$t} { 0% { transform: translate(0, 0); } 100% { // 円周上に点を配置 $angle: (360 / 100) * (pi() / 180) * $t; $x: $r * cos($angle) + vmin; $y: $r * sin($angle) + vmin; transform: translate($x, $y); } } } } }
@keyframesの100%の指定は省略できるので、こんなふうにも書ける。@keyframesをfor文の直下においている。このほうが$rと$x(または$y)の計算式が近く、関係が見えやすいかもしれない。
li { ... @for $t from 1 through 100 { &:nth-child(#{$t}) { // 円周上に点を配置 $angle: (360 / 100) * (pi() / 180) * $t; $x: $r * cos($angle) + vmin; $y: $r * sin($angle) + vmin; ... } // それぞれ100%のときの座標が違うので、点ごとに@keyframesが必要になる @keyframes scale#{$t} { 0% { transform: translate(0, 0); } } } }
animation
プロパティは省略すると何の指定かわからなくなるので、省略せずに書くほうが良い。あと、Sassを使っててうまく表示されないときは、コンパイル後のCSSを見るのが良い。それぞれ良い気づきがあった。
その他
上記以外にも2つ、今後のためになりそうなものができた。