Fluid Twitter Bootstrap 2.0のサイドバーナビゲーションを修正


回答:


168

注:これを行うブートストラップ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/

更新

レスポンシブブートストラップシートをサポートするようにデモを修正しました。今度は、ブートストラップのレスポンシブ機能でフローします。

注:このデモは上部の固定ナビゲーションバーで流れるため、両方の要素が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;
    }
}

デモここで編集してください


私にとってChromeとFirefoxの両方の場合、そのフィドルには常に幅が1,016ピクセル未満の水平スクロールバー(Chrome)があります。(ここで見やすくjsfiddle.net/U8HGz/130/showこれは/ 1ですが、ウィンドウの幅と高さを「Hello World」の下に表示しています。/2-/ 129が何なのかわかりません。)
TJ Crowder

1
@TJCrowder はサイドバーの道を作るために作成さmargin-left:290pxれた.span-fixed-sidebarクラスの宣言が原因です。それがない場合、コンテンツは小さな画面でサイドバーと重なります。次のbodyように、タグで明示的に非表示にすることで、水平スクロールバーを削除できますbody { overflow-x: hidden; }
Andres Ilich

ありがとう。これは、メディアクエリなどで動作する可能性があります(そのため、非常に狭いウィンドウに表示されます)。しかし、その時点で、とにかくサイドバーを再配置したいと思うでしょう。
TJクラウダー2012

1
@maurisが私のブートストラップのレスポンシブ機能をサポートするように修正しました。
Andres Ilich

1
ここの@miguelcobainは修正バージョンですが、完全にはテストされていませんが、私のテスト環境では問題なく動作しました。別の解決策は、ブートストラップ上の固定セクションのネイティブサポートをもたらすaffixブートストラッププラグインを使用することです。
Andres Ilich 2013

46

最新のBoostrap(2.1.0)には、このタイプのアプリケーション、FYI専用の新しいJS "affix"機能があります。


@AlexanderRechsteinerそうではない。OPは特にBootstrap 2.0について言及しています。
カイル

27

これは応答性の高いウェブデザインを台無しにするでしょう。固定サイドバーをメディアクエリでより適切にラップします。

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より大きい場合にのみ修正されました。



0

私はアンドレスの回答から始め、次のような粘着性のあるサイドバーを取得することになりました。

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も必要だと思います。


0

修正ナビまたは必要なすべてのタグを取得するのは非常に簡単です。必要なのは、このように修正タグを記述し、それをbodyセクションに配置することだけです。

   <div style="position: fixed">
       test - try  scroll again. 
   </div>

0

現在のBootstrapバージョン(3.3.2)では、ナビゲーションの固定サイドバーを実現するための良い方法があります。

このソリューションは、再導入されたコンテナー流体クラスでも適切に機能します。つまり、応答性の高いフルスクリーンレイアウトを簡単に実現できます。

通常は、固定幅とマージンを使用する必要があります。そうしないと、ナビゲーションがコンテンツと重なってしまいますが、空のプレースホルダー列を利用して、コンテンツは常に適切な場所に配置されます。

以下の設定では、ウィンドウのサイズを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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.