メインスクロールバーを常に表示する


179

ユーザーがWebページにアクセスしたとき(ページにスクロールバーのアクティブ化をトリガーするのに十分なコンテンツがない場合)、ブラウザーの垂直スクロールバーを表示したままにするには、どのCSSが必要ですか?


回答:


333
html {
    overflow: -moz-scrollbars-vertical; 
    overflow-y: scroll;
}

これにより、スクロールバーが常に表示され、必要なときにのみアクティブになります。

更新:上記が機能しない場合は、これを使用するだけでかまいません。

html {
    overflow-y:scroll;
}

3
FFのどのバージョンがサポートをもたらしたのoverflow-yか、何かご存知ですか?それ-moz-scrollbars-verticaloverflow-yプロパティを支持して非難されているようです。
Ionuț G. Stan

正しく覚えていれば、Internet Explorer 6.x以降、Firefox 1.5以降だと思います。私は上記のコードを使用しており、FF1.5-3.5.1およびIE6-8で動作します。
Corv1nus 2009

2
サイトの特定のページが小さすぎてスクロールバーがなく、他のページが小さい場合に、「ページジャンプ」の代替手段はありますか?それとも「ベストプラクティス」ですか。私は認めざるを得ません、私は全ページを占めないウェブ上に多くのページを見ることはありません。
ジェス2013

2
それがベストプラクティスであるかどうかはわかりませんが、ページジャンプを回避するために、すべてのページにスクロールバーを配置し、必要な場合にのみアクティブにすることは、通常、許容できるソリューションです。私はジャンプよりも常にスクロールバーを好む傾向がある。
Corv1nus 2013

1
スタイリングhtmlが少しハックしている(私のような)場合は、の:root代わりに構造擬似セレクターを使用できることに注意してくださいhtml。参照:developer.mozilla.org/en-US/docs/Web/CSS/
root

31

オーバーフローが「自動」ではなく「スクロール」に設定されていることを確認してください。そうは言っても、OS X Lionでは、「スクロール」に設定されたオーバーフローは、スクロールバーが使用されている場合にのみ表示されるという点で、autoのように動作します。したがって、上記の解決策が機能していないようであれば、それが原因である可能性があります。

これを修正する必要があります:

::-webkit-scrollbar {
  -webkit-appearance: none;
  width: 7px;
}
::-webkit-scrollbar-thumb {
  border-radius: 4px;
  background-color: rgba(0, 0, 0, .5);
  -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5);
}

デフォルトが気に入らない場合は、それに応じてスタイルを設定できます。


1
これでうまくいく!しかし、どうすれば特定のdivでのみそれを作成できますか?
リッチ

@Richは他のcss要素と同じです。.yourdiv ::-webkit-scrollbar {...}
Kris

@クリスこんにちは、答えてくれてありがとう、ここにその例があります。stackoverflow.com/a/54667091/2637261
リッチ

なぜこれが使用されるのか-webkit-appearance: none;
Suraj Jain

これは素晴らしい!受け入れられる答えでなければなりません。
Cyber​​punker

25

ここ数年で状況は変化しました。上記の回答は、すべてのケースで有効ではなくなりました。Appleは消えるスクロールバーを随所に押しやっている。Safari、Chrome、さらにはMacO(およびiO)上のFirefoxでも、実際にスクロールしているときのみスクロールバーが表示されます—現在のWindows / IEについては知りません。ただし、Webkitのスクロールバーにスタイルを設定する非標準的な方法があります(IEはそれをずっと前に廃止しました)。


しかし、それはそれらの新しいもので優雅に正しく劣化しますか?
ベン

3
消えるスクロールバーのこの素晴らしい点をありがとう。私にとってスクロールバーを表示したままにする理由は、コンテンツがスクロールすることからスクロールしないことへと変化するときに、そのわずかであるが非常に目立ち、非常に迷惑なジャークを回避するためでした。スクロールバーが消えるので、表示したり非表示にしたりしても体がぐちゃぐちゃにならないので、大丈夫です。しかし、この優れた点に感謝します。
Noitidart、2015

4
UXの観点からは、ほとんどの場合、スクロールバーを表示する必要があります。現在の傾向ごとに、スクロールバーが表示されない場合は、リストの詳細を表示するために、表示されているリストを「試してみる」必要があります。スクロールバーが表示されている場合は、ドロップダウンまたはリストに項目が含まれているという視覚的な手がかりは不要です。
windsurf88

24
html {
    overflow-y: scroll;
}

それでいいの?

残念ながら、Opera 9.64はやに適用されたHTML場合BODY、そのCSS宣言を無視するようDIVですが、のような他のブロックレベルの要素に対しては機能します。


13
html {height: 101%;}

私はこのクロスブラウザーソリューション を使用します(注:常に1行目でDOCTYPE宣言を使用します。それがquirksmodeで機能するかどうかはわかりませんが、テストしていません。)。

これにより、常にすべてのページにアクティブな垂直スクロールバーが表示され、垂直スクロールバーは数ピクセルのみスクロール可能になります。

ページのコンテンツがブラウザの表示領域(ビューポート)より短い場合でも、垂直スクロールバーがアクティブのままであり、スクロールできるのは数ピクセルのみです。

このソリューションを使用してCSS検証(私はHTML検証のみに夢中です)に夢中になっている場合は、次のような非標準のCSS属性を使用していないため、CSSコードもW3Cを検証します -moz-scrollbars-vertical


1
エレガントなソリューション
Artur Keyan

12

body { height:101%; } 大きなページを「トリミング」します。

代わりに、私は使用します:

body { min-height:101%; }

1
この質問は5年前に出されたもので、すでに受け入れられた回答があります。あなたの答えは、すでに受け入れられている答えよりも良い答えを提供しません。
Dipen Shah 2015

18
この回答は、実際には他の回答では提供されていない追加情報を提供します。
GaTechThomas 2015

2

bodyタグに追加することで、これを機能させることができました。私はhtml要素に何もないので、私にとってはより良かったです。

body {
    overflow-y: scroll;
}

2

別の方法は、html要素の幅を100vwに設定することです。ほとんどではないにしても多くのブラウザでは、これは幅に対するスクロールバーの効果を無効にします。

html { width: 100vw; }

0

高さを101%に設定することが、この問題に対する私の解決策です。ビューポートの高さを超えるものと超えないものを切り替えるときに、ページが「フリック」しなくなりました。



0

私はこれをします:

html {
    margin-left: calc(100vw - 100%);
    margin-right: 0;
}

そうすれば、必要のないときは、醜くグレー表示されたスクロールバーを見る必要はありません。


質問は、それが常に見えるようにすることを求めています。
Corv1nus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.