headlessui の Modal Dialog で画面が右にずれる


tailwindcssを使っているとheadlessuiやtailwinduiなどのComponentテンプレートを使うと思う。Modalを表示した時に元の画面が裏でスクロールするのを防ぐため下記のCSSが<html>タグに付与される。

overflow: hidden; padding-right: 15px;

これは右側のスクロールバーが消えるため、そのレイアウト崩れをさせないために15pxのpaddingを取っているのだが、上部固定のheaderなどをposition: fixed; text-align: center;で設定していると(fixedはwindowに対しての絶対位置で指定するため)中央の位置が若干右にずれて、Modal表示時にカクッとなってしまう。

MaterialUIであればscrollLock={false}のような設定ができるが、そもそも背面のViewのスクロールをロックするというのはUX的には正しい挙動だと思うので、CSSで頑張る。

結論、tailwindcssを使っているなら、headerにpx-2(padding-left: 15px; padding-right: 15px;)を指定してやっておけば最初の位置からずれないので解決する。