Weblasts

スクロールバーのカスタマイズは『Simplebar』を使えばだいたい解決すると思ったので使い方を紹介する試み

スクロールバーの見た目を変えたいと思ったことはないでしょうか?

どのデバイスでも同じ見た目にしたいという願望が多そうですが、私はサイト全体で縦方向のスクロールバーのツマミ部分(::-webkit-scrollbar-thumbで調整できる部分)の高さを固定したくてcssだけで調整できないかと四苦八苦して、ChatGPTに聞いてもうまくいかないので『Simplebar』というjsのライブラリを使って解決しました。

この記事ではブラウザのデフォルトのスクロールバーをカスタムできるjsライブラリ『simplebar』の使い方を紹介していきます

Simplebarとは

Simplebar』は前述した通りブラウザのデフォルトのスクロールバーをカスタムできるjsライブラリです

JavaScriptを使ったスクロールバーをカスタマイズできる高性能なライブラリはいくつかありますが、JavaScriptでスクロールを制御しようとすると不自然な動きになることがあります

Simplebar』はスクロールをJavaScriptで制御しないので動きは元々のスクロールバーの動きを維持したままカスタマイズできます

日本で有名なサイトだとtwitchというストリーミングサイトでも採用されているので、信頼性も高いです

Simplebarの使い方を紹介する前に…

コードとかの前に今回紹介するShimplebarはbody要素に対して使うことを推奨されていません(textarea・table・iframeも非推奨)

UXで悪影響を及ぼすので公式サイトの方で上記の要素で使いたいなら他のライブラリを使うか自己責任で行ってくださいとアナウンスされています

ちょっとしたデメリットが出ますが自己責任で使いたい人々のためにサイト全体のスクロールバーをカスタマイズする方法を紹介していきます

Simplebarを使ってみる

SimplebarについてはGithubの方で詳しく紹介されていますのでこちらもご覧ください

Simplebarのライブラリを読み込む

Simplebarはライブラリなのでインストールや読み込まないと使えません、 いくつかの方法がありますので紹介しておきます

この記事ではCDNで読み込んで使う方法でSimplebarの使い方を紹介していきます

head要素に諸々のコードを埋め込む

これがないと一切動かないのでライブラリを読み込むコードをhead要素に埋め込んでいきます

noscriptへ対応するためのコードも提供されているのでnoscript要素も一緒に埋め込んでおきましょう

Shimplebarをdata属性で使う

Shimplebarを使う方法の一つとしてdata属性を使う方法があり、いろんなブログとかで紹介されている使い方がこれなんだけどカスタマイズしたりするときには正直不向きかな?と思う

ただ使うだけであればこの方法が簡単で、オプションもdata属性として設定できるので、開始タグがゴチャつくことに抵抗がなかったり、あまりオプションを使わないよって人にはこの方法をおすすめします

Shimplebarをコードを書いて使う

data属性を使って使用する方法は簡易的に使う分には十分だったりしますが、オプションをいくつか設定したり、複数要素に一括で指定したりするときにはバチクソ不便です

書き方は余り難しくないと言うかscript要素の中にコピペして対象の要素を変えるだけなんでこっちのやり方のほうが断然使いやすいと思ふ

querySelectorでbody要素を取得しているけどidつけてgetElementByIdを使ってもOK

この記事ではそこまで掘り下げませんが、複数の要素に対して実行したい場合はちょっと書き方が変わって以下のように書きます(クラスscrollが付いた要素に対してという想定のコード)

cssをちょこっと調整する

とりあえず公式の言う通りの使い方をしていればここまででスクロールバーが変わってくるけど、body要素に対して使った場合はこのままではスクロールバーが変わらないはずなのでcssをちょこっと調整する必要があります

とはいえ高さをデバイスと同じに固定するだけなんで難しい調整は一切ないと思います

とりあえずここまでのデモページとコードをまとめておきます

Shimplebarのオプション

オプションに関しても公式のgithubの方で紹介されているのでそちらをみたほうが早そうですが、紹介しているところがなさそうなので紹介しておきます

以下のコードのようにイニシャライズのコードに追加して使う方が使いやすいと思われるのでこっちの方法で紹介していきます

data属性を使う場合ではオプション名が変わるのであまり紹介されていないんだろうと思うんですけど、ケバブケースに変えればdata属性で使えますのでどうしてもdata属性で使いたいのであればうまく対応してください

autoHide

Shimplebarのデフォルトでは、ユーザーがスクロールしていない場合、自動的にスクロールバーを隠す動きをしてくれます。

autoHideオプションをfalseに設定することで、スクロールバーを常に表示するようにすることができます。

scrollbarMinSize/scrollbarMaxSize

スクロールバーのつまみの部分の最小サイズを指定するscrollbarMinSize(デフォルトは10という説と25と言う説がありますが25です)とスクロールバーのつまみの部分の最大サイズを指定するscrollbarMaxSize(デフォルトは0 ←無制限らしい)を調整するとスクロールバーの大きさをカスタマイズでき、どちらもピクセル単位になるのですが値にはpxはつけずに数値だけで指定します

両方とも同じにすればどんなときでも同じ大きさにするという記事の冒頭で紹介した私がやりたかったことがうまくできました

cssでもいじれますが、スクロールバーの挙動がおかしくなるのでこれで調整してください

data属性で使う場合はケバブケースにして以下のように指定します

classNames

SimpleBarが使用するデフォルトのクラス名を変更するためのオプションで、変えられるものが公式の発表では4種類用意されていますが、この記事を書いている現在では全部変えられるみたいです

デフォルトのcssを使いつつオーバーライドさせて見た目の調整をする方法が簡単だと思いますが、まるっきり違うものにしたい場合はいいかもしれません

data属性で使う方法は見つからなかったです

forceVisible

forceVisibleオプションを使用すると、トラックを強制的に表示させることができるらしいです

cssでいうoverflow: scrollと同じ動作らしいですが、この記事を書いている現在ではうまく働きません

data属性で使う場合はケバブケースにして以下のように指定すると思われますがうまく動作してくれないのでなんとも言えない感じです

direction

rtlサポートを有効にすることができます

data属性で使う場合はケバブケースにして以下のように指定します

clickOnTrack

トラックのつまみがない部分をクリックしたときの挙動を指定することができるオプションです

デフォルトはtrueなのでスクロールバーのつまみの上下にあるスペースをクリックするとスクロールしてくれますが、falseにすると無反応になります

data属性で使う場合はケバブケースにして以下のように指定します

以上で公式から紹介されているオプションの紹介はおしまいです

cssを使って見た目を変える

この辺はデベロッパーツールを使って調整できると思うんですけどとりあえずいじりたくなりそうな部分だけ抜粋して紹介しておきます

以上

あまり変更点はないけど最終的なコードとデモをどうぞ

最後にデメリットのこと

UXで悪影響を及ぼすってことを前述しましたがいくつか気づいた点をリストアップしておきます

  • iosのステータスバーで一番上までスクロールする機能がなくなる
  • トラックをクリックしたときの動作がデフォルトと比べると遅い

ウインドウサイズによって切り替えたりしたらステータスバーの件は解決できそうだけど、そもそもスマホとPCのスクロールバーを統一するって目的もあるから他のものを使うか諦めるしかなさそう

ステータスバーの機能を知っているユーザー多いのかな?スマホでもTOPへ戻るボタンよく見るし判断がつかない

デフォルトと比べると遅い動作は個人的に気にはならないけど神経質な人は気になるんだろうな~ってレベル

使用は自己判断でってことだったのであとは使い手が判断してください

POPULAR