オーバーレイ · 準拠済み
Tooltip
TooltipTooltipPlacementTooltipPropsTooltipVariant
Tooltip
Shows on hover or keyboard focus of its anchor and hides on leave or blur, with no wiring beyond an `anchorRef`.
import { useRef } from 'react'
import { Icon, IconButton, Surface, Text, Tooltip } from '@language-lit/material3-expressive'
export function TooltipExample() {
const plainAnchorRef = useRef<HTMLButtonElement>(null)
const richAnchorRef = useRef<HTMLButtonElement>(null)
const startAnchorRef = useRef<HTMLButtonElement>(null)
const endAnchorRef = useRef<HTMLButtonElement>(null)
const richNoSubheadAnchorRef = useRef<HTMLButtonElement>(null)
return (
<Surface
as="section"
aria-labelledby="tooltip-example-title"
color="surface-container-low"
shape="extra-large"
className="tooltip-example"
>
<Text as="h2" id="tooltip-example-title" variant="titleLarge" emphasis="emphasized">
Tooltip
</Text>
<Text as="p" variant="bodyMedium">
Shows on hover or keyboard focus of its anchor and hides on leave or
blur, with no wiring beyond an `anchorRef`.
</Text>
<div className="tooltip-example__row">
<IconButton ref={plainAnchorRef} aria-label="Favorite" variant="standard">
<Icon source="star" />
</IconButton>
<Tooltip anchorRef={plainAnchorRef} content="Add to favorites" />
<IconButton ref={richAnchorRef} aria-label="Storage info" variant="standard">
<Icon source="info" />
</IconButton>
<Tooltip
anchorRef={richAnchorRef}
variant="rich"
subhead="Storage"
content="12 of 15 GB used. Free up space by removing unused files."
placement="bottom"
/>
<IconButton ref={startAnchorRef} aria-label="Undo" variant="standard">
<Icon source="undo" />
</IconButton>
<Tooltip anchorRef={startAnchorRef} content="Undo" placement="start" />
<IconButton ref={endAnchorRef} aria-label="Redo" variant="standard">
<Icon source="redo" />
</IconButton>
<Tooltip anchorRef={endAnchorRef} content="Redo" placement="end" />
<IconButton ref={richNoSubheadAnchorRef} aria-label="Sync status" variant="standard">
<Icon source="cloud_done" />
</IconButton>
<Tooltip
anchorRef={richNoSubheadAnchorRef}
variant="rich"
content="All changes are synced to the cloud."
/>
</div>
</Surface>
)
}Tooltipは、利用側で用意したトリガーに結び付く、操作できない説明をポータル表示します。Menuと異なり、アンカー上のホバー、フォーカス、Escapeによる表示/非表示の操作も行うため、追加の配線は不要です。
import { useRef } from 'react'
import { Icon, IconButton, Tooltip } from '@language-lit/material3-expressive'
import '@language-lit/material3-expressive/styles.css'
const anchorRef = useRef<HTMLButtonElement>(null)
<IconButton ref={anchorRef} aria-label="Favorite">
<Icon source="star" />
</IconButton>
<Tooltip anchorRef={anchorRef} content="Add to favorites" />仕様
anchorRefは利用側で用意して完全に管理するトリガーを参照します。これはMenu/Dialogと同じくトリガーに依存しない仕様です。Menuと異なり、トリガーにクリックやaria-expandedの設定は不要です。Tooltipがアンカーにホバー/フォーカスのリスナーを追加し、表示中はaria-describedbyを直接管理します。contentは必須の本文です。variantの既定値は'plain'です。'rich'を指定すると本文の上に任意のsubheadを追加し、大きなコンテナーを使います。どちらのバリアントも操作できません。role="tooltip"にはフォーカス可能な内容を置けないため、アクションボタン付きのバリアントはありません。placementの既定値は'top'です。'top'、'bottom'、'start'、'end'を指定でき、指定位置がビューポート端に重なる場合は反対側に切り替わります。- 高度な用途では
open/defaultOpen/onOpenChangeを使って制御できます。これはほかの状態を持つコンポーネントと同じ形式です。
動作
アンカーにポインターが乗るかキーボードフォーカスが当たると、すぐに表示します。ポインターが離れるかフォーカスが外れると、Tooltip自体のポップオーバーにポインターが移動した場合を除いて、すぐに非表示にします。Escapeキーでも閉じます。位置は交差軸の中央に合わせ、重なる場合は反対側に切り替えてビューポート端に収めます。表示中はスクロールとウィンドウのサイズ変更に応じて位置を更新します。
トークンと境界
色、形状、モーションの値は1つの--m3e-comp-tooltip-*登録にまとめられ、2つのバリアント用にplain-*とrich-*のグループに分かれています。テーマの上書きはMaterial3Providerのスコープ内で適用されます。Tooltipは実行時スタイルを注入せず、Next.js、Vite、ルーター、アニメーションライブラリ、非公開のアプリケーションコードをインポートしません。