第2章-2節: HTMLとCSSだけで作ろう!基本のツールチップ

前のページでは、ツールチップがどんなものか、その魅力とちょっとした注意点について学んだね。

今回は、いよいよ実際にツールチップ作りに挑戦だ! プログラミング言語のJavaScriptを使わなくても、ウェブページの骨組みを作るHTMLと、見た目を整えるCSSだけで、シンプルなツールチップが作れちゃうんだ。さっそく、その方法を見ていこう!

🧱 ステップ1: HTMLで骨組みを作ろう

まず、ツールチップを表示させたい元のテキスト(これを「トリガー要素」と呼ぼう)と、ツールチップとして表示する説明文(これを「ツールチップテキスト」と呼ぼう)を用意するよ。

HTMLでは、トリガー要素の中に、ツールチップテキストを配置するのが一般的なんだ。例えば、こんな感じにするよ。

<p>
  これは普通の文章です。ここに
  <span class="tooltip-trigger-css">マウスを乗せてみてね!
    <span class="tooltip-text-css">これがツールチップの内容だよ!HTMLとCSSだけで作れるんだ。</span>
  </span>
  というテキストがあります。
</p>

解説するね!

  • <span class="tooltip-trigger-css">: これがトリガー要素。この部分にマウスカーソルが乗ると、ツールチップが表示されるようにするよ。class="tooltip-trigger-css" というのは、後でCSSで「この要素はツールチップのトリガーだよ」と指定するための目印だ。
  • <span class="tooltip-text-css">: これがツールチップテキスト。トリガー要素の中に書かれているね。class="tooltip-text-css" も、CSSで見た目や動きを指定するための目印だよ。

<span> タグは、主に文章の一部分にスタイルを適用したり、グループ化したりするときに使う、特に意味を持たないインライン要素だよ。ここでは、トリガーとツールチップテキストをうまく扱うために使っているんだ。

🎨 ステップ2: CSSで見た目を魔法のように変えよう!

HTMLで骨組みができたら、次はCSSの出番だ! CSSを使って、ツールチップテキストを普段は隠しておいて、トリガー要素にマウスが乗った時だけ、カッコよく表示されるようにしよう。

1. ツールチップテキストの基本スタイル

まずは、ツールチップテキスト自体の見た目を整えるよ。背景色、文字色、余白(パディング)、角の丸み(ボーダーラディウス)などを指定するんだ。

.tooltip-text-css {
  background-color: #333;  /* 背景は濃いグレー */
  color: #fff;         /* 文字は白 */
  padding: 8px 10px;    /* 内側の余白 */
  border-radius: 6px;   /* 角を少し丸く */
  font-size: 0.9em;     /* 少し小さめの文字 */
  text-align: center;    /* 文字を中央揃え */
  width: 160px;       /* 幅を固定 (例) */
}

2. positionプロパティで配置の魔法!

ツールチップテキストをトリガー要素の近くに表示させるには、CSSのpositionプロパティが鍵になるよ。

  • トリガー要素 (.tooltip-trigger-css) に position: relative; を指定する。これは「私が基準点ですよ!」と宣言するようなもの。
  • ツールチップテキスト (.tooltip-text-css) に position: absolute; を指定する。これは「私は親戚の基準点(この場合は.tooltip-trigger-css)を元に位置を決めます!」という意味。

こうすることで、ツールチップテキストは、親要素であるトリガー要素を基準にして、top, bottom, left, rightプロパティで好きな位置に配置できるようになるんだ。

PositionのCanvas図解

例えば、トリガー要素の上に表示したい場合は、bottom: 130%; (親要素の下辺から130%上の位置) と left: 50%; margin-left: -80px; (親要素の左右中央) のように指定するよ。margin-left: -80px; は、ツールチップテキストの幅(160px)の半分を左にずらして、きれいに中央揃えするためのテクニックだ。

.tooltip-trigger-css {
  position: relative;
  display: inline-block; /* position:relativeと一緒に使うことが多い */
}
.tooltip-text-css {
  /* (さっきの基本スタイルに加えて...) */
  position: absolute;
  z-index: 10;            /* 他の要素より手前に表示 */
  bottom: 130%;         /* 親要素の上側に配置 */
  left: 50%;
  margin-left: -80px;      /* 幅(160px)の半分だけ左にずらす */
}

3. :hoverで現れろ!表示・非表示の魔法

いよいよ、マウスが乗った時だけツールチップテキストを表示させる魔法だよ!これはCSSの「疑似クラス」という機能の中の :hover を使うと簡単にできるんだ。

まず、普段はツールチップテキストを隠しておく。これには、visibility: hidden;(見えなくする)とopacity: 0;(完全に透明にする)を指定するよ。

そして、トリガー要素 (.tooltip-trigger-css) にマウスが乗った時 (:hover) に、その中にあるツールチップテキスト (.tooltip-text-css) のスタイルを visibility: visible;opacity: 1; に変えるんだ。

さらに、transitionプロパティを指定しておくと、opacity(透明度)がゆっくり変わって、フワッと表示されるアニメーション効果もつけられるよ!

.tooltip-text-css {
  /* (基本スタイルとpositionスタイルに加えて...) */
  visibility: hidden; /* 最初は隠す */
  opacity: 0;      /* 最初は透明 */
  transition: opacity 0.3s ease, visibility 0.3s ease; /* 0.3秒かけてフワッと変化 */
}

.tooltip-trigger-css:hover .tooltip-text-css { /* トリガーにホバーした時、その中のツールチップテキストは... */
  visibility: visible; /* 見えるようにする */
  opacity: 1;      /* 不透明にする */
}

display: none;display: block; で表示・非表示を切り替える方法もあるけど、displayプロパティはtransitionアニメーションが効かないんだ。だから、フワッとした効果をつけたい場合は visibilityopacity の組み合わせがおすすめだよ。

4. 職人技!CSSで吹き出しの「矢印」を作ろう

ツールチップがただの四角い箱だとちょっと味気ないよね。そこで、吹き出しによくある「矢印」(しっぽみたいな部分)もCSSだけで作ってみよう!これには「疑似要素」の ::after (または ::before) と、borderプロパティのちょっとしたテクニックを使うよ。

考え方はこうだ。

  1. ::after を使って、ツールチップテキストにくっついた「空っぽの小さな箱」を作る。
  2. その箱のボーダー(枠線)だけを使って三角形を作るんだ。例えば、上向きの三角形を作りたいなら、下ボーダーだけ色をつけて、左右のボーダーは透明にし、上ボーダーは幅0にするんだ。不思議だけど、こうすると三角形ができる!
  3. できた三角形を、ツールチップ本体のちょうどいい位置に配置する。
矢印作成のCanvas図解
.tooltip-text-css::after { /* ツールチップテキストの後に「何か」を追加 */
  content: "";            /* 疑似要素には必須。中身は空でOK */
  position: absolute;  /* ツールチップテキストを基準に配置 */
  top: 100%;          /* ツールチップ本体の下にくっつける */
  left: 50%;           /* 左右中央 */
  margin-left: -5px;     /* 矢印の幅(10px)の半分だけ左にずらす */
  border-width: 5px;       /* ボーダーの太さを5pxに */
  border-style: solid;
  border-color: #333 transparent transparent transparent; /* 上だけ色を付けて他は透明 = 下向き矢印 */
}

この例では、border-colorの順番が「上 右 下 左」に対応していて、#333 transparent transparent transparent は「上ボーダーだけ色をつけ、右・下・左ボーダーは透明」という意味になるんだ。これで、ツールチップ本体の下側に、下を向いた小さな三角形ができるよ。

やってみよう!HTMLとCSSを合体!

さあ、これまでに説明したHTMLとCSSを全部組み合わせると、こんな感じのツールチップができるよ!下のテキストにマウスを乗せてみてね。

このサイトでは HTMLHyperText Markup Language の略だよ。ウェブページの骨組みを作るんだ。CSSCascading Style Sheets の略!ウェブページの見た目をデザインするよ。 を使って、 クールなツールチップこれは右側に出るツールチップのサンプルだよ!CSSだけでこんなこともできる! を作る方法を学ぶよ!

実際に使ったHTMLとCSSの全コードはこうなっているよ。このコードをコピーして、自分のパソコンで試してみるのもいいね!

HTMLコード:

<p>
  このサイトでは <span class="tooltip-trigger-css">HTML
    <span class="tooltip-text-css">HyperText Markup Language の略だよ。ウェブページの骨組みを作るんだ。</span>
  </span> や
  <span class="tooltip-trigger-css">CSS
    <span class="tooltip-text-css">Cascading Style Sheets の略!ウェブページの見た目をデザインするよ。</span>
  </span> を使って、
  <span class="tooltip-trigger-right">クールなツールチップ
    <span class="tooltip-text-right">これは右側に出るツールチップのサンプルだよ!CSSだけでこんなこともできる!</span>
  </span> を作る方法を学ぶよ!
</p>

CSSコード:

/* 上側に表示されるツールチップ */
.tooltip-trigger-css {
  position: relative;
  display: inline-block;
  border-bottom: 1px dashed #3498db;
  cursor: help;
}
.tooltip-text-css {
  visibility: hidden;
  opacity: 0;
  width: 160px;
  background-color: #333;
  color: #fff;
  text-align: center;
  border-radius: 6px;
  padding: 8px 10px;
  font-size: 0.9em;
  line-height: 1.4;
  position: absolute;
  z-index: 10;
  bottom: 130%;
  left: 50%;
  margin-left: -80px;
  transition: opacity 0.3s ease, visibility 0.3s ease;
}
.tooltip-text-css::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 50%;
  margin-left: -5px;
  border-width: 5px;
  border-style: solid;
  border-color: #333 transparent transparent transparent;
}
.tooltip-trigger-css:hover .tooltip-text-css {
  visibility: visible;
  opacity: 1;
}

/* 右側に表示されるツールチップ */
.tooltip-trigger-right {
  position: relative;
  display: inline-block;
  border-bottom: 1px dashed #e67e22;
  cursor: help;
}
.tooltip-text-right {
  visibility: hidden; opacity: 0;
  width: 150px; background-color: #c0392b; color: #fff;
  text-align: center; border-radius: 6px; padding: 8px 10px; font-size: 0.9em; line-height: 1.4;
  position: absolute; z-index: 10;
  top: 50%;
  left: 110%;
  transform: translateY(-50%);
  transition: opacity 0.3s ease, visibility 0.3s ease;
}
.tooltip-text-right::before {
  content: ""; position: absolute;
  top: 50%; right: 100%;
  margin-top: -5px;
  border-width: 5px; border-style: solid;
  border-color: transparent #c0392b transparent transparent;
}
.tooltip-trigger-right:hover .tooltip-text-right {
  visibility: visible; opacity: 1;
}

デモでは、上に出るツールチップと右に出るツールチップの2種類を作ってみたよ。矢印の向きや配置を変えるだけで、色々なバリエーションが作れるんだ!

🇬🇧英語の豆知識コーナー

CSSの便利な機能に関連する英単語だよ!

  • Pseudo-class

    意味:疑似クラス(例: :hover, :focus, :nth-child() など)

    Original: The :hover pseudo-class is used to select elements when you mouse over them.

    意訳::hover 疑似クラスは、要素の上にマウスカーソルを置いたときにその要素を選択するために使用されます。

  • Pseudo-element

    意味:疑似要素(例: ::before, ::after, ::first-line など)

    Original: You can use the ::after pseudo-element to add an arrow to the tooltip.

    意訳:::after 疑似要素を使って、ツールチップに矢印を追加できます。

  • Positioning

    意味:配置、位置決め

    Original: CSS offers various properties for element positioning, like 'relative' and 'absolute'.

    意訳:CSSは、「relative」や「absolute」のように、要素の配置のための様々なプロパティを提供しています。

  • Transition

    意味:遷移、移り変わり、トランジション(CSSではアニメーション効果)

    Original: Adding a CSS transition makes the tooltip appear smoothly.

    意訳:CSSトランジションを追加すると、ツールチップがスムーズに表示されるようになります。

まとめ

今回は、HTMLとCSSだけで作る基本的なツールチップの方法を、ステップごとに見てきたね!

  • HTMLでトリガー要素とツールチップテキストの骨組みを作る。
  • CSSのpositionで配置し、:hovervisibility/opacityで表示・非表示をコントロール。
  • transitionでフワッとしたアニメーション効果も!
  • 疑似要素とborderテクニックで、吹き出しの矢印も作れたね。

HTMLとCSSだけでも、こんなにインタラクティブなものが作れるなんて、面白いよね!

でも、もっと複雑なツールチップや、マウス操作以外(例えばクリック)で表示したい場合、あるいはツールチップの内容を動的に変えたい場合は、やっぱりJavaScriptの力が必要になってくるんだ。

次のページでは、JavaScriptを使って、もっとできることを広げたツールチップ作りに挑戦してみよう!