次のように変更する手順を記す。
※MUI
はv5
向けの内容となっているので注意。
公式による解説は次
ただ、かなりサラっとしか触れられてないのでいまいちわかりにくい。
以前は@global
というキーを使ってCSSを変更できたようだがV5
で使用できなくなっている。
参考:Migration from v4 to v5 - MUI
当サイトの実装は次
const theme = createTheme({
components: {
//`MuiCssBaseline`になっているが`CssBaseLine`ても同様に作用した
MuiCssBaseline: {
styleOverrides: `
::-webkit-scrollbar{
width: 15px;
},
::-webkit-scrollbar-thumb {
background-color: #276976;
border-radius: 10px;
}
`
},
},
});
createTheme()
を行うときにスタイルをオーバーライドする形で実装する。
normalize.css
と同じような挙動だそうでどのブラウザでアクセスしても同じような表示になるようにいい感じに調整してくれるものだそう。
WEB全体のコードにおいて、ThemeProvider
が一番親にありその中に指定してあることが殆どかと思う。
当サイトでは次のようになっている。
<ThemeProvider theme={theme}>
<CssBaseline/>
{children}
</ThemeProvider>
こちらがMUI
が生成するDOM
のスタイルを上書きする命令。
MUIv5
から使用可能。
バッククォートで括ることでstyleOverrides
の中身に直接CSS
構文がかける模様。
ここからはCSS。
::-webkit-scrollbar
ここでは幅を15px
に設定している。
実はCSSだけでスクロールバーを美しくスタイリングするコードはない(色等は変えられる)
このWebkit
というものはアップル系のレンダリングエンジンにのみ作用するもの。
参考:::-webkit-scrollbar - CSS: Cascading Style Sheets | MDN
ただ、Chrome
を初めシェアが高いものはおおよそ対応している。
私が気になった範囲だとFirefox
が対応していないので念の為注意。
万能なコントロール方法ではないがYoutube
等のGoogle
サイトでも使われているので私も使うことにした。
styleOverrides
の中で::-webkit-scrollbar
を書かずに::-webkit-scrollbar-thumb
(スクロールバーのマウスでつかめる部分のところ)から書き始めると効果が消えてしまうので必ず書く。
::-webkit-scrollbar-thumb
上でも書いているがスクロールバーの掴む部分のスタイルを定義するコード。
background-color
で色を、border-radius
で丸みを設定している。
::-webkit-scrollbar-thumb
以外にも設定できる項目は多数あるので詳しくはCSSに特化した他サイトを検索してもらえればと思う。
scrollbar-base-color
とかはダメ?スクロールバーのスタイリングに関してはどのブラウザでも使えるscrollbar-*
系のCSS
も存在する。
色々ためしたのだがこちらの標準CSS
はMUI
に適用できなかった。
どちらにせよこのコードだと「カラーしか変更できない」ので今回は使用しなかった。
2021/12/20: スクロールバーに余白を設ける記事は次
【CSS】::-webkit-scrollbarの上下左右に余白を作りたい | 謎の技術研究部
2021/12/20: マウスオーバーでスクロールバーの表示/非表示を切り替える方法を次の記事で紹介している
【MUI + CSS】Drawerのスクロールバーをマウスオーバーで表示/非表示切り替え | 謎の技術研究部
とにかくcreateTheme()
する時のコード内でCSS
をオーバーライドするという点。
components
> MuiCssBaseline
> styleOverrides
という順番の階層となっている点。
この2つがわかっていれば思ったよりサクッと実装できるはず。
改めていうがスクロールバーのスタイリングはすべてのブラウザ対応ではないので注意。