::-webkit-scrollbar
で余白をコントロールしたいまず普通に::-webkit-scrollbar
を使うと次のようになる。
この記事ではこれを次のようにする
使いやすいデザインが追求されているYoutubeを見てみよう。
※わかりやすくダークモードで撮影。
このようにスクロールバーに::-webkit-scrollbar
が使われており、余白も設定されている。
余白を設けたいという要求は間違っていないはずだ。
::-webkit-scrollbar
の場合「上下」と「左右」の余白で別途コントロールしないと実現できないため。
実際にこのサイトで使っているCSS
を例に出す。
::-webkit-scrollbar {
width: 18px;
},
::-webkit-scrollbar-thumb {
background-color: #276976;
border-radius: 8px;
border-right: 4px solid transparent;
border-left: 4px solid transparent;
background-clip: padding-box;
},
::-webkit-scrollbar-track {
margin-top: 4px;
margin-bottom: 4px;
}
次の部分が「上下」を定義している。
::-webkit-scrollbar-track {
margin-top: 4px;
margin-bottom: 4px;
}
::-webkit-scrollbar-track
はスクロールバーの背景に当たる部分を定義する箇所。
※ツマミではなくそのレールになっている部分。
ここでいくらマージンを設定しても左右の余白が作れなかったがtopとbottomは効果がある。
「上下」だけ設定すると次のようになる。
恐らく最も難解な部分。
こちらは次のフォーラムによる議論を参考にさせていただいた。
CSS vertical scrollbar padding left/right in UL possible? - Stack Overflow
具体的な実装は次の部分
::-webkit-scrollbar-thumb {
border-right: 4px solid transparent;
border-left: 4px solid transparent;
background-clip: padding-box;
},
上と違うのは::-webkit-scrollbar-thumb
側のボーダーを設定しているという所。
transparent
は必須なので消さないように。
またbackground-clip
というCSSを利用するという点。
こちらbackground-clip: padding-box
の意味は「ボーダーが定義されている箇所の背景はカットする」というもの。
少々難解なので覚える必要はなく適宜別サイトを検索してもらえればよいかと思う。
このコードにより左右にも余白が入った。
スクロールバーを細くしたことで「クリック(ドラッグ)できる部分が減るのでは?」という懸念があるかもしれない。
この方法なら左右の「余白部分もクリック範囲」のままとなるので殆ど使用感は変わらないはずだ。
マウスオーバーでスクロールバーの表示/非表示を切り替える方法を次の記事で紹介している
【MUI + CSS】Drawerのスクロールバーをマウスオーバーで表示/非表示切り替え | 謎の技術研究部
この手の解説も非常に長い文章になっているサイトが多いので可能な限り短くまとめた。
今回はCSS
で紹介したが前回の記事から読んでもらえればMUI
を使ったReact
サイトにも適用できるだろう。