【CSS】テキストなどの要素をスライド表示するアニメーション

【アイキャッチ画像】CSSを使って、スライドインするテキストやコンテンツを実装する方法

本記事では、以下のように指定したテキストなどをゆっくり/徐々に表示するアニメーション(スライドイン)の実装方法を紹介します。
(ボタンをクリックすると、実装したアニメーションが開始されます。)

テキストが左から右へ、ゆっくり/徐々に表示されます。
目次

HTML / CSS コード

ページを表示(更新)したときに、上記のアニメーションが実行されるコードです。
本実装例のように「ボタンを押したときにアニメーションを実行させる」場合はJavaScriptが必要です。

<div class="reveal-text">テキストが左から右へ、ゆっくり/徐々に表示されます。</div>
.reveal-text {
  animation: revealText 2s ease-out forwards;
  display: inline-block;
  color: white;
  font-weight: bold;
  background-color: orange;
}

@keyframes revealText {
  from {  
    clip-path: inset(0 100% 0 0);
  }  
  to {
    clip-path: inset(0 0 0 0);
  }  
}

【実装のポイント】アニメーション(animation) と キーフレーム(@keyframes)プロパティ

CSSのanimation@keyframesプロパティを用いることで、ページを表示したときなどのタイミングで簡単にアニメーションを設定することができます。

アニメーションプロパティ(animation)

animationプロパティは、アニメーションの持続時間、タイミング関数、遅延時間、反復回数などを設定するために使用されます。
このプロパティはショートハンドであり、複数のアニメーションプロパティを一度に指定できます。

アニメーションの基本構文と各プロパティ
animation: [name] [duration] [timing-function] [delay] [iteration-count] [direction] [fill-mode] [play-state];
duration

アニメーションが完了するまでの時間を指定

timing-function

アニメーションの進行速度を指定

delay

アニメーションが開始されるまでの遅延時間を指定

iteration-count

アニメーションが繰り返される回数を指定

direction

アニメーションの進行方向を指定

fill-mode

アニメーションが終了した後のスタイルを指定

play-state

アニメーションが再生中か停止しているかを指定

name

@keyframesで定義したアニメーションの名前

今回の実装例では、以下のように[name] [duration] [timing-function] [fill-mode]の4つを指定したアニメーションを、表示するテキスト要素にセットしています。

.reveal-text {
  animation: revealText 2s ease-out forwards;
  /*
    revealText: @keyframesを使って定義されたアニメーション名。
    2s: アニメーションを2秒かけて実施。
    ease-out: アニメーション開始時には速く、終了に向けて徐々に遅くなる。
    forwards: アニメーションが終了した後も、要素は最終状態(本実装例の場合はテキストが全て表示された状態)に留まる。
  */
}

キーフレームプロパティ(@keyframes)

@keyframesを使用すると、さまざまなステップでアニメーションのスタイルを指定できるようになります。

@keyframes animation-name {
  0% { /* 開始スタイル */ }
  100% { /* 終了スタイル */ }
}
アニメーションとキーフレームの使用例
@keyframes double {
  from { transform: scale(1); }
  to { transform: scale(2); }
}

.bigger {
  animation: double 1s ease-in-out forwards;
}

この例では、biggerクラスを持つ要素をホバーしたときに、その要素が1秒かけて元のサイズから2倍に大きくなります。ease-in-outはアニメーションの開始と終了がゆっくりになるタイミング関数で、forwardsはアニメーション終了後も最終状態(2倍に大きくなった状態)を保持します。

【実装のポイント】clip-pathプロパティ

clip-pathプロパティを使うことで、要素の表示領域を指定した形状にクリップ(切り抜き)できます。
これと前項のanimation@keyframesを併用することで、要素の左側から徐々に全体を表示するアニメーションを作成できます。

inset()関数について

clip-path: inset(); を使うと、要素の表示領域を内側に向かって切り取ることができます。
引数に、上・右・下・左の辺からの切り取る量を指定することで、要素の一部を非表示にし、残りの部分を表示します。

clip-path: inset(<top> <right> <bottom> <left> [round <border-radius>]);
top>, <right>, <bottom>, <left>

要素の各辺から切り取る量を指定。単位はピクセル(px)やパーセンテージ(%)など。

[round <border-radius>]:

切り取りの角を丸めるために使用。border-radius と同様の値を指定できます。

今回の実装例では、以下のように@keyframesと合わせて実装することで、左から右へと「スライドイン」するようなテキストやコンテンツが表示されるアニメーションを作成しています。

@keyframes revealText {
  /* アニメーションの開始時点 */
  from {  
    /* 要素の左から右への表示領域を0%にし、要素が完全に隠れるように設定。*/
    clip-path: inset(0 100% 0 0); /* 上, 右, 下, 左 */
  }
  /* アニメーションの終了時点 */
  to {
    /* 要素が全て表示されるように設定。
       要素が左から右へと表示されるようなアニメーションになる。 */
    clip-path: inset(0 0 0 0); /* 上, 右, 下, 左 */
  }
}

その他の目を惹くアニメーション

当サイトでは、関連するアニメーションとして以下のような実装方法も紹介しています。


当サイトで公開しているWebデザインやUIの実装例は、一覧として以下記事に纏めています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次