JSなしで実装!
CSSだけで動くツールチップ&ポップオーバー

UI/UXCSS実装

「この言葉の意味は?」「このボタンを押すとどうなる?」——ユーザーのそんな小さな疑問に応えるのが、ツールチップとポップオーバーです。
JSライブラリに頼らなくても、CSSだけで美しく動くツールチップとポップオーバーを実装できます。

1. 基本のツールチップ(上方向)

ボタンやアイコンにカーソルを乗せると、上にフワッと説明文が表示されるパターン。ホバーしてみてください。

入力内容を送信します
この操作は取り消せません
HTML
<div class="tooltip-wrap">
    <button class="tooltip-btn">送信する</button>
    <div class="tooltip">入力内容を送信します</div>
</div>
<div class="tooltip-wrap">
    <button class="tooltip-btn" style="background:var(--color-text-dark)">削除する</button>
    <div class="tooltip">この操作は取り消せません</div>
</div>
CSS
/* ===== ベースのレイアウト(デザインに合わせて調整してください) ===== */
.tooltip-btn {
    /* 本体のスタイル */
}

/* ===== 動作のアニメーション ===== */
.tooltip-wrap { position: relative; display: inline-block; }

.tooltip {
    position: absolute;
    bottom: calc(100% + 8px);
    left: 50%;
    transform: translateX(-50%) translateY(4px);
    background: #1A1A1A;
    color: #fff;
    font-size: 0.75rem;
    padding: 6px 12px;
    border-radius: 6px;
    white-space: nowrap;
    opacity: 0;
    visibility: hidden;
    transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

/* 三角形の矢印 */
.tooltip::after {
    content: '';
    position: absolute;
    top: 100%;
    left: 50%;
    transform: translateX(-50%);
    border: 5px solid transparent;
    border-top-color: #1A1A1A;
}

.tooltip-wrap:hover .tooltip {
    opacity: 1;
    visibility: visible;
    transform: translateX(-50%) translateY(0);
}

2. data属性を使った軽量ツールチップ

テキスト内の特定の単語にツールチップを付けたい場合、HTMLの data-tip 属性とCSSの ::after 擬似要素だけで実装できます。

Web制作ではSEOLCPの最適化が重要です。

HTML
<p>Web制作では<span data-tip="Search Engine Optimization:検索エンジン最適化">SEO</span>と<span data-tip="Largest Contentful Paint:最大コンテンツの描画">LCP</span>の最適化が重要です。</p>
CSS
/* HTML: <span data-tip="説明文">用語</span> */

[data-tip] {
    position: relative;
    cursor: help;
    border-bottom: 1px dashed #9A9794;
}

[data-tip]::after {
    content: attr(data-tip);
    position: absolute;
    bottom: calc(100% + 6px);
    left: 50%;
    transform: translateX(-50%) translateY(4px);
    background: #1A1A1A;
    color: #fff;
    font-size: 0.7rem;
    padding: 4px 10px;
    border-radius: 4px;
    white-space: nowrap;
    opacity: 0;
    transition: all 0.2s;
}

[data-tip]:hover::after {
    opacity: 1;
    transform: translateX(-50%) translateY(0);
}

3. ポップオーバー(:focus-within)

クリックで開く、カード型の情報表示。:focus-within を使えばJSなしで実装できます。下のボタンをクリックしてみてください。

Web制作プラン

企画〜デザイン〜実装まで一貫対応。ブランドの「伝わる」を最大化するWebサイトを制作します。

HTML
<div class="popover-wrap">
    <button class="popover-trigger" tabindex="0">詳しく見る ▾</button>
    <div class="popover">
        <p class="popover__title">Web制作プラン</p>
        <p class="popover__text">企画〜デザイン〜実装まで一貫対応。ブランドの「伝わる」を最大化するWebサイトを制作します。</p>
        <button class="popover__btn">お問い合わせ</button>
    </div>
</div>
CSS
/* ===== ベースのレイアウト(デザインに合わせて調整してください) ===== */
.popover__btn {
    /* 本体のスタイル */
}
.popover-trigger {
    /* 本体のスタイル */
}
.popover__title {
    /* 本体のスタイル */
}
.popover__text {
    /* 本体のスタイル */
}

/* ===== 動作のアニメーション ===== */
.popover-wrap { position: relative; }

.popover {
    position: absolute;
    top: calc(100% + 12px);
    left: 50%;
    transform: translateX(-50%) scale(0.95);
    background: #fff;
    border: 1px solid #EAEAEA;
    border-radius: 12px;
    padding: 16px;
    width: 240px;
    box-shadow: 0 8px 30px rgba(0,0,0,0.08);
    opacity: 0;
    visibility: hidden;
    transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
}

/* :focus-within で開閉制御 */
.popover-wrap:focus-within .popover {
    opacity: 1;
    visibility: visible;
    transform: translateX(-50%) scale(1);
}
💡 ポイント::focus-within はコンテナ内のいずれかの要素がフォーカスを持っている時に適用されます。ボタンに tabindex="0" を追加するのを忘れずに。

まとめ

💡 ツタワルの制作では:「ユーザーが迷わない」UI設計を徹底しています。ツールチップやポップオーバーは、情報過多を避けつつ必要な情報を届けるための重要なパーツです。

Contact

伝わるまで、何度でも。

あなたのブランドの「言葉」と「形」を、一緒に見つけませんか?
些細なご相談でも、まずはお気軽にお話ししましょう。