(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 | キャラクターのセリフ |
エラー説明 | エラー発生時のわかりやすいガイド |
ポップな説明 | 初回チュートリアルやガイドツアー |
今後の学びのステップ
- 配列とループを使って複数の吹き出しを順に表示する
async/await
で時間制御をより綺麗に書く- CSS変数を使って色や速度をカスタマイズしやすくする
- クラス化・モジュール化で再利用しやすくする
「ただの文字表示」から一歩踏み出して、物語のようなWeb体験をつくってみましょう!