
今回のTipsでは、Webページの背景(background)にアニメーションしながら色が変化していく「グラデーション背景」とフルサイズの「背景画像」を重ね合わせて表示するサンプルを作ってみたいと思います。CSSのみでできて、とってもシンプルです。
まずは完成イメージをご覧ください!
See the Pen Gradient animation background with full size image by digistate (@digistate) on CodePen.
CSS3では、1つのbackgroundプロパティのみで、複数の背景要素(画像,カラー)の重ね合わせができるのですが、今回のサンプルではアニメーション(変色)するグラデーション背景と、静止画像の背景を重ね合わせるため、それぞれの背景は異なる要素に指定しています。
具体的には、以下の背景レイヤー構成です。
背景レイヤー構成

body タグには backgroundプロパティで背景画像を指定し、その直後の配下に .wrapper セレクタを付けたラッパー要素(div)にアニメーションで変色するグラデーション背景を指定しています。
<body>
<div class="wrapper">
:
</div>
</body>
背景レイヤーのCSS
body は単純に背景画像を指定するだけとなっています。
body {
background: url(画像のURL) fixed 50%; /* url, attachment, position の順で指定 */
background-size: cover; /* アスペクト比を保持して表示サイズにフィット */
}
グラデーション背景は.wrapper セレクタの要素(div)に指定しています。
.wrapper {
background: linear-gradient(120deg, rgba(19, 178, 102, 0.72), rgba(38, 184, 208, 0.72), rgba(50, 107, 185, 0.72), rgba(193, 71, 183, 0.72), rgba(206, 61, 104, 0.72)) fixed;
background-size: 800%;
}
グラデーションは、HEX値(#333333 などのカラーコード)で指定すると下のレイヤー(body)に指定した背景画像が見えなくなってしまうため、アルファ値(rgba)で72%(0.72)の不透明度を指定しています。
アニメーション用の指定は、キーフレーム(keyframes)を利用して自作したものをセットしています。
-webkit-animation: bg-gradient 15s ease infinite;
-moz-animation: bg-gradient 15s ease infinite;
-o-animation: bg-gradient 15s ease infinite;
animation: bg-gradient 15s ease infinite;
@-webkit-keyframes bg-gradient {
0% {
background-position: 14% 0;
}
50% {
background-position: 87% 100%;
}
100% {
background-position: 14% 0;
}
}
@-moz-keyframes bg-gradient {
0% {
background-position: 14% 0;
}
50% {
background-position: 87% 100%;
}
100% {
background-position: 14% 0;
}
}
@-o-keyframes bg-gradient {
0% {
background-position: 14% 0;
}
50% {
background-position: 87% 100%;
}
100% {
background-position: 14% 0;
}
}
@keyframes bg-gradient {
0% {
background-position: 14% 0;
}
50% {
background-position: 87% 100%;
}
100% {
background-position: 14% 0;
}
}
アニメーションとキーフレームは、各ブラウザエンジンごとにベンダープリフィクス付きで指定しているため定義が多くなっていますが、基本は15秒間隔(15s)でキーフレーム(bg-gradient)に指定したアニメーションを繰り返し(infinite)実行する、というものです。
