web-dev-qa-db-ja.com

Bootstrap 3.0 - 固定列サイズを含むFluid Grid

Bootstrapの使い方を学んでいます。現在、私はレイアウトを通して私の道を歩んでいます。 Bootstrapはかなりクールですが、私が見るものはすべて時代遅れのようです。私の人生のために、私は私が理解することはできません基本的なレイアウトだと思うものがあります。私のレイアウトは次のようになります。

---------------------------------------------------------------------------
|       |       |                                                         |
|       |       |                                                         |
| 240px | 160px | All Remaining Width of the Window                       |
|       |       |                                                         |
|       |       |                                                         |
--------------------------------------------------------------------------|

このグリッドはウィンドウの高さ全体を占める必要があります。私の理解からは、固定幅と流動幅を混在させる必要があります。しかし、Bootstrap 3.0はもはや流動的なクラスを持っていないようです。たとえそうであったとしても、私は流動的なカラムと固定されたカラムのサイズをどのように混ぜ合わせるかを考え出すことができないようです。誰もがBootstrap 3.0でこれを行う方法を知っていますか?

123
Node Newbie

Bootstrap 3に流動的な幅と固定幅を混在させる簡単な方法は本当にありません。グリッドシステムは流動的で反応のよいものになるように設計されているので、これはそのようなものです。ハッキングを試みることもできますが、Responsive Gridシステムが何をしようとしているのかに反することになります。その目的は、レイアウトをさまざまなデバイスタイプに流すことです。

このレイアウトを使い続ける必要がある場合は、グリッドを使用せずにカスタムCSSを使用してページをレイアウトすることを検討します。

30
Steve K.

edit:多くの人がこれをやりたがるように思われるので、ここでより一般的なユースケースで短いガイドを書きました https) ://www.atlascode.com/bootstrap-fixed-width-sidebars/ 。それが役に立てば幸い。

Bootstrap3グリッドシステムは行のネストをサポートしています。これにより、固定幅のサイドメニューを表示できるようにルート行を調整できます。

ルート行の左にパディングを入れてから、通常のグリッドレイアウト要素を含む子行を作成する必要があります。

これは私が通常これを行う方法です http://jsfiddle.net/u9gjjebj/

html

<div class="container">
    <div class="row">
        <div class="col-fixed-240">Fixed 240px</div>
        <div class="col-fixed-160">Fixed 160px</div>
        <div class="col-md-12 col-offset-400">
            <div class="row">
            Standard grid system content here
            </div>
        </div>
    </div>
</div>

cSS

.col-fixed-240{
    width:240px;
    background:red;
    position:fixed;
    height:100%;
    z-index:1;
}

.col-fixed-160{
    margin-left:240px;
    width:160px;
    background:blue;
    position:fixed;
    height:100%;
    z-index:1;
}

.col-offset-400{
    padding-left:415px;
    z-index:0;
}
149
Dean North

またはtable-cellでdisplayプロパティを使用します。

cSS

.table-layout {
    display:table;
    width:100%;
}
.table-layout .table-cell {
    display:table-cell;
    border:solid 1px #ccc;
}

.fixed-width-200 {
    width:200px;
}

html

<div class="table-layout">
    <div class="table-cell fixed-width-200">
        <p>fixed width div</p>
    </div>
    <div class="table-cell">
        <p>fluid width div</p>    
    </div>
</div>

http://jsfiddle.net/DnGDz/

26
Frankey

私は少し違う問題を抱えていました:

  • フルウィンドウレイアウトの一部としてではなく、テーブルの一部として固定列と流動列を組み合わせる必要がありました
  • 左右両方に固定された列を持つ必要がありました
  • 包含行のフルハイトを使用した列の背景については心配していませんでした

その結果、私は左右の列をfloatに頼ることにしましたが、それからその間の流動的な列を行うためにBootstrapのrowを使うことができました。

<div>
    <div class="pull-left" style="width:240px">Fixed 240px</div>
    <div class="pull-right" style="width:120px">Fixed 120px</div>
    <div style="margin-left:240px;margin-right:120px">
        <div class="row" style="margin:0px">
            Standard grid system content here
        </div>
    </div>
</div>
21
Paddy Mann

更新された2018

Bootstrap 3でこれにアプローチするためのIMOでは、Bootstrapのブレークポイントに合わせてメディアクエリを使用することで、固定幅の列のみを大きい画面にして、レイアウトを小さい画面に対応させることができます。このようにあなたは即応性を保ちます...

@media (min-width:768px) {
  #sidebar {
      width: inherit;
      min-width: 240px;
      max-width: 240px;
      min-height: 100%;
      position:relative;
  }
  #sidebar2 {
      min-width: 160px;
      max-width: 160px;
      min-height: 100%;
      position:relative;
  }
  #main {
      width:calc(100% - 400px);
  }
}

Working Bootstrap Fixed-Fluid Demo

Bootstrap 4にはflexboxがあるので、このようなレイアウトははるかに簡単になります。 http://www.codeply.com/go/eAYKvDkiGw

14
Zim

はい、私の答えはスーパーニースです。

<style>
    #wrapper {
        display:flex;    
        width:100%;
        align-content: streach;
        justify-content: space-between;
    }    

    #wrapper div {
        height:100px;
    }

    .static240 {
        flex: 0 0 240px;
    }
    .static160 {
        flex: 0 0 160px;
    }

    .growMax {
        flex-grow: 1;
    }

</style>

<div id="wrapper">
  <div class="static240" style="background:red;" > </div>
  <div class="static160"  style="background: green;" > </div> 
  <div class="growMax"  style="background:yellow;"  ></div>
</div>

jsfiddle遊び場

すべてのブラウザをサポートしたい場合は、 https://github.com/10up/flexibility を使用してください。

3

アップデート2014-11-14:以下の解決策は古すぎる、私はフレックスボックスのレイアウト方法を使用することをお勧めします。概要は次のとおりです。 http://learnlayout.com/flexbox.html


私の解決策

html

<li class="grid-list-header row-cw row-cw-msg-list ...">
  <div class="col-md-1 col-cw col-cw-name">
  <div class="col-md-1 col-cw col-cw-keyword">
  <div class="col-md-1 col-cw col-cw-reply">
  <div class="col-md-1 col-cw col-cw-action">
</li>

<li class="grid-list-item row-cw row-cw-msg-list ...">
  <div class="col-md-1 col-cw col-cw-name">
  <div class="col-md-1 col-cw col-cw-keyword">
  <div class="col-md-1 col-cw col-cw-reply">
  <div class="col-md-1 col-cw col-cw-action">
</li>

scss

.row-cw {
  position: relative;
}

.col-cw {
  position: absolute;
  top: 0;
}


.ir-msg-list {

  $col-reply-width: 140px;
  $col-action-width: 130px;

  .row-cw-msg-list {
    padding-right: $col-reply-width + $col-action-width;
  }

  .col-cw-name {
    width: 50%;
  }

  .col-cw-keyword {
    width: 50%;
  }

  .col-cw-reply {
    width: $col-reply-width;
    right: $col-action-width;
  }

  .col-cw-action {
    width: $col-action-width;
    right: 0;
  }
}

あまりにも多くのブートストラップのレイアウトコードを変更せずに。


更新(OPからではありません):この答えの理解を容易にするために以下のコードスニペットを追加してください。しかし、それは期待どおりに機能していないようです。

ul {
  list-style: none;
}
.row-cw {
  position: relative;
  height: 20px;
}
.col-cw {
  position: absolute;
  top: 0;
  background-color: rgba(150, 150, 150, .5);
}
.row-cw-msg-list {
  padding-right: 270px;
}
.col-cw-name {
  width: 50%;
  background-color: rgba(150, 0, 0, .5);
}
.col-cw-keyword {
  width: 50%;
  background-color: rgba(0, 150, 0, .5);
}
.col-cw-reply {
  width: 140px;
  right: 130px;
  background-color: rgba(0, 0, 150, .5);
}
.col-cw-action {
  width: 130px;
  right: 0;
  background-color: rgba(150, 150, 0, .5);
}
<ul class="ir-msg-list">
  <li class="grid-list-header row-cw row-cw-msg-list">
    <div class="col-md-1 col-cw col-cw-name">name</div>
    <div class="col-md-1 col-cw col-cw-keyword">keyword</div>
    <div class="col-md-1 col-cw col-cw-reply">reply</div>
    <div class="col-md-1 col-cw col-cw-action">action</div>
  </li>

  <li class="grid-list-item row-cw row-cw-msg-list">
    <div class="col-md-1 col-cw col-cw-name">name</div>
    <div class="col-md-1 col-cw col-cw-keyword">keyword</div>
    <div class="col-md-1 col-cw col-cw-reply">reply</div>
    <div class="col-md-1 col-cw col-cw-action">action</div>
  </li>
</ul>
0
John Xiao