最近、ウェブサイトをいろいろ見ていて、このアニメーションの動きってどうしてるんだろうと思って調べてみると、CSSのtransisionの機能を使って実現しているというサイトが増えてきました(ちょっと前までアニメーションはjQueryで作っているところが多かった印象)。
自分も最近になってようやくその処理方法が分かってきたので、いつか実践で使ってみたいです。
ところで、このアニメーションですが、jQueryでは確か色の変更はアニメーションで実現できなかったと思うのですが、CSSのアニメーション機能はなんと色の変更まで実現できます。
そこで思ったのが、もしかしたら色をRGBで指定するのと、HSLで指定するのではアニメーションの変化が異なるのではないかと疑問。
例えば、RGBでの青の指定は『rgb(0,0,255)』、RGBでの黄色の指定は『rgb(255,255,0)』となりますが、HSLでの青の指定は『hsl(240, 100%, 50%)』、HSLでの黄色の指定は『hsl(60, 100%, 50%)』となるため。パット見、HSL指定だとHの色相部分だけの値を変えればいいだけなので、青から黄色に変化する場合は途中に緑色、つまり『hsl(150,100%,50%)』という値がでてくるのではないかと思いました。対してRGB指定だとrとgの値が増え、bの値が減るようになりそうなので途中に緑色『rgb(0,255,0)』はでてきそうにありません。
というわけで調べてみた。
HTML
<div id="form"> <label><input type="radio" name="type" id="radio_blue" checked>青</label> <label><input type="radio" name="type" id="radio_yellow">黄色</label> </div> <div id="rgb" class="blue"> RGB: </div> <div id="hsl" class="blue"> HSV: </div>
CSS
#rgb, #hsl{ width:50%; box-sizing: border-box; border:10px solid #ffffff; padding:5px; float:left; transition: background-color 5s; } #rgb.blue{ background-color: rgb(0,0,255); color:#ffffff; } #rgb.blue::after{ content: 'background-color: rgb(0,0,255)'; } #rgb.yellow{ background-color: rgb(255,255,0); color:#000000; } #rgb.yellow::after{ content: 'background-color: rgb(255,255,0)'; } #hsl.blue{ background-color: hsl(240, 100%, 50%); color:#ffffff; } #hsl.blue::after{ content: 'background-color: hsl(240, 100%, 50%)'; } #hsl.yellow{ background-color: hsl(60, 100%, 50%); color:#000000; } #hsl.yellow::after{ content: 'background-color: hsl(60, 100%, 50%)'; }
JavaScript
let colorEle = document.querySelectorAll('#rgb, #hsl'); //背景を変更する要素 //青のラジオボタンを押した時の動作 document.getElementById('radio_blue').addEventListener('click', function(){ Array.prototype.forEach.call(colorEle, function(item){ item.classList.remove('yellow'); item.classList.add('blue'); }); }); //黄色のラジオボタンを押した時の動作 document.getElementById('radio_yellow').addEventListener('click', function(){ Array.prototype.forEach.call(colorEle, function(item){ item.classList.remove('blue'); item.classList.add('yellow'); }); })
青というラジオボタンをクリックしたら背景が青、黄色というラジオボタンをクリックしたら背景が黄色に5秒かけて変化するという処理をしています。アニメーションによる変化対象は背景色のみとしています(現在の処理だと、文字色はクリックと同時に変化しますが、CSSの『transition: background-color 5s;』を『transition: all 5s;』とすれば文字色もアニメーションで変化します)。色については左側の要素をRGB指定、右側の要素をHSL指定としています。
サンプル:CSS Color Animation
結果、全く同じように変化しました。RGB指定からHSL指定に変化することもできるわけだからそりゃそうか。
コメント