Bootstrap 3.0 -包含固定列大小的流体栅格

btxsgosb  于 2022-12-28  发布在  Bootstrap
关注(0)|答案(8)|浏览(154)

我正在学习如何使用Bootstrap。目前,我正在费力地浏览布局。虽然Bootstrap很酷,但我看到的所有东西似乎都过时了。就我的生活而言,我有一个我认为是基本的布局,我无法弄清楚。我的布局如下所示:

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

这个网格需要占据窗口的整个高度。据我所知,我需要混合固定和流动宽度。然而,Bootstrap 3.0似乎不再有流动类了。即使它有,我似乎也不知道如何混合流动和固定列大小。有人知道如何在Bootstrap 3.0中做到这一点吗?

pxy2qtax

pxy2qtax1#

bootstrap3网格系统支持行嵌套,允许您调整根行以允许固定宽度的侧菜单。
您需要在根行上放置一个左填充,然后有一个包含正常网格布局元素的子行。
下面是我通常执行http://jsfiddle.net/u9gjjebj/的方法
超文本标记语言

<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;
}
a1o7rhls

a1o7rhls2#

在Bootstrap 3中,混合可变宽度和固定宽度真的不是一个简单的方法。它的本意是这样的,因为网格系统被设计成一个可变的、响应式的东西。你可以尝试修改一些东西,但这会违背响应式网格系统试图做的事情,它的目的是让布局在不同的设备类型之间流动。
如果您需要坚持使用这种布局,我会考虑使用自定义CSS布局页面,而不使用网格。

rks48beu

rks48beu3#

或使用表格单元格的显示属性;
CSS

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

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

超文本标记语言

<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/

qij5mzcb

qij5mzcb4#

我有一个稍微不同的问题:

  • 我需要将固定列和流动列组合为表的一部分,而不是全窗口布局的一部分
  • 我需要把柱子固定在左边和右边
  • 我并不担心使用包含行的全高的列背景

因此,我采用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>
eufgjt7s

eufgjt7s5#

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将具有flexbox,因此这样的布局将更加容易:http://www.codeply.com/go/eAYKvDkiGw

n3schb8v

n3schb8v6#

好吧,我的回答超级好:

<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 playground
如果希望支持所有浏览器,请使用https://github.com/10up/flexibility

zkure5ic

zkure5ic7#

2014年11月14日更新:下面的解决方案太老了,我建议使用flex框布局方法。下面是一个概述: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;
  }
}

而不需要修改太多 Bootstrap 布局代码。

    • 更新(不是来自OP):**在下面添加代码片段以便于理解此答案。但它似乎没有按预期工作。

一个二个一个一个

myss37ts

myss37ts8#

为什么不在你自己的css中将左边的两列设置为fixed with,然后为剩下的内容创建一个完整的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>

相关问题