Bootstrap 3.0-固定列サイズを含む流動グリッド


126

ブートストラップの使い方を学んでいます。現在、私はレイアウトをたどっています。Bootstrapはかなりクールですが、私が目にするものはすべて時代遅れのようです。私の人生において、私には理解できない基本的なレイアウトだと思います。私のレイアウトは次のようになります:

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

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


行と列に沿ってテーブルを使用することを検討してください。
kalu 2014

Bootstrap 3の固定流体の例を次に示します。codeply.com
Zim

回答:


32

グリッドシステムは流動的で応答性の高いものになるように設計されているため、Bootstrap 3で流体と固定幅を簡単に組み合わせる方法はありません。何かをハッキングしようとすることもできますが、レスポンシブグリッドシステムが何をしようとしているかに反します。その意図は、さまざまなデバイスタイプ間でレイアウトフローを作成することです。

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


5
この種のことはFlexboxが完全にサポートするのを待たなければならないと思いますが、それでも本当に不十分です。ブートストラップのモデルは、列の数が静的な場合に最適ですが、たとえば、列を動的に非表示および表示できる場合、少なくとも1つの列が流動的であることをサポートすることは、より理にかなっています。
Nate Bundy 2013年

1
回答を編集して、このリンクへの参照をソリューションに含めてください。よろしく:stackoverflow.com/questions/8740779/...
モーティー

151

編集:多くの人がこれを望んでいるようですので、より一般的な使用例を含む短いガイドをこちらの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;
}

これはいいですが、たとえば<p> <a class="btn btn-default" href="#" role="button">詳細を表示&raquo; </a> </ p>またはブートストラップドロップダウンの場合、これらは固定列では機能しません。これに対する修正はありますか?
Vaclav Elias、2015年

@VaclavEliasは、position:relativeのドロップダウンにフルサイズの差分を入れてみますか?問題を示すjsfiddleを作成すると役立ちます
w00t

これがすべてのブラウザーでどのように機能するかはまだわかりませんが、それ以外の点では、よくできました。
Phil Cooper

右側の固定列でこれを行う方法はありますか?
Sean

3
position: fixedつまり、その列のコンテンツをスクロールすると、ページの他の部分の上に表示されます。私の場合、を使用して修正しましたposition: absolute
Laurent

26

または、表セルで表示プロパティを使用します。

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/


1
問題は、あなたがEXを使用しているときです。`.visible-xs , becouse display:table-cell`がdisplay:block...になる
Dariusz Filipiak

21

私は少し異なる問題がありました:

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

その結果、私は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>

4
@Schemetrical質問はありませんでした。私は少し異なる問題があることを説明し、Googleからここに到着する他の人々を助けるために私が見つけた解決策を追加しました。
Paddy Mann

1
あなたの答えは非常に貴重です。非常にシンプルですが、私の問題を解決します。どうもありがとう。
Charles

行divに、包含divがあなたの答えで持っているマージンを与えることができないのはなぜですか?
GreenAsJade 2016年

この答えは真剣に合法です。ブートストラップ列を利用する必要があるが、特定の画面幅で折りたたまないようにするには、これが必要です(たとえば、col-md-3の代わりにpull-left / pull-rightを使用します)。
2016年

これは素晴らしい答えのようです。私marginpadding私の列の真ん中にいくつかの問題がありますが、それは解決可能な問題です。このアプローチを取ることの意図しない結果は何ですか?
Vishal

15

2018年更新

IMO、Bootstrap 3でこれに取り組む最善の方法は、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にはフレックスボックスがあるので、このようなレイアウトははるかに簡単です:http : //www.codeply.com/go/eAYKvDkiGw


3

OK、私の答えはとてもいいです:

<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をください


1

UPDATE 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からではない):この回答の理解を容易にするために、以下のコードスニペットを追加します。しかし、期待どおりに動作しないようです。


-1この答えは私には意味がありません。列の合計は12になりません。名前とキーボードの列が重複しています。+2票あるかわかりません。
マリアーノデサンツェ2014年

-3

なぜあなた自身のCSSで左の2列を固定に設定し、残りのコンテンツのために完全な12列の新しいグリッドレイアウトを作成しないのですか?

<div class="row">
    <div class="fixed-1">Left 1</div>
    <div class="fixed-2">Left 2</div>
    <div class="row">
        <div class="col-md-1"></div>
        <div class="col-md-11"></div>
    </div>
</div>

Bootstrapでは、列のみが行の直接の子になることができます。
Sai Dubbaka 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.