【iOSでは出ないスクロールバー】iPhoneでもカスタムスクロールバーを表示したい!→はい、SimpleBar!

CSS
CSS HTML JavaScript

Windows環境では表示される、このようなカスタムスクロールバー。

けっこうがんばって

::-webkit-scrollbar

とか

::-webkit-scrollbar-track

とか、

::-webkit-scrollbar-thumb

とか、

::-webkit-scrollbar-thumb:hover

とかの疑似要素を駆使して(いったい何種類あるんだよ、、)

スクロールバーをカスタマイズできるのですが、

これらの疑似要素は、iOS端末、MacOSでは、無視され、表示されません!!

昔は表示できていたようですが、

MacOSではOSX10.9.xから、iOSではiOS13から仕様が変更され、

初期設定では自動的に表示され一定時間後に消えるようになりました。

結構前に変更があったのか。

なんでだよ、iPhone、iPad、Mac・・・

スクロールしたときのみスクロールバーが表示されるんじゃ、

初見では、そのコンテンツ範囲がそもそも「スクロールできる」ということが視覚的にわからないのではないだろうか。。

はっきり言って改悪。そしてこの改悪に今日も多くのエンジニアがこの解決に時間を取られる。

この事象に多くのエンジニアが頭を悩ませるが、それでもデザインカンプでは洗練されたスクロールバーがデザイナー様から降りてくるし(スクロールバーがiOSで無効化されるなんて誰も想像できない)、実際どうやってか、表示できているサイトもある。。じゃあやらないとね!となるわけです。

というわけで、解消方法を備忘録として記載します。

SimpleBarという発明をした猛者が全世界のエンジニアを救っています

GitHub - Grsmto/simplebar: Custom scrollbars vanilla javascript library with native scroll, done simple, lightweight, easy to use and cross-browser.
Custom scrollbars vanilla javascript library with native scroll, done simple, lightweight, easy to use and cross-browser. - Grsmto/simplebar

これを使用することで、以下のような表示がiOSやMac上でも問題なく表示できます。

See the Pen SimpleBarの実装 by Naoto Yoshikawa (@nanaironanaoto) on CodePen.

やった!楽勝!

・・・と思ったら、このGithubのdemo pageを見ると、

Examples
SimpleBar does only one thing: replace the browser's default scrollbar with a custom CSS-styled one without losing performances. For React, Vue, Angular or Vani...

上の例のような横スクロールのデモが紹介されていない!?

なぜか縦スクロールのデモで、いやいや、縦スクロール時のバー表示はあんまり要らないんだわ・・・と思うことでしょう。

多くのSimpleBarの紹介記事は説明不足!!

また、上の例のように、細かい配慮として、左右のスクロール端の画像やテキストがフェードアウトしていく画像処理も、自力で付け足さなければいけない。

僕が作成した上のCodePenのHTMLとCSSを使えば、やっとほんとに解決すると思います。

解説すると、

1) まず公式のCDNで、SimpleBarのcssとjsをロード。

<!--SimpleBar-->
<link href="https://cdn.jsdelivr.net/npm/simplebar@latest/dist/simplebar.min.css" />
<script src="https://cdn.jsdelivr.net/npm/simplebar@latest/dist/simplebar.min.js"></script>
<!--SimpleBar-->

2) そしてスクロールさせたいコンテンツを以下のようにdata-simplebar属性をつけた要素で囲む。この例ではではdivで囲む。

<div data-simplebar>
 ここにスクロールさせたいコンテンツ
</div>

いちおうもうこれでスクロールバーは表示される。ただしデフォルトの縦スクロールバーが。

3) 横方向にスクロールさせたい場合は、

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

というように、属性に

data-simplebar-auto-hide="false"

を加える必要がある。

これで横スクロールになる。

4) が、包んでいるコンテンツがこのボックスの横幅を超えていないと、当然スクロールバーは表示されない。

だってスクロール不要なコンテンツなんだから。

ということで、cssでスタイル付けしていく必要がある。

カスタマイズするために、例えば以下のように任意のクラス名を付与。

.my-scroll-content
<div class="my-scroll-content" data-simplebar data-simplebar-auto-hide="false">

そのクラスに適用したスタイルは、CodePen内のcssを参照いただければと存じます。

5) そんでもって、この例のようにスクロールコンテンツの左右にフェードアウトの処理を加えるためにもひと手間かかかる。

See the Pen SimpleBarの実装 by Naoto Yoshikawa (@nanaironanaoto) on CodePen.

どうするかというと、さきほど作ったSimpleBarが表示されるスクロールコンテンツを、

さらにボックスで囲み、その直下の子要素として左と右、ふたつのボックスを作成して、それぞれのフェードアウト表示用に配置する。

<div class="custom-scroll-container">
    <div class="custom-scroll-fade-left"></div>
    <div class="custom-scroll-fade-right"></div>
    ここにさっきのSimpleBarのボックスを配置
</div>

そして

.custom-scroll-container

.custom-scroll-fade-left

.custom-scroll-fade-right

のクラスにスタイルを当てていけばようやくまともな横スクロールの表示になってくれる。

当てているスタイルはCodePenの”CSS”タブでご確認いただけます。

See the Pen SimpleBarの実装 by Naoto Yoshikawa (@nanaironanaoto) on CodePen.

6) 最後に実は落とし穴!

.scroll-content{
    touch-action: auto !important; /*これをつけないとスクロール領域でiPhoneなどで縦スクロールできなくなる!*/
}

スタイルで、スクロール領域内の

.scroll-content

にtouch-action:auto;をつけないと、SimpleBarのデフォルトの挙動により、

スクロール領域内ではiPhoneなどでの縦方向フリックが無効化される。

横スクロールにしているから縦にフリックが効かなくしているのだろうか。

ただ、デフォルトだと、スマホをするするスクロールしたときにこのスクロール領域でフリックができずユーザは「いや、なんでよ!?」とストレスになること請け合い。

エンジニアはこうやってサーバー上に反映したあとにさらに実機を触って入念に操作して見つけて、潰していかないと、ちょこちょこまさかの嫌な問題がでてきますね。

しかも、この件はChatGPTなどAIでも解決方法を提示できていなかった。まだ情報を知らないのだろう。かつ実機のフリック時の挙動とか、エミュレータではわからないことだし細かすぎる。

手間をかけないといいものが作れないようにできているってことか。。

いやー、横スクロールバーいっこちゃんとデザインするだけでどんだけかかるんだ!

これはCodePenのコードをちゃんと備忘録してないと、毎回記憶を頼りにしてたら面倒すぎる!!記事が書けてよかったー、これで安心。。

以上です!

著者名:吉川 直人
ECサイト制作に強いフロントエンドエンジニア。Web関連のお役立ち技術情報を発信しています。 今年(2025年)からVoicyのパーソナリティに挑戦し始めました!平日の朝、ラジオでWebエンジニアの生の声をお届けしています。

Webサイト制作を依頼したい方へ

PRYTHM WORKS(プリズムワークス)は、東京都墨田区、東京スカイツリーのふもとにあるWebコンテンツ制作事務所です。

華々しいおしゃれなECサイトをはじめ、アンダーグラウンドな案件まで幅広くご依頼をいただき、どんな案件でも真心・丁寧・楽しくを理念に掲げて制作しております!

作りたいサービスはあるけど、まずは費用感が知りたい!という方も、まずはお問い合わせください!

mail@prytymworks.tokyo

PRYTHM WORKSが手掛ける仕事の一部をご紹介します。

制作のご依頼者様用 費用かんたんお見積もりフォーム

おそらく本記事を読まれるのは、制作の現場の、法人またはフリーの、プロデューサーの方、ディレクターの方、エンジニアの方がほとんどかと存じます。
いつもおつかれさまです!そして本記事をお読みいただきありがとうございます。
紹介した記事の内容について、またはその他制作のご依頼について、以下のフォームより簡易お見積もりができます!
試算だけならフォーム送信しなくてもできますので、ぜひ試しにいかがでしょう?

お仕事をご希望の制作者様用 お問合せフォーム

また、まずはライトなご相談から…ということであれば、こちらのコンタクトフォームからお気軽にどうぞ!ご縁を大切にしてご返信いたします!

    ShopifyでのECサイト制作を行うならPRYTHMWORKS(プリズムワークス)へ

    ShopifyでのECサイト制作を外注しようとお考えの方は、PRYTHMWORKS(プリズムワークス)にご依頼ください。高品質なWebサイト制作で、お客様のビジネス成長を支援する会社です。Shopifyを使ったECサイト制作に力を入れており、売上向上に貢献するECサイト構築を代行いたします。豊富な経験と実績にもとづき、お客様のニーズに最適なECサイトを構築しますので、費用相場や制作事例など、気になることがございましたらお気軽にお問い合わせください。移行のご相談も承っております。

    社名合同会社PRYTHMWORKS
    事業内容EC/Webサイトの構築、管理保守
    CEO吉川直人
    法人事務所所在地〒150-0001
    東京都渋谷区神宮前六丁目23番4号桑野ビル2階
    設立日2023年(令和5年)7月3日
    沿革2020年(令和2年)10月
    PRYTHMWORKS事業開始
    2023年(令和5年)7月
    合同会社PRYTHMWORKS設立

    お問い合わせ用LINEはこちらからどうぞ!

    お問い合わせ用LINEはこちらからどうぞ!

    LINE