ブログのサイドバーに「今日の無駄知識」ウィジェットを追加してみた

HTML・CSS・JavaScriptだけで作る、タイピング表示付きのミニ機能

ブログに少し遊び心を入れたいと思って、サイドバーに「今日の無駄知識」という小さなウィジェットを追加しました。

ただ文章を表示するだけだと少し味気ないので、今回は

  • ランダムで内容を表示
  • タイピング風に1文字ずつ出す
  • ボタンで別の内容に切り替えられる

という、ちょっと動きのある形にしています。

しかも、使っているのは HTML・CSS・JavaScriptだけ です。
大げさなライブラリも不要なので、初心者でも仕組みを理解しやすいです。

この記事では、実際にサイドバーへ追加したウィジェットの構造を、できるだけ分かりやすく順番に解説します。


まず、今回作ったものは何か

今回追加したのは、ブログのサイドバーに置ける小さなボックスです。

表示の流れはこうです。

  1. ページが読み込まれる
  2. 「・・・解析中・・・」のような演出が出る
  3. ランダムな文章がタイピング風に表示される
  4. ボタンを押すと、別の内容が表示される

見た目はシンプルですが、ただのテキスト表示より少しだけ印象に残ります。
こういう小さな仕掛けは、ブログ全体の雰囲気づくりにも効きます。


全体の作り方

今回のコードは、大きく分けると3つです。

  • HTML:画面の土台
  • CSS:見た目の調整
  • JavaScript:ランダム表示やタイピング演出

初心者の方は、まず「この3つがそれぞれ別の役割を持っている」という理解だけで十分です。


1. HTMLでウィジェットの土台を作る

まずはHTMLです。

HTMLは、画面に何を置くかを決める部分です。
今回のウィジェットでは、主に次の要素を置いています。

  • タイトル
  • テキストを表示する箱
  • ボタン
  • 補足説明

たとえば、構造としてはこんなイメージです。

<div class="mudachishiki-widget">
<h2 class="mudachishiki-title">今日の無駄知識</h2> <div class="mudachishiki-box">
<p class="mudachishiki-text" id="js-mudachishiki-text">
<span id="js-typed-text"></span>
<span class="mudachishiki-cursor" id="js-cursor">|</span>
</p>
</div> <div class="mudachishiki-actions">
<button class="mudachishiki-button" id="js-mudachishiki-button">
別の無駄知識を見る
</button>
</div>
</div>

ここで大事なのは、classid の違いです。

classとは

class は、主にCSSで見た目を整えるために使います。
たとえば mudachishiki-title という class がついていれば、そのタイトル部分だけ文字を大きくしたり、色を変えたりできます。

idとは

id は、JavaScriptで「この要素を動かしたい」と指定するときによく使います。
たとえば id="js-typed-text" がついている部分に対して、JavaScriptから文字を1文字ずつ入れていく、ということができます。

つまり今回は、

  • class = 見た目のため
  • id = 動きを付けるため

という使い分けをしています。


2. CSSで見た目を整える

次はCSSです。

CSSは、HTMLで置いた要素を「どんな見た目にするか」を決める部分です。

今回のウィジェットでは、特に次の点を調整しています。

  • 全体の幅
  • 背景色
  • 枠線
  • 角丸
  • 文字サイズ
  • ボタンの見た目
  • スマホでの表示

ウィジェット全体のデザイン

たとえばこの部分です。

.mudachishiki-widget {
max-width: 680px;
margin: 40px auto;
padding: 24px;
border-radius: 20px;
background: linear-gradient(135deg, #fffaf0, #fff);
border: 1px solid #f0e2c7;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);
}

ここでは、ウィジェット全体の箱を整えています。

max-width

max-width は最大の横幅です。
画面が広くても必要以上に大きくなりすぎないようにしています。

margin

margin: 40px auto; は、上下に余白を作りつつ、左右は中央寄せにする指定です。

padding

padding は、箱の内側の余白です。
文字が枠ギリギリにくっつかないようにしています。

border-radius

角を丸くして、少し柔らかい印象にしています。

background

背景に単色ではなく、薄いグラデーションを入れています。
これだけでも、見た目が少し整って見えます。

box-shadow

影をつけて、少しだけ浮いているように見せています。


タイトルや本文の文字サイズ

文字サイズを変えたいときは、ここを調整します。

.mudachishiki-title {
font-size: 28px;
}.mudachishiki-text {
font-size: 22px;
}
  • mudachishiki-title はタイトル
  • mudachishiki-text は本文

以前も触れましたが、サイドバーに入れる場合は少し小さめの方が収まりが良いです。
その場合は、たとえば次のように変更します。

.mudachishiki-title {
font-size: 22px;
}.mudachishiki-text {
font-size: 18px;
}

こういう数字を少しずつ変えながら、見やすいバランスを探すのが基本です。


スマホ用の調整

PCではちょうど良くても、スマホでは大きすぎることがあります。
そこで使うのが @media です。

@media (max-width: 640px) {
.mudachishiki-text {
font-size: 18px;
}
}

これは「画面幅が640px以下のときだけ、この設定を使う」という意味です。

つまり、

  • PCでは通常サイズ
  • スマホでは少し小さめ

という切り替えができます。

初心者のうちは、まず通常版を作ってから、最後にスマホ調整を足す のが分かりやすいです。


3. JavaScriptで動きをつける

ここが今回の一番面白い部分です。

JavaScriptでは、主に次の処理をしています。

  • 表示する文章の候補を用意する
  • ランダムで1つ選ぶ
  • タイピング風に1文字ずつ表示する
  • ボタンを押したら再抽選する
  • 同じ内容が連続しにくくする

順番に見ていきます。


文章データを配列で持つ

まずは表示したい文章をまとめておきます。

const uselessFacts = [
"タコに骨はないが、歯はある。",
"エビの心臓は頭にある。",
"クラゲには脳がない。"
];

このように、複数の文字列をひとまとめにするのが 配列 です。

配列は、初心者が最初につまずきやすいですが、考え方は単純です。
「選択肢を箱の中に順番に入れておく」くらいのイメージで大丈夫です。

今回はこの中からランダムに1つ取り出します。


HTMLの要素をJavaScriptで取得する

次に、HTML側の要素をJavaScriptで操作できるようにします。

const typedTextEl = document.getElementById("js-typed-text");
const buttonEl = document.getElementById("js-mudachishiki-button");
const cursorEl = document.getElementById("js-cursor");

ここでは、HTMLで id を付けておいた要素を取得しています。

たとえば typedTextEl は、文字を実際に表示する場所です。

このようにしておくと、JavaScriptから

  • 文字を書き換える
  • ボタンを無効化する
  • カーソルを表示/非表示にする

といった操作ができます。


ランダムで1件選ぶ

ランダム表示は、次のような関数で行います。

function getRandomFact() {
const index = Math.floor(Math.random() * uselessFacts.length);
return uselessFacts[index];
}

ここは初心者向けにかなり大事です。

Math.random()

Math.random() は、0以上1未満のランダムな数字を作ります。

uselessFacts.length

length は、配列の要素数です。
たとえば3個入っていれば 3 になります。

Math.floor()

Math.floor() は、小数点以下を切り捨てます。

つまりこの1行で、

  • 配列の範囲内で
  • ランダムな番号を作り
  • その番号の文章を返す

ということをしています。


タイピング風に表示する

今回のウィジェットの核になるのがここです。

function typeText(text) {
let i = 0; const timer = setInterval(() => {
typedTextEl.textContent = text.slice(0, i + 1);
i++; if (i >= text.length) {
clearInterval(timer);
}
}, 45);
}

ここは初心者には少し難しく見えるかもしれませんが、やっていることは単純です。

text.slice(0, i + 1)

これは「最初の1文字、次は2文字、次は3文字」というように、少しずつ文字を取り出す処理です。

setInterval()

これは「一定時間ごとに何度も処理を実行する」機能です。

今回なら、45ミリ秒ごとに1文字ずつ増やしています。

clearInterval()

最後まで表示したら、繰り返しを止めます。
これをしないと、ずっと処理が回り続けてしまいます。

つまりこの関数は、

  1. 文字数を0からスタート
  2. 少しずつ増やす
  3. そのたびに表示を更新する
  4. 最後まで行ったら止める

という流れです。

これでタイピング風の表示になります。


「解析中」の演出を入れる

いきなり文字が出るより、少し待たせた方が「何か処理している感」が出ます。

そこで使っているのが setTimeout() です。

function showRandomFact() {
typedTextEl.textContent = "・・・解析中・・・"; setTimeout(() => {
const fact = getRandomFact();
typeText(fact);
}, 800);
}

setTimeout()

これは「一定時間後に1回だけ処理を実行する」機能です。

今回は 800 ミリ秒、つまり 0.8 秒後に本当の文章を表示しています。

この少しの待ち時間だけでも、単なる表示より印象が変わります。


ボタンを押したら再表示する

ボタンに動きを付けるには、イベントを使います。

buttonEl.addEventListener("click", showRandomFact);

これは「ボタンがクリックされたら showRandomFact() を実行する」という意味です。

JavaScriptではこの addEventListener がとてもよく出てきます。

最初は難しそうに見えますが、まずは

  • "click" = クリックされたら
  • showRandomFact = この処理を動かす

と覚えてしまって大丈夫です。


連打防止も入れておく

タイピング中に何度もボタンを押されると、表示が崩れることがあります。
そのため、処理中はボタンを無効にしておくのが安全です。

buttonEl.disabled = true;

完了したら再び有効にします。

buttonEl.disabled = false;

こういう小さな制御があると、見た目以上に「ちゃんとしたウィジェット」になります。


サイドバーに追加して感じたこと

今回のウィジェットは、見た目も処理も比較的シンプルです。
それでも、ブログにこういう小さい動きを入れるだけで、かなり印象が変わります。

特にサイドバーは、放っておくと

  • プロフィール
  • カテゴリ一覧
  • 最近の記事
  • 広告

のように、情報が並ぶだけになりがちです。

そこに、少し遊べる・少し見たくなる要素があると、ブログ全体の空気が少し柔らかくなります。

しかも今回のような実装なら、難しい環境構築も不要です。
HTML・CSS・JavaScriptが少し分かれば、自分でカスタマイズもできます。


初心者向けに覚えておくと良いこと

今回のコードで、初心者が特に押さえておくと良いポイントはこの4つです。

1. HTMLは土台

何を表示するかを決める

2. CSSは見た目

サイズ、余白、色、枠線を整える

3. JavaScriptは動き

ランダム表示やタイピング演出を付ける

4. idとclassを使い分ける

  • class は見た目向け
  • id はJavaScript操作向け

この4つが理解できると、今回のような小さなウィジェットはかなり作りやすくなります。


まとめ

今回は、ブログのサイドバーに「今日の無駄知識」ウィジェットを追加した話を書きました。

やっていること自体はそこまで難しくありません。

  • HTMLで箱を作る
  • CSSで整える
  • JavaScriptでランダム表示とタイピング演出を入れる

これだけです。

でも、この「これだけ」の積み重ねが、ブログの見た目や滞在感を少しずつ良くしてくれます。

大きな機能をいきなり作るのは大変でも、こういう小さいウィジェットなら試しやすいです。
初心者の方がフロントエンドに慣れる練習としても、かなりちょうど良い題材だと思います。

おすすめの記事