如何使用Twitter Bootstrap实现三列布局?

21

我正在尝试创建一个三列布局,就像以下这样:

http://www.manisheriar.com/holygrail/index.htm

它应该是一个 固定宽度 - 流体宽度 - 固定宽度 的布局。

使用 Twitter Bootstrap,左侧侧边栏和流体内容效果很好。 但我需要添加一个 右侧边栏

4个回答

32

试试这个:http://jsfiddle.net/andresilich/6vPqA/2/

CSS

.container-fluid > .sidebar {
    position: relative;
    top: 0;
    left:auto;
    width: 220px; /* width of sidebar */
}

.left {
    float:left;
}

.right {
    float:right;
}

.container-fluid > .content {
    margin: 0 240px; /* width of sidebars + 10px of margin */
}

HTML

<div class="sidebar left">
    <div class="well">
      <h5>Sidebar</h5>
      .....
    </div>
</div>

<div class="sidebar right">
    <div class="well">
      <h5>Sidebar</h5>
      .....
    </div>
</div>
根据评论,我更新了我的答案,使其可以通过一个类来切换右侧边栏和左侧边栏的可能性。
现在您可以在
div中使用以下内容: CSS
.fixed-fluid {
    margin-left: 240px;
}
.fluid-fixed {
    margin-right: 240px;
    margin-left:auto !important;
}
.fixed-fixed {
    margin: 0 240px;
}

演示: http://jsfiddle.net/andresilich/6vPqA/3/show/ 编辑: http://jsfiddle.net/andresilich/6vPqA/3/


另一个用户问这种方法是否适用于最新版本的bootstrap(写作时为v2.0),因此这里提供了一个使用它的演示:

http://jsfiddle.net/andresilich/6vPqA/13/


太好了,谢谢。我已经给了你答案,但我想问一个相关的问题。我怎样才能“禁用”右侧边栏,使内容可以填充到右侧?这样我就可以在fixed-fluid-fixedfixed-fluid之间进行选择了。再次感谢。 - cbmeeks
2
@cbmeeks,我已经实现了您的建议,并更新了我的答案。这里是带有调整的fiddle链接:http://jsfiddle.net/andresilich/6vPqA/3/show/ - Andres Ilich
嗨Andres,想要感谢你。我更新了这个项目,使用了Twitter Bootstrap v2.0,但是它无法正常工作。清除浮动似乎搞砸了一些东西。你知道如何解决吗? - Jonathan Ong
@JonathanOng,稍加调整后我们就可以让它正常工作。尝试使用最新的Bootstrap 2.0 CSS版本:http://jsfiddle.net/andresilich/6vPqA/13/ - Andres Ilich
所有提出的解决方案都有一个主要问题 - .context 中的第一行至少会有最长侧边栏的高度。 - Viliam
1
@Viliam,你可以把这样的答案看作是起点。我认为只要稍微努力一下,你想要的布局就可以实现。 - Andres Ilich

2

如果有人感兴趣,这里提供了最新的Bootstrap 3版本示例...

http://bootply.com/101100

您只需要将.sidebar-nav-fixed添加到左侧和右侧col-md-3列内的一个DIV中:

.sidebar-nav-fixed {
    width:20%;
}

似乎不起作用。侧边栏实际上并没有固定。如果您扩展页面宽度,侧边栏会增长,左侧的侧边栏会在内容后面。 - morgar

1

在这里:

这个解决方案使用了一个三列的表格布局:左、中、右。外层表格的宽度为100%,左右两列具有固定像素宽度,而中间列则按比例缩放以填充剩余空间。中间列具有一个Bootstrap 3容器,并带有一堆样本col-xx-1。调整浏览器宽度以查看标准的bootstrap网格尺寸调整过程(即当浏览器宽度小于1200时,col-lg-1将变为全宽等等...)
顺便说一句,在bootply的“渲染”模式下更容易玩弄浏览器调整大小:

还有更多的 Bootstrap 内容:


1
这是我能找到的最好的。

http://www.bootply.com/9logoZy2fv

这里是代码:

   <div class="navbar navbar-inverse navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container-fluid">
      <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </a>
      <a class="brand" href="http://bootply.com">Bootply</a>
      <div class="nav-collapse collapse">
        <ul class="nav">
          <li class="active"><a href="#">Home</a></li>
          <li><a href="#">Responsive</a></li>
          <li><a href="#">Layout</a></li>
          <li><a href="#">Example</a></li>
        </ul>
      </div>
    </div>
  </div>
</div>
<div class="container-fluid">
    <div class="row-fluid">
        <div class="span2">
          <!--sidebar-->
          <div class="sidebar-nav-fixed" data-spy="affix" data-offset-top="140">
          <ul class="nav nav-list">
            <li><a href="#">Home</a></li>
            <li><a href="#">Responsive</a></li>
            <li><a href="#">Layouts</a></li>
            <li class="divider"></li>
            <li><a href="#">Bootstrap</a></li>
            <li><a href="#">Resources</a></li>
            <li><a href="#">Modal</a></li>
            <li><a href="#">Carousel</a></li>
            <li class="divider"></li>
            <li><a href="#">Typeahead</a></li>
            <li><a href="#">Themes</a></li>
            <li><a href="#">Template</a></li>
            <li><a href="#">Affix</a></li>
            <li class="divider"></li>
            <li><a href="#">Bootstrap 3</a></li>
            <li><a href="#">Sidebar</a></li>
            <li><a href="#">Grid</a></li>
            <li><a href="#">Column</a></li>
            <li class="divider"></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
          </ul>
          </div>
        </div>
        <div class="span3">

          <!--2nd column-->
          <div id="midCol" data-spy="affix" data-offset-top="250">

            <img src="//placehold.it/300x150/449955/FFF">
            <h4 class="caption">Image Caption <span class="pull-right"><i class="icon-twitter"></i></span></h4>  

            <hr>

            <img src="//placehold.it/300x150/2255EE/EEE">
            <h4 class="caption">Image Caption</h4>  

            <hr>

            <img src="//placehold.it/300x150/992233">
            <h4 class="caption">Image Caption</h4>  

            <hr>

            <img src="//placehold.it/300x150/555555/FFF">
            <h4 class="caption">Image Caption</h4>  

            <hr>

            <img src="//placehold.it/300x150/d9d9d9/EEE">
            <h4 class="caption">Image Caption</h4>  

            <hr>


          </div><!--/middleCol-->

        </div><!--/span3-->
        <div class="span7">

        <div class="well"><h1>3-Column Layout</h1><p>This is a template example that uses the Bootstrap framework to create a responsive three-column layout.
          The left column (narrow) contains a sidebar, the center column (mid) contains features with image/caption, and the right column (widest) contains content.

        </p>
        <a href="http://www.bootply.com/63275" class="btn btn-primary">Details</a>
        <span class="badge pull-right">100</span>
        </div>

        <div class="well"><h1>Affix</h1><p>This layout utilizes the <b>Bootstrap Affix</b> component using data attributes. You can see
        the Affix plugin in action as you scroll down the page. The leftmost side is "pinned" until 140px is reached, and the middle column is un-pinned once 250px is reached.
        See the CSS <code>.affix</code> and <code>.affix-top</code> classes to see how this works.  
        </p>
        <button class="btn">Details</button>  
        </div>

        <div class="well"><h1>Bootply</h1><p>This example layout is compliments of Bootply -- the Bootstrap playground. 
        Bootply lets you play with JavaScript, HTML, CSS and Bootstrap in a simple Web-based editor. Bootply enables you to 
        easily include popular libraries, plugins, extensions and frameworks such as jQuery, FontAwesome, AngularJS, FuelUX and Google Maps.
        </p>
        <a href="http://www.bootply.com" class="btn">Details</a>  
        </div>

        <div class="well"><h1>HTML5 / CSS3</h1><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pharetra varius quam sit amet vulputate. 
        Quisque mauris augue, molestie tincidunt condimentum vitae, gravida a libero. Aenean sit amet felis 
        dolor, in sagittis nisi. Sed ac orci quis tortor imperdiet venenatis. Duis elementum auctor accumsan. 
        <a href="http://www.bootply.com/63275">Edit this on Bootply</a>.</p>
        <button class="btn">Details</button>  
        </div>

        <div class="well"><h1>Snippets</h1><p>Bootply is also a collaborative tool that enables sharing of snippets. There is a repository of more than 1000 Bootstrap-ready code snippets. Find
        code snippets demonstrate common Bootstrap components such as the carousel (sliders), modal, typeahead, navbar, typography, buttons, tabs and icons.</p>
        <a href="http://www.bootply.com" class="btn">Details</a> 
        </div>

          <div class="well"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pharetra varius quam sit amet vulputate. 
        Quisque mauris augue, molestie tincidunt condimentum vitae, gravida a libero. Aenean sit amet felis 
        dolor, in sagittis nisi. Sed ac orci quis tortor imperdiet venenatis. Duis elementum auctor accumsan. 
        Aliquam in felis sit amet augue.</p>
        <button class="btn">Details</button>  
        </div>


        </div>
    </div>
</div>

和 CSS:

body {
  padding-top: 60px;
}
@media (max-width: 979px) {
  body {
    padding-top: 0px;
  }
}

/* uncomment this section to make the sidebar un-pin
.affix-top {
    top:60px;
    position:fixed;
}

.affix {
    position:static;
}
*/

.affix-top {
    top:60px;
    position:fixed;
}

/* custom theme */

#midCol.affix-top {
    position:fixed;
    margin-left:-18px;
    margin-right:10px;
}

#midCol.affix-bottom {
    position:static;
}

#midCol.affix {
    position:static;
}

@media (max-width:1190px) {
  .affix,.affix-top,#midCol.affix,#midCol.affix-top {
      position:static;
  }
}

.caption {
    background-color:#eee;
    padding:10px;
    margin:0;
    color:#555;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接