WEBTODESIGN

スクロールバーを簡単に常に表示できる「SimpleBar」。Safariも対応。

スクロールバーを常時表示したいことがあります。例えば、注意事項の欄とか、新着情報一覧とか。スクロールバーがないと、続きがあることが分かりにくいので困る。

特に、Macのブラウザでは基本的にスクロールしてない時には、スクロールバーが消える仕様になっています。なので、分かりにくさMAX!

SimpleBar

常にスクロールバーを表示するために、今回は、SimpleBarというライブラリを使いました。

SimpleBarはデフォルトのスクロールバーをCSSで置き換えるものです。JavaScriptで無理やり書き換えないので、パフォーマンスが落ちたり変な挙動が起こらないとのこと!

導入・実装も非常に簡単でした😉

ライブラリの読み込み

まずは、SimpleBarCSSとJavaScriptを両方読み込みます。

CDNで読み込む場合は以下。

https://cdn.jsdelivr.net/npm/simplebar@latest/dist/simplebar.min.css
https://cdn.jsdelivr.net/npm/simplebar@latest/dist/simplebar.min.js

本当はファイルで読み込みたかったのですが、nmpを使わない場合のファイルがどのファイルを使うのかわからず…。GitHubでファイル群をダウンロードしてみるものの、それらしきファイルが見当たらず〜…。なので、今回はCDNを使いました。

データ属性を付与

スクロールバーを常時表示させたい部分に、以下のデータ属性を追加します。

data-simplebar data-simplebar-auto-hide="false”

例えば、以下のように。

<div data-simplebar data-simplebar-auto-hide="false”></div>

これで、常時スクロールバーが表示されます!

注意点としては、CSSでスクロールを表示する設定にしている必要がある点です。そもそもスクロールが発生しない場所にこのデータ属性を設置しても、スクロールバーは表示されません。 overflow: auto;を指定したり、高さを指定してスクロールバーは表示されるようにしておきましょう。

Macへの対応

SimpleBarはMac・iOSにも対応しています。

Macのブラウザでは基本的にスクロールバーが非表示になる仕様です。しかし、SimpleBarを使えば常時スクロールバーを表示することが可能です。

CSSの崩れ

このライブラリでは、独自のHTML構造が内側に生成されるため、CSSが崩れることがあります。その場合は、ソースコードを見て値を上書きすればOK!

今回の場合はsimplebar-contentクラスにCSSを適応しました。

iOS Safariでデフォルトのスクロールと重なって表示される

iPhoneでスクロールをしたところ、デフォルトのスクロールと重なって表示されてしまいました。 iOSのバージョン13以降でこの問題がみられるとフォーラムにありました。

SimpleBarを使用している要素に対して、以下のように指定します。これは、デフォルトのスクロールバーを非表示にするという指定です。

::-webkit-scrollbar {
    display: none;
}

ページの一部のみにSimpleBarを使用している場合は、ページ全体に適用しないように注意です。

おわりに

SimpleBarで簡単にスクロールバーを常に表示できるようになりました。

ここまで簡単なのは驚き!

意外と、スクロールバーを常に表示したい場面は多いので助かります。