MUIのAppBarでfixedを使用すると要素が重なり、stickyだと固定されないときに確認すること。

2024-02-25

はじめに

MUIのAppBarを固定させたい時、positionfixed にすることで実現できます。
しかし、fixed を使用すると、もともと relative で下にあった要素が上がり重なってしまいます。

AppBarの height はドキュメントにも記載があるため、
その分、重なる要素に padding を設けるなどで対処できますが、
MUIの ver5 より、sticky を使用することで、固定かつ重なる部分を自動的に空けられるようになりました。

実際使ってみると、AppBarが固定されませんでした。
私は後述する内容で解決したので、それを記します。


対処法

AppBarを親要素にする。

const Header = () => { 
  return ( 
    <> 
      <Box>
        <AppBar position="sticky" />
      </Box>
    </>
  );
};

上記のように、AppBarの親にBox等の要素を置かず、
下のように 親要素にする ことで解決しました。

const Header = () => { 
  return ( 
    <>
      <AppBar position="sticky" />
    </> 
  );
};

具体的には、AppBarの親要素のHeightに依存しています。
つまり、AppBarの親要素の高さの範囲内で固定され、
その高さを超えると static のような挙動になります。


参考文献