ライブデモ Live Demo

ホバー時に表示されるツールチップ。上下左右の位置を指定でき、フェードインアニメーションが適用されます。

A tooltip that appears on hover. Can be positioned top, bottom, left, or right with fade-in animation.

各項目にカーソルを合わせるとツールチップが表示されます。

Hover over each item to see the tooltip.

Top Tooltip on top
Bottom Tooltip on bottom
Left Tooltip on left
Right Tooltip on right
200ms

AI向け説明 AI Description

ホバー時に表示されるツールチップ。トリガー要素に`position: relative`を設定し、ツールチップに`position: absolute`を設定します。位置は`data-position`属性で指定し、`transform`と`translate`で配置します。矢印は`::after`疑似要素で実装し、`border`で三角形を作成します。フェードインアニメーションは`opacity`と`transform`で実装します。CSS変数(`--tooltip-duration`、`--tooltip-bg`、`--tooltip-text`)を使用して、アニメーション速度やスタイルをカスタマイズできます。

A tooltip that appears on hover. Set `position: relative` on the trigger element and `position: absolute` on the tooltip. Position is specified with `data-position` attribute, using `transform` and `translate` for placement. Arrow is implemented with `::after` pseudo-element, creating a triangle with `border`. Fade-in animation is implemented with `opacity` and `transform`. Use CSS variables (`--tooltip-duration`, `--tooltip-bg`, `--tooltip-text`) to customize animation speed and styling.

調整可能パラメータ Adjustable Parameters

実装 Implementation

HTML + CSS + JS

<div class="tooltip-trigger" data-position="top">
  Hover me
  <span class="tooltip">Tooltip text</span>
</div>

<style>
:root {
  --tooltip-duration: 0.2s;
  --tooltip-bg: #1a1d3a;
  --tooltip-text: #f5f6ff;
}

.tooltip-trigger {
  position: relative;
  display: inline-block;
}

.tooltip {
  position: absolute;
  padding: 8px 12px;
  background: var(--tooltip-bg);
  color: var(--tooltip-text);
  border-radius: 6px;
  font-size: 12px;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transform: translateY(-4px);
  transition: opacity var(--tooltip-duration) ease, transform var(--tooltip-duration) ease;
  z-index: 1000;
}

.tooltip-trigger[data-position="top"] .tooltip {
  bottom: calc(100% + 8px);
  left: 50%;
  transform: translateX(-50%) translateY(4px);
}

.tooltip-trigger[data-position="top"]:hover .tooltip {
  transform: translateX(-50%) translateY(0);
}

.tooltip-trigger:hover .tooltip {
  opacity: 1;
}

.tooltip::after {
  content: "";
  position: absolute;
  width: 0;
  height: 0;
  border: 5px solid transparent;
  border-top-color: var(--tooltip-bg);
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
}
</style>

<script>
// CSS変数を動的に変更する例
document.documentElement.style.setProperty("--tooltip-duration", "0.3s");
document.documentElement.style.setProperty("--tooltip-bg", "#5c6ac4");
</script>

React (JSX + CSS)

// react/I-004.jsx
import { useState } from "react";
import "./I-004.css";

export default function Tooltip({ 
  children, 
  content, 
  position = "top",
  duration = "0.2s",
  bgColor = "#1a1d3a"
}) {
  const [isVisible, setIsVisible] = useState(false);

  return (
    <div
      className="tooltip-trigger"
      data-position={position}
      style={{
        "--tooltip-duration": duration,
        "--tooltip-bg": bgColor
      }}
      onMouseEnter={() => setIsVisible(true)}
      onMouseLeave={() => setIsVisible(false)}
    >
      {children}
      {isVisible && (
        <span className="tooltip">{content}</span>
      )}
    </div>
  );
}
/* react/I-004.css */
:root {
  --tooltip-duration: 0.2s;
  --tooltip-bg: #1a1d3a;
  --tooltip-text: #f5f6ff;
}

.tooltip-trigger {
  position: relative;
  display: inline-block;
}

.tooltip {
  position: absolute;
  padding: 8px 12px;
  background: var(--tooltip-bg);
  color: var(--tooltip-text);
  border-radius: 6px;
  font-size: 12px;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transform: translateY(-4px);
  transition: opacity var(--tooltip-duration) ease, transform var(--tooltip-duration) ease;
  z-index: 1000;
}

.tooltip-trigger[data-position="top"] .tooltip {
  bottom: calc(100% + 8px);
  left: 50%;
  transform: translateX(-50%) translateY(4px);
}

.tooltip-trigger[data-position="top"]:hover .tooltip {
  transform: translateX(-50%) translateY(0);
}

.tooltip-trigger:hover .tooltip {
  opacity: 1;
}

.tooltip::after {
  content: "";
  position: absolute;
  width: 0;
  height: 0;
  border: 5px solid transparent;
  border-top-color: var(--tooltip-bg);
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
}

AIへの指示テンプレート AI Prompt Template

以下のテンプレートをコピーしてAIアシスタントに貼り付けると、このパターンの実装を依頼できます。 Copy the template below and paste it into your AI assistant to request an implementation of this pattern.