流体レイアウトのスクロールでサイドバーナビゲーションを常に固定したままにすることは可能ですか?
注:これを行うbootstrap jQueryプラグインがあり、この回答が書かれた後、いくつかのバージョンが導入されました。 (ほぼ2年前) Affix と呼ばれます。この回答は、Bootstrap 2.0.4以前を使用している場合にのみ適用されます。
はい、単純にサイドバーの新しい固定クラスを作成し、コンテンツdivにオフセットクラスを追加して、左マージンを補います。
CSS
.sidebar-nav-fixed {
padding: 9px 0;
position:fixed;
left:20px;
top:60px;
width:250px;
}
.row-fluid > .span-fixed-sidebar {
margin-left: 290px;
}
デモ: http://jsfiddle.net/U8HGz/1/show/ ここで編集: http://jsfiddle.net/U8HGz/1/
更新
レスポンシブbootstrapシートをサポートするようにデモを修正し、ブートストラップのレスポンシブ機能でフローするようになりました。
注:このデモは上部の固定navbarを使用するため、画面のサイズを変更すると両方の要素がposition:static
になります。モバイルビューの画面が落ちるまで固定サイドバーを維持する別のデモを下に配置します。
CSS
.sidebar-nav-fixed {
position:fixed;
top:60px;
width:21.97%;
}
@media (max-width: 767px) {
.sidebar-nav-fixed {
width:auto;
}
}
@media (max-width: 979px) {
.sidebar-nav-fixed {
position:static;
width: auto;
}
}
HTML
<div class="container-fluid">
<div class="row-fluid">
<div class="span3">
<div class="well sidebar-nav sidebar-nav-fixed">
...
</div><!--/.well -->
</div><!--/span-->
<div class="span9">
...
</div><!--/span-->
</div><!--/row-->
</div><!--/.fluid-container-->
マイナーノート:固定サイドバーの幅には約10px/1%の差がありますが、これはspan3コンテナdivから幅を継承しないため、固定されているため、幅。十分近いです。
また、小さな画面/モバイルビューのグリッドがドロップするまでサイドバーを固定したい場合は、別の方法があります。
CSS
.sidebar-nav-fixed {
position:fixed;
top:60px;
width:21.97%;
}
@media (max-width: 767px) {
.sidebar-nav-fixed {
position:static;
width:auto;
}
}
@media (max-width: 979px) {
.sidebar-nav-fixed {
top:70px;
}
}
最新のBoostrap(2.1.0)には、このタイプのアプリケーション(FYI)専用の新しいJS "affix"機能があります。
これはレスポンシブWebdesignを台無しにします。メディアクエリで固定サイドバーをより適切にラップします。
CSS
@media (min-width: 768px) {
.sb-fixed{
position: fixed;
}
}
HTML
<div class="span3 sb-fixed">
<div class="well sidebar-nav">
<!-- Sidebar Contents -->
</div>
</div>
サイドバーは、ビューポットが768pxよりも大きい場合にのみ修正されるようになりました。
これはjavascriptなしでは不可能です。私はaffix.jsが複雑すぎると思うので、私はむしろ使用します:
現在のBootstrapバージョン(3.3.2)では、ナビゲーション用の固定サイドバーを実現する良い方法があります。
このソリューションは、再導入されたcontainer-fluidクラスでもうまく機能します。つまり、レスポンシブなフルスクリーンレイアウトを簡単に作成できます。
通常、固定幅とマージンを使用する必要があります。そうしないと、ナビゲーションがコンテンツとオーバーラップしますが、空のプレースホルダー列の助けを借りて、コンテンツは常に正しい場所に配置されます。
以下のセットアップでは、ウィンドウのサイズを768px未満に変更するとコンテンツがラップされ、固定ナビゲーションが解除されます。
実際の例については、 http://www.bootply.com/ePvnTy1VII をご覧ください。
CSS
@media (min-width: 767px) {
#navigation{
position: fixed;
}
}
HTML
<div class="container-fluid">
<div class="row">
<div id="navigation" class="col-lg-2 col-md-3 col-sm-3">
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 1</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-3 col-sm-3 hidden-xs">
<!-- Placeholder - keep empty -->
</div>
<div id="main" class="col-lg-10 col-md-9 col-sm-9 fill">
...
Huge Content
...
</div>
</div>
</div>
私はアンドレスの回答から始めて、次のようなスティッキーなサイドバーを取得しました。
HTML:
<div class="span3 sidebar-width">
<div class="well sidebar-nav-fixed">
Sidebar
</div>
</div>
<div class="span9 span-fixed-sidebar">
Content
</div> <!-- /span -->
CSS:
.sidebar-nav-fixed {
position:fixed;
}
JS/jQuery:
sidebarwidth = $(".sidebar-width").css('width');
$('.sidebar-nav-fixed').css('width', sidebarwidth);
contentmargin = parseInt(sidebarwidth) + 60;
$('.span-fixed-sidebar').css('marginLeft', contentmargin);
ビューポートのサイズが変更されたときに 'sidebarwidth'変数を更新するためにJSも必要だと思います。
修正navまたは必要なすべてのタグを取得するのは非常に簡単です。必要なのは、このように修正タグを記述して、それをあなたのボディセクションに入れることです
<div style="position: fixed">
test - try scroll again.
</div>