コーポレートサイトとかでWEBサイトを開いた時にロゴマークが表示されてWEBサイトのファーストビューが表示されるオープニングアニメーション的なやつ。
最近は、最初にテキストを読ませたりとか、映像と融合したダイナミックな表現が増えてますが、簡単なロゴマークをアニメーションで出してから、WEBサイトを表現するならCSSのアニメーションだけでもそれっぽい感じで表現することは可能です。
今回の実装方法は以下の2段階に分けてローディングアニメーションを実装しています。
・ロゴマークのアニメーションをCSSで実装
・WEBサイトの上に被っているロゴマークの画面から外れる
使用するのは、CSSのanimationプロパティと@keyframesになります。
まず、土台になるHTMLを準備
<div id="logo_loader" class="open"> <div class="f_logo"> <img src="logo.png" alt="logo"> </div> </div>
ロゴマーク入れている<div>にさらに、<div class=“logo_loader”>で2重に囲います。
そして、CSSはこんな感じ
#logo_loader { display: block; position: fixed; top: 0; left: 0; width: 100%; height: 100vh; z-index: 101; background-color: #333; } #logo_loader .f_logo { position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto; width: 160px; height: 50px; text-align: center; color: #fff; font-size: 30px; } #logo_loader .f_logo img { width: 100%; height: auto; }
CSSはモニター全体を囲うために#logo_loaderには「 height: 100vh;」を指定します。
これで、PCでもスマホでも問題なく背景黒画面で囲うことができます。
ロゴマークは、どのモニター幅でも天地中央に配置されるようにpositionで指定します。
flexboxとかで指定してもいいですね。
ロゴの配置が終わったら、次はロゴマークがアニメーションされるように@keyframesを書いていきます。
今回のこのアニメーションの基盤は、「before要素の四角形で隠れているロゴマークを表示させる」というオーソドックスな技法になります。
まずは、before(疑似要素)を使って、ロゴマークを隠します。
#logo_loader .f_logo:before { content: ""; display: block; width: 100%; height: 110%; background-color: #333; position: absolute; top: 0; left: 100%; animation: loadLogo 1.5s; }
そして、@keyframesでアニメーションさせます。
@keyframes loadLogo { 0% { left: 0; } 50% { left: 0; } 100% { left: 100%; } }
どのプロパティにキーフレームを適用するかはanimationプロパティを使う必要があります。
今回は「#logo_loader .f_logo:before」の部分ですね。
#logo_loader .f_logo:before { animation: loadLogo 1.5s; }
ロゴのアニメーションが終わったら、こいつらにどいてもらわないと、WEBサイトのコンテンツが表示されません。なので、こっちは時間差で別のanimationを入れる必要があります。
#logo_loader.open { animation-name: slideOut; animation-fill-mode: forwards; animation-duration: 2s; animation-delay: 2s; } @keyframes slideOut { 0% { transform: translateX(0%); } 50% { transform: translateX(0%); } 100% { transform: translateX(100%); } }
ポイントとしては、「animation-fill-mode」で「forwards」を指定し、アニメーション終了の状態がそのまま維持されるようにしています。これがないと、アニメーションされた後、元の状態に戻ってしまいます。
あと、ロゴが表示された後にこっちのアニメーションをさせる必要があるので、「animation-delay」で、アニメーションのタイミングをズラしています。
これで、こんな感じのアニメーションが実装できました。
DEMO(左右に動くアニメーション)
scale(拡大・縮小をアニメーションさせるやつ)を使えば、こんな感じのアニメーションも入れれます。
DEMO(スケールアニメーション)
今回はCSSのみでアニメーションを設置しましたが、jQueryやもっと複雑な@keyframesを使えば、表現の幅は広がるかと思います。簡易的なアニメーションならCSSだけで十分です。
ただ、もれなくページを回遊するたびに、この4秒ぐらいのアニメーションを見せられるのは、ユーザーにとってはストレスになるかもしれませんので、TOPページにだけ表示させるとか、Cookieを利用して、最初の閲覧時だけ表示させるとか、何かしらの工夫は必要かもしれません。
今回は以上です。