2011-12-25 1 views
30

私は、Hoveredのスクロールバーのみを表示するスクロール可能なdivを持つ方法を理解しようとしています。Divを上に置いたときにスクロールバーを表示するだけですか?

例はGoogle画像検索です。下の画像では、マウスの上にマウスを置くまで、左側のサイドバーがスクロール可能でないように見えます。

これはCSSで可能ですか、Javascriptが必要ですか?可能であれば、そのようなタスクをどのように行うかという簡単な例がありますか?

Example

+2

意図は、2枚の背の高い画像なしで非常に明確です。 –

答えて

71
#div { overflow:hidden;height:whatever px; } 
#div:hover { overflow-y:scroll; } 

だろうと仕事のようなもの?

+1

@サラティス:それは... [JSフィドルのデモ](http://jsfiddle.net/davidThomas/GXZHk/)、現在のところ、Chrome 16/WinXPでしかテストされていません。 –

+1

私はかなりxブラウザを使うべきだと確信しています –

+0

サポートはきれいに見えます:http://www.quirksmode.org/css/contents.html#t16しかし、オーバーフローを取り除くためのフォールバック:

1

私は

$("#leftDiv").mouseover(function(){$(this).css("overflow","scroll");}); 
$("#leftDiv").mouseout(function(){$(this).css("overflow","hidden");}); 
+7

':ホバーは十分ではありませんか? ;) – alex

+2

これは、(パフォーマンスの観点から)カルバンによる:ホバーのソリューションを使用するよりもはるかに高価です。 –

1

のようなものがdiv要素に固定の高さとsrcoll与えると思う:隠されたが、ホバー上でスクロールをautoに変更します。

#test_scroll{ height:300px; overflow:hidden;} 
#test_scroll:hover{overflow-y:auto;} 

これは一例です。 http://jsfiddle.net/Lywpk/

+0

良いクロスブラウザのメソッド – JasonDavis

0

あなたが表示/隠れる程度の唯一の懸念されている場合は、このコードはうまく動作します:

$("#leftDiv").hover(function(){$(this).css("overflow","scroll");},function(){$(this).css("overflow","hidden");}); 

しかし、それは、あなたが幅= 100%を使用している場合には、あなたのデザインのいくつかの要素を変更する可能性あなたがスクロールバーを隠すと、あなたの幅のための少し余裕ができます。

15

オーバーフローを変更すると、内部ブロックの幅が一貫性がなく、リフローがトリガされるなどの問題が発生します。

これまでリフローをトリガしないのと同じ効果を持つための簡単な方法があります:visibilityプロパティとネストされたブロックを使用して:ここで

.scrollbox { 
    width: 10em; 
    height: 10em; 
    overflow: auto; 
    visibility: hidden; 
} 
.scrollbox-content, 
.scrollbox:hover { 
    visibility: visible; 
} 

は、実施例とペンです:http://codepen.io/kizu/pen/OyzGXY

別このメソッドの特徴はvisibilityがアニメーション可能であることです。そのため、遷移を追加できます(上記の2番目の例を参照)。スクロールバーは、別の要素に移動しているだけでホバリングしてもすぐには表示されません。マウスカーソルでスクロールバーを指定すると、スクロールバーを見逃すことは難しくなります。よく

+0

ちょうど明確にする:これはスクロールバーのための専用のdivを持っている必要がありますか?これは正しい方法ですか? –

+0

私はこの問題に関して複数の質問を見てきましたが、この答えは実際には素晴らしいです。そのクロスブラウザは互換性があり、全体的に簡単で素晴らしい。 – Rithwik

0

Webkitブラウザでは、不可視のスクロールバーを作成し、ホバー上に表示させるという方法があります。このメソッドは、スクロールバーに必要なスペースが既に存在するため、スクロールエリアの幅には影響しません。このような

何か:

.scrolling-div { 
    &::-webkit-scrollbar { 
    background-color: transparent; 
    width: 10px; 
    } 
&::-webkit-scrollbar-thumb { 
    background-color: transparent; 
} 

}

.scrolling-div:hover { 
&::-webkit-scrollbar-thumb { 
    background-color: black; 
} 

}

codepen example

関連する問題