(Sample)

「Webページに話しかけるような演出を加えたい!」「文字が一文字ずつ表示されるようなアニメーションが欲しい!」
そんな願いを叶えてくれるのが、今回ご紹介する “吹き出し × タイプライター効果” のコンビネーションです。

HTML、CSS、JavaScriptの基本スキルを活かして、簡単でインパクトのあるUI表現を作ってみましょう!


今回実装していることの概要

  • 吹き出しのデザイン:CSSで丸みを帯びたボックスと三角形(しっぽ)を作成
  • タイプライター効果:JavaScriptで1文字ずつテキストを表示
  • キャレットアニメーション:CSSアニメーションで点滅カーソルを演出

これらを組み合わせることで、まるで会話しているような体験を提供できます。


HTML構造を確認しよう

<div class="speech-bubble">
  <span id="text" class="typing"></span>
</div>

  • 吹き出しの枠:.speech-bubble
  • 表示される文字:#textにJavaScriptで1文字ずつ追加

CSSのポイント解説

吹き出しのスタイル

.speech-bubble {
  background: #00b900;
  border-radius: 0.4em;
  padding: 20px;
  color: white;
  ...
}

  • 緑の背景色(#00b900)に白文字
  • border-radiusで丸みを帯びた四角形に
  • .speech-bubble:after で下にしっぽをつけて“吹き出し”の形に

タイプライター風のカーソル

.typing {
  border-right: 0.15em solid orange;
  animation: caret 1s steps(1) infinite;
}

  • border-rightで縦線カーソル風に
  • animationで点滅(透明 → オレンジ → 透明…)

JavaScriptでタイプライター演出!

const text = "こんにちは!これはタイプライター効果の吹き出しです。";
let i = 0;

function typeWriter() {
  if (i < text.length) {
    document.getElementById("text").innerHTML += text.charAt(i);
    i++;
    setTimeout(typeWriter, 100); // 100ミリ秒ごとに1文字表示
  }
}

  • text.charAt(i)で1文字ずつ取り出して追加
  • setTimeout()を使って非同期的に呼び出し → ゆっくり打ってる感じを再現

もっと応用したいなら?

以下の機能を加えることで、さらにリッチな体験が可能になります:

応用例内容
複数の吹き出しを順番に表示会話風に進行させる(配列+ループ)
クリックやキー操作で進めるユーザー操作と連携
音を鳴らす1文字ごとに「カタカタ」音を出すと臨場感UP
文字スキップ機能長文の途中でも一括表示切り替えができるようにする
改行やHTMLタグの対応innerTextでなくinnerHTMLを使って改行などに対応

よくある質問(FAQ)

Q. 表示が速すぎる or 遅すぎる場合は?

setTimeout(typeWriter, 100);

この 100 の値を調整してください。数字が小さいほど速くなります。


Q. 文字が重複して表示されることがある?

JavaScriptが複数回走っていないか、またはページが二重に読み込まれていないか確認しましょう。
開発中はconsole.log()で関数の呼び出し回数を確認するのもおすすめです。


最後に:この演出、どんな場面で使える?

シーン使用例
学習教材クイズの出題・ヒント
ゲームUIキャラクターのセリフ
エラー説明エラー発生時のわかりやすいガイド
ポップな説明初回チュートリアルやガイドツアー

今後の学びのステップ

  1. 配列とループを使って複数の吹き出しを順に表示する
  2. async/awaitで時間制御をより綺麗に書く
  3. CSS変数を使って色や速度をカスタマイズしやすくする
  4. クラス化・モジュール化で再利用しやすくする

「ただの文字表示」から一歩踏み出して、物語のようなWeb体験をつくってみましょう!