CSS3 のグラデーション背景をホバー時にアニメーションさせる簡単な方法
CSS の linear-gradient
は transition
で変化させることができないようで、困った挙句こんなやり方を発見。
以下、ロゴタイトル風に実装してみた。これは Neo's GitHub Pages のタイトル部分で使用している。
- デモ : Transition With Linear Gradient
- コード : frontend-sandboxes/index.html at master · Neos21/frontend-sandboxes
1つ目の #logo
がソレ。linear-gradient
で指定する色は透明度を 0.9
などにしておき、一緒に指定している background-color
の白色が透けるようにしておく。んで、:hover
時に background-color
の色に黒っぽい色を指定することで、これが transition
する。
2つ目の #logo2
は実験。div 要素とその中の a 要素に別々のグラデーションを指定し、a 要素の opacity
を transition
で 0
に変えてやれば、div 要素のグラデーションが見えるようになるから、アニメーションっぽくなるんじゃないか?と思ったもの。でも opacity
を使うと a 要素内のテキストも一緒に透明になってしまうのでちょっと使いづらいかと。スタイルのためだけに HTML の構成を変えたくはないのでこの状態で諦めることにした。
もうちょい複雑にアニメーションさせたいなら
background-size
を大きめにしておいて、animation
で background-position
をズラすようにすると良いらしい。以下のサイトでアニメーションするグラデーションを作るジェネレーターが試せる。
これをベースにちょっと作ってみたけど、マウスオーバー時はいいものの、マウスアウト時にアニメーションしつつ元にもどってくれないので、チトイマイチ。
- デモ : Animated Linear Gradient
- コード : frontend-sandboxes/index.html at master · Neos21/frontend-sandboxes
結局1番目の background-color
を変えるやり方が一番シンプルでいいかな~と思った。