HoverCard

対象の概要と関連する操作を、近くに表示します。

使いどころ

  • 人・案件・資料へのリンクのように、移る前に中身の概要を確かめたい対象に使います。
  • 一言の補足で足りる時は Tooltip、押して開く補足や小さな入力は Popover を使います。
  • ホバーしなくても分かるよう、欠かせない情報はプレビューだけに置かず、移動先にも置きます。

使い方

HoverCardController を hover-card として登録します。id は画面内で一意にします。ホバーして300ms後、またはフォーカスした時にプレビューのパネルを開き、ポインターとフォーカスが離れて150ms後に閉じます。ポインターをパネルへ移す間は、斜めに横切っても開いたままです。

href が無ければ label の操作を押しても開きます。href を渡すと、label を移動のリンクにし、隣に目のアイコンのプレビュー操作を置きます。リンクを押すと移動し、プレビュー操作を押すとパネルを開きます。プレビュー操作はcontrollerが働いた時だけ出します。

パネルの見出し・説明・本文・操作欄の組み立ては Popover・Dialog と同じです。title を省略すると label を見出しにします。関連する操作がある時だけ actions を渡します。size はパネルの幅の上限で、compact は16rem、default は20rem、wide は28remです。

Escapeと、見出しの横の閉じる操作で閉じます。閉じた後は、ポインターを離すかフォーカスを外すまで再び開きません。

タッチ操作では触れても開きません。JavaScriptなしではパネルは開かず、リンクは通常のリンクとして動きます。パネルの中身の取得や操作の処理は利用側が行います。

キーボード

HoverCardのキーボード操作
キー動作
Tab(リンク・操作へ)フォーカスするとパネルを開きます。パネルの中の操作へもTabで進めます。
Enter / Space(プレビュー操作)パネルを開きます。
Escapeパネルを閉じ、パネルの中にフォーカスがあれば開いた操作へ戻します。

アクセシビリティ

  • パネルは role="dialog" で、見出しを名前(aria-labelledby)、description を説明(aria-describedby)にします。
  • 開く操作とプレビュー操作は aria-controls と aria-expanded を持ちます。プレビュー操作は「(label)のプレビューを開く」という名前で読み上げます。
  • パネルの中に autofocus を置くと、controllerは働かず、コンソールに警告を出します。
  • 見出しの横の閉じる操作はアイコンだけなので、closeLabel を aria-label にします。

イベント

HoverCardが発火するイベント
イベント内容
hover-card:beforetoggleパネルを開く・閉じる直前。取り消せます。detail は open(次の状態)・previousOpen・reason(pointer または keyboard)です。
hover-card:toggleパネルを開いた・閉じた後。detail は hover-card:beforetoggle と同じです。

API

HoverCard

リンクや操作の対象を、hover・focusで開く操作可能なプレビュー。

HoverCardのprops
名前型既定値説明
id必須stringパネルのid。画面内で一意にする。見出しは<id>-titleになる。
label必須string開く操作(またはリンク)の文言。
titlestringlabelパネルの見出し。省略するとlabelを使う。
descriptionstring見出しの下に置く短い説明。パネルの説明(aria-describedby)になる。
size"compact" | "default" | "wide""default"パネルの幅。compactは16rem、defaultは20rem、wideは28remを上限にする。
hrefstring渡すと、labelを移動のリンクにし、隣に目のアイコンのプレビュー操作を置く。押すとリンクは移動し、プレビュー操作はパネルを開く。
closeLabelstring"閉じる"見出しの横の閉じる操作の名前。
actionsChildパネルの下の操作欄に並べる関連操作。関連する操作がある時だけ渡す。
childrenChildパネルの本文。対象の概要を置く。

登録するcontroller:hover-card(HoverCardController)

読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/button.css、components/overlay.css、components/icon.css、components/hover-card.css

コード

HTML
Hono JSX