動くテキスト

1文字ずつ出現するタイピングアニメーション

CSSで作る!1文字ずつ出現するタイピングアニメーション

See the Pen Untitled by チータツ (@cheese_fuji) on CodePen.

Rerundをクリックで再アニメーション↑

使用するテキストやフォントによって多少の調整が必要です。(編集箇所は後述

CSSの解説

このアニメーションの構成要素は2つ。widthを使って1文字分ずつ幅を増やす動きと、borderの点滅です。

  • アニメーションさせたい要素(クラス)の調整
    • widthを文字数分の幅に調整(emやchが便利)
    • border-rightでカーソルを作る
    • over-flow: hiddenで範囲外の文字を非表示に
  • keyframesで「1文字ずつ出現するアニメーション」を作成
    • 初期状態0%時点でwidth: 0
    • 100%時点でwidth: 文字数
  • keyframesで「カーソルの点滅アニメーション」を作成
    • 0%、100%時点で透明状態 border-color: transparent;
    • 50%時点で表示 border-color: 色;
  • 要素(クラス)にanimationプロパティを付与
    • " , " で分けて2つのアニメーションを指定
    • 「1文字ずつ出現する」はstep()を使って文字数分だけ分割、forwardsで終了時の状態を維持
    • 「カーソルの点滅」は1s単位、step-endでコマ送り、inifiniteでループさせる

CSS使用時の変更点

このCSSは使用するテキストなどに応じていくつかの変更が必要です。

/***タイピングアニメーションを追加***/
.typewriter{
  border-right: 0.08em solid black; /*カーソル用の線*/
  overflow: hidden; /*はみ出た要素を非表示に*/
  white-space: nowrap; /*1行に*/
  animation: typing 4s steps(11, end) forwards, cursol 1s step-end infinite;
/*animation: アニメーション名|時間|分割数|ループ */
}

/*** 1文字ずつ出現するアニメーション ***/
@keyframes typing{
  0% { width: 0%; }
  100% { width: 11em; }
}

/*** カーソルが点滅するアニメーション ***/
@keyframes cursol{
  0%{ border-color: transparent; }/*消滅*/
  50%{ border-color: black; } /*出現*/
  100%{ border-color: transparent; }/*消滅*/
}
  • 7行目:animationプロパティのsteps(n, end)の n を文字数に変更
  • 7行目:テキストの長さや好みなどに応じて、時間animation-durationを調整
  • 14行目:widthを文字数と同じ幅に変更する
  • 20行目:border-colorを好きな色に(点滅するカーソルの色)

幅を指定する単位は em がおすすめですが、emが合わない場合はchなどの使用も検討してみてください。

参考:CSSでサイズ指定に使う7つの単位の意味と違い