【リサイズオブザーバー】

Resize Observer とは?

最終更新:
💡 指定した要素のサイズ変化を、コールバックで受け取る

DOM要素などの指定した領域のサイズを観測し、変化をコールバックで報告するブラウザAPI。ウィンドウの大きさが変わらなくても、観測対象のサイズが変われば対応できる。位置や見た目の全変化を観測するものではなく、コールバック内でのサイズ変更が連鎖する場合にも注意が必要。

📌 このページのポイント
ウィンドウが同じでも、要素は変わる 同じ表示領域で、サイドバーを開いた例 開く 観測した要素:広い 観測した要素:狭い サイズの報告 → グラフを描き直す 報告内の変更が連鎖する場合は、設計を確認
観測対象の領域が変われば、表示領域が同じでも報告を受け取れる。操作そのものを観測する図ではない。CSS transformだけの変化は報告対象ではない。
ひよこ ひよこ
ウィンドウのリサイズイベントと何が違う?
ペンギン先生 ペンギン先生
個々の要素を登録して、そのサイズを観測できるよ。例えばサイドバーの開閉で隣の要素の幅が変われば、ウィンドウの大きさが同じでも報告を受け取れる。開閉という操作そのものではなく、観測した領域のサイズが対象なんだ。
ひよこ ひよこ
どんなときに使うの?
ペンギン先生 ペンギン先生
要素の幅や高さに合わせてグラフを描き直す場合などだよ。サイズを条件にCSSを切り替えるだけなら、コンテナクエリも選択肢になる。必要なのがJavaScriptでの処理なのか、CSSによる表示変更なのかを考えて選ぼう。
ひよこ ひよこ
使い方は?
ペンギン先生 ペンギン先生
new ResizeObserver(callback)で作り、observe(element)で登録する。コールバックには報告された要素ごとの情報を含むentriesが渡るよ。entry.targetが対象で、contentRectやborderBoxSizeなどから領域の寸法を読める。unobserveで一つ、disconnectで全ての観測を解除できるんだ。
ひよこ ひよこ
何の大きさを見るの?
ペンギン先生 ペンギン先生
既定は内容領域で、observeのboxにborder-boxを指定すれば、余白のpaddingと境界線を含む領域を観測できる。CSS transformで見た目だけを拡大しても、その変化だけでは報告されない。要素の全変化を観測するものではないんだ。
ひよこ ひよこ
コールバックでサイズを変えてもいい?
ペンギン先生 ペンギン先生
変えた結果がまた報告を生み、変更が連鎖する場合があるよ。仕様のエラー報告はWindowのerrorイベントで、メッセージは「ResizeObserver loop completed with undelivered notifications.」。ブラウザが報告を次の描画へ回しても、変更のループ自体を解決したことにはならない。不要な変更を繰り返さない設計を確認しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Resize Observer」って出てきたら「指定した要素のサイズ変化を、コールバックで受け取る」と思えばだいたいOK!
📖 おまけ:英語の意味
「Resize Observer」 = サイズ変更を観測するもの
💬 resizeはサイズ変更、observerは観測するもの。対象を登録して報告を受けるAPIだよ。画面内に見えるかや、位置の変化を調べるAPIとは役割が違うんだ。

参考資料

← 用語集にもどる