Share on

【実例あり】現役コーダーが魅せるCSSアニメーションとデザインの考え方・実装方法

【実例あり】現役コーダーが魅せるCSSアニメーションとデザインの考え方・実装方法

ちょっとアニメーションのついたサイトってかっこいいですよね。
どうやって動いているのか気になるところです。ソースコードを紐解いていくと、意外に小規模なところからアニメーションは実装できます。

しかし長年コーディングに携わっていると、条件や制約があるのではないかと疑ってしまいます。スマホでのアクセス数が増加する中、PCでの閲覧が無いわけでもありません。レスポンシブな組み込みが求められる中で、省コスト化(工数や予算など)を目指しながら実装は進めたいもの…。

今回は、ユーザビリティを向上させ、Webサイトやサービスの利用を手助けするCSSアニメーションを取り入れたWebサイト制作を試みます。

はじめに

CSSアニメーションとは、CSSに関するプロパティを使用してHTMLに書かれている要素にわずかなアニメーションを実装したものです。
JavaScriptを使用せず、手軽に利用できるという利点があります。晩年活用されてきたCSSの記述方法とは異なる部分があるため、ブラウザによって予期せぬ動作を引き起こしたりすることもあります。
そのため、実機で確認をしながらコーディングを進めていくことが必要となってきます。

効果的なCSSアニメーションの設置場所とは

実際にアニメーションを展開する前に、CSSアニメーションを実装する場所を決めます。ユーザーに見られない場所に効果を足しても、頑張りどころの無駄になってしまうため、利用シーンにあわせて使い分けましょう。

【チェックリスト】

  • CTAボタンはありませんか?
  • キービジュアルの中でも特に目立たせたい箇所はありませんか?
  • デザインで動きが想定されたものはありませんでしたか?
  • 読ませたいテキストはありますか?
  • ユーザーに知らせたい動きはありませんか?

反対に適用するべきではない箇所はどんなところでしょうか?

  • 全てのボタンにアニメーションを実装していませんか?
  • キービージュアルの全てが動いていませんか?
  • 動きの想定がされていない箇所に実装をしていませんか?

サイト全体を見渡して設置場所を見極めましょう。
レスポンシブの場合、PC/SPで同じ動きをしてもメインのコンテンツの邪魔にならないかも要チェックです。

Webサイトにおけるアニメーションとは何か?

ところで、「CSS3アニメーション」で検索すると魅力的なコードがたくさん引っかかります。どれもこれも手軽に実装でき、アイデア性にあふれるものばかりですが、効果的なアニメーションとは何か考えていきたいところです。

  • 他のデザイン要素に合ったアニメーションですか?
  • 注目を集めるアニメーションですか?
  • メインコンテンツを邪魔しないアニメーションですか?

CSSアニメーションで何ができるか

あなたが想定する場所や要素の検討ができたなら、実際に取り入れていきましょう。デザイン時点にはない「動き」を想像するために、簡易的に実装されたものを見ていきましょう。

・跳ねる

再生

HTML

<p class="text__bound">COOSY</p>

CSS

.text__bound {
  animation: key .3s ease infinite alternate;
}
@keyframes key {
  0% {transform: translateY(0px);}
  100% {transform: translateY(-10px);}
}

・ゆらゆら

再生

HTML

<ul>
  <li><span><img src="https://coosy.co.jp/assets/img/service/service_planning.png" alt=""></span></li>
  <li><span><img src="https://coosy.co.jp/assets/img/service/service_markting.png" alt=""></span></li>
  <li><span><img src="https://coosy.co.jp/assets/img/service/service_system.png" alt=""></span></li>
</ul>

CSS

li {
  display: inline-block;
}
li:nth-child(odd) {
  -webkit-animation: horizontal1 1s ease-in-out infinite alternate;
}
li:nth-child(even) {
  -webkit-animation: horizontal2 1s ease-in-out infinite alternate;
}

span {
  display: block;
  text-align: center;
  -webkit-animation: vertical 1s ease-in-out infinite alternate;
}
span img{
  width: 330px;
  height: auto;
}
li:nth-child(1) span {
  -webkit-animation-duration: 1.1s;
}
li:nth-child(2) span {
  -webkit-animation-duration: 1.3s;
}
li:nth-child(3) span {
  -webkit-animation-duration: 1.5s;
}
@-webkit-keyframes horizontal1 {
  0% { -webkit-transform:translateX( -12px); }
  100% { -webkit-transform:translateX(  0px); }
}
@-webkit-keyframes horizontal2 {
  0% { -webkit-transform:translateX(  12px); }
  100% { -webkit-transform:translateX(  0px); }
}
@-webkit-keyframes vertical {
  0% { -webkit-transform:translateY(-40px); }
  100% { -webkit-transform:translateY(  0px); }
}

・スライド

再生

HTML

<p class="text__slideIn">COOSY</p>

CSS

.text__slideIn {
  animation: slideIn 1.6s infinite;
}
@keyframes slideIn {
  0% {
    opacity: 0;
    transform: translateX(100px);
  }
  100% {
    opacity: 1;
    transform: translateX(0);
  }
}

もう少し実際のデザインに近いものを見ていきましょう。

・ホバー画像(PC限定)

再生

HTML

<div class="img__hover">
  <img src="https://coosy.co.jp/assets/img/common/icon_contact.png">
</div>

CSS

.img__hover img {
  display: block;
  transition-duration: 0.3s;
}
.img__hover img:hover {
  transform: scale(1.6);
  transition-duration: 0.3s;
}

・ホバーテキスト(PC限定)

再生

HTML

<ul>
  <li><a href="#">HOME</a></li>
  <li><a href="#">ABOUT</a></li>
  <li><a href="#">MAIN</a></li>
  <li><a href="#">CONTACT</a></li>
</ul>

CSS

a {
  display: inline-block;
  position: relative;
  overflow: hidden;
  color: #000;
  text-decoration: none;
}
a:after {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 3px;
  background-color: #000;
  transform: translate(-100%, 0);
  transition: transform cubic-bezier(0.215, 0.61, 0.355, 1) 0.4s;
  content: "";
}
a:hover:after {
  transform: translate(0, 0);
}
li {
  list-style: none;
  margin: 10px 0;
}

・ハンバーガーメニュー

再生

HTML

<button class="menu-trigger">
  <span></span>
  <span></span>
  <span></span>
</button>

CSS

.menu-trigger,
.menu-trigger span {
  display: inline-block;
  transition: all .4s;
  box-sizing: border-box;
}
.menu-trigger {
  position: relative;
  width: 50px;
  height: 44px;
  background: none;
  border: none;
  appearance: none;
  cursor: pointer;
}
.menu-trigger span {
  position: absolute;
  left: 0;
  width: 100%;
  height: 4px;
  background-color: #000;
  border-radius: 4px;
}
.menu-trigger span:nth-of-type(1) {
  top: 0;
}
.menu-trigger span:nth-of-type(2) {
  top: 20px;
}
.menu-trigger span:nth-of-type(3) {
  bottom: 0;
}
.menu-trigger:active span:nth-of-type(1) {
  transform: translateY(20px) rotate(-45deg);
}
.menu-trigger:active span:nth-of-type(2) {
  opacity: 0;
}
.menu-trigger:active span:nth-of-type(3) {
  transform: translateY(-20px) rotate(45deg);
}

実例2選

クーシーで実際にCSSアニメーションに取り組んだ実例があります。
アイデアのひとつとして見ていきましょう。

神戸電子専門学校 IT・情報処理学科

再生

KVのテキストにアニメーションが使用されています。
https://coosy.co.jp/work/detail/kobedenshi_it/

ひと目で見て「ITや未来的なイメージ」が湧くようなタイポグラフィーアニメをCSSアニメーションで表現しています。特にこだわったところは、文字の表示非表示のリズム感で、単語一つずつ文字が配置されるまでの間をランダムで切り替えています。

Plus Design X(PDX)

再生

KVのスクロールした際に表示されるテキストに使用されています。
https://coosy.co.jp/work/detail/pdx/

今回「Webならではの表現」という課題に対して、クーシーは「動き」という回答をチョイスしました。画面をスクロールしきってから文字が現れる動きやプロダクトを重ねる演出で、ページを読み進める感覚を表現。画面をスクロールしても固定表示させることで、その情報が見開きにまたがっている「紙ならではの感覚」を表現しました。「動き」自体のタイミングや緩急も考慮し、静謐さ、格式高さが感じられるよう制作しています。

よりキレイに魅せるために下記も参考にしてください。

  • 複数アニメーションを入れる場合、表示秒数を揃えるとキレイに見えます。
  • ホバーやスクロールなどユーザーアクションを統一すると素直に見えます。
  • ページ読み込み時に時間がかかる場合、意図したものでは無いのであれば、実装を外したほうがいいかもしれません。

おわりに

CSSアニメーションを利用して、デザインの状態からパワーアップした「見た目」のWebサイトを作成できます。せっかく取り入れるならデザインに沿ったアニメーションを実装したいですね。

アニメーションを設置するために、JavaScriptを利用することでより高度な表現を再現することも可能です。並行して利用してより効果的な「見せ方」を検討していきましょう。

クーシーブログ編集部

この記事を書いた人

クーシーブログ編集部

1999年に設立したweb制作会社。「ラスクル」「SUUMO」「スタディサプリ」など様々なサービスの立ち上げを支援。10,000ページ以上の大規模サイトの制作・運用や、年間約600件以上のプロジェクトに従事。クーシーブログ編集部では、数々のプロジェクトを成功に導いたメンバーが、Web制作・Webサービスに関するノウハウやハウツーを発信中。

お問い合わせはこちらから

Web制作デザイン、丸ごとお任せ

お問い合わせする

Share on

お問い合わせはこちら

CATEGORY LIST