ui
notification badge / unread badge / notification dot
ベルやアイコンの角に、未読があることを知らせる小さな点(または件数)が付く演出。点はアイコンの内側からわずかに滑り出しながら 0 から少し大きめまで膨らんで落ち着き、しばらくして静かに明滅を始める。開いて既読にすると一瞬で縮んで消える。肝は「出るときは弾ませて気付かせ、居座るあいだは控えめに、消えるときは速く」の3段を分けること。
02 — Prompt template
03 — Params
duration(点が膨らむ時間 s) — 範囲 0.15〜1 / 初期 0.5
点が 0 から膨らんで落ち着くまでの時間。0.4〜0.6sが目に留まりつつ待たせない(観察元は0.5s)。0.25s未満だと弾みが見えず、ただ現れたように見える。overshoot(行き過ぎの強さ) — 範囲 1〜2.4 / 初期 1.56
ease-out-back の cubic-bezier(.34, ここ, .64, 1) の2つ目のY値。1.56で約1.1倍まで行き過ぎて戻る(観察元)。1で弾みなし、2を超えると1.2倍を超えて「跳ねる」印象になり、通知が多い画面ではうるさい。offset(滑り出す距離 px) — 範囲 0〜24 / 初期 14
点がアイコンの中心側(左下)から角の定位置まで滑る距離。観察元は (-8px, 12px) =約14pxを0.26sで。0なら真上で膨らむだけ。20pxを超えると「どこかから飛んできた」に見えて、アイコンから生えた感じが消える。style(バッジの中身) — 選択: dot / count(初期: dot)
dotは直径8pxの点だけ(観察元。件数はパネル側に出す)。countは件数入りの丸で、新着が増えるたびに1→1.2→1倍で小さく弾ませる。件数を見せたいならcount、アイコンが小さい・件数に意味が無いならdot。
04 — Vocab
通知バッジ(notification badge) — アイコンの角に重ねる、未読や件数を示す小さな印。点だけのものを notification dot、件数入りを count badge と呼び分ける。
ease-out-back(オーバーシュート) — 目標値を少し行き過ぎてから戻るイージング。cubic-bezier の2つ目のY値が1を超えると行き過ぎる。小さな要素の出現に使うと、短い時間でも「ポン」と目に留まる。
アイドル明滅(idle pulse) — 出現の演出が終わったあとに、ごく弱く繰り返す動き。注意を引き続けるのではなく「まだ在る」と知らせる程度に、開始を遅らせ・振れ幅を小さく・周期を長くする。
強制リフロー(forced reflow) — display:none(hidden)から出した直後に offsetWidth などを読み、ブラウザに一度レイアウトを確定させること。これを挟まないと「消えている状態」が描画されず、transition が走らずにいきなり最終状態が出る。
既読化(mark as read) — パネルを開く・一覧を見るなど、ユーザーが通知を見たとみなす操作でバッジを消すこと。どの操作で既読にするかを決めておかないと、点がいつまでも消えないか、見る前に消える。
05 — NG → OK examples
NG
言い方: 「「未読があるときベルに赤い点を出して、アニメーションも付けて」」
なぜNG: fadeIn で0.3sかけて点が現れるだけ、か、点が無限に scale で脈打ち続ける実装が返ってきやすい。前者は小さすぎて気付かれず、後者は既読にするまで画面の端で動き続けて本文を読む邪魔になる。消えるときの動きは指定しないと付かず、パネルを開いた瞬間に点がパッと消えて「押して消えた」のつながりが切れる。right や width を動かす実装も普通に返ってくる。
OK
言い方: 「「notification badgeを。未読があればベル右上に8pxの点、周りに背景色の2px輪。出るときは中心側から(-8,12)px→0を0.26s ease-out-quint、点はscale 0→1・blur 2px→0を0.5s cubic-bezier(.34,1.56,.64,1)で行き過ぎさせる。1.2s後からopacity 1↔0.35を2s周期。開いたら0.18sで縮めて消す。aria-labelに件数、reduced-motionでは即時表示」」
なぜOK: 出る・居座る・消えるの3段それぞれに時間とイージングを与えている。「行き過ぎ(ease-out-back)」で一瞬だけ目を引き、「1.2s後から控えめに明滅」で居座りの主張を下げ、「消えるのは0.18s」で操作への返事を速くする。輪の指定が無いと点がアイコンの線に溶けて見えない。
