Twitter Bootstrap 流体容器侧边栏切换

Posted

技术标签:

【中文标题】Twitter Bootstrap 流体容器侧边栏切换【英文标题】:Twitter Bootstrap fluid-container Sidebar Toggle 【发布时间】:2012-03-01 22:11:26 【问题描述】:

我正在使用 twitter bootstrap 开发应用程序。 2列布局。一个侧边栏和主要内容。以下是布局。

<div class="container-fluid">
<div class="row-fluid">
<div class="span3 target">
<!--Sidebar content-->
</div>
<div class="span9 ">
        <i class="icon-chevron-left toggles"></i>
<!--Body content-->
</div>
</div>
</div> 

单击内容中的链接时,我想隐藏侧边栏和内容以占据整个页面。目前我设法做到了这种方式,

$(document).ready(function()
$(window).resize(function ()  plot(); );

$('.toggles').click(function() 
  $('.target').toggle('fast', function() 
    $('.contents').toggleClass('span12'),
    $('.contents').toggleClass('span9'),
    $('.toggles').toggleClass('icon-chevron-right'),
  );
);
);

但我在隐藏 span3 后在左侧看到了一个边距。这需要删除。同样在这种隐藏方法中,第一次单击 span3 隐藏,span9 变为 span12。这在某种程度上工作正常。但在第二次点击 span3 首先显示,然后只有内容 span12 减少到 span9。由于这个内容会向下跳,直到它减少到 span9。我想解决这个问题。在第二次点击时,span12 先到 span 9,然后边栏显示.. 类似的东西。

我见过很多类似的帖子,其中使用“内容”和“侧边栏”类而不是“spanXX”。但它不适用于我的情况。我不知道为什么。 请帮帮我..

【问题讨论】:

【参考方案1】:

由于 jQuery 添加的切换效果的动画,您的span9 div 正在向下跳跃,它会同时为宽度和高度设置动画,因此您在被切换的 div 周围的内容会随着动画的进行而被向下推。您可以通过将动画过程加速到100 毫秒或绝对定位侧边栏来克服这个问题。至于由bootstrap.css 本身引起的保证金问题,在第 222 行,我们有以下内容:

.row-fluid > [class*="span"]:first-child 
  margin-left: 0;

first-child 伪元素属性 margin:0 到第一个元素,在这种情况下是被切换的侧边栏,所以一旦侧边栏被隐藏,第二个 span 标签(内容 div)不会' t 继承此属性并保留应用于span 标记的默认margin,例如

.row-fluid > [class*="span"] 
  float: left;
  margin-left: 2.127659574%;

你可以用 jQuery 克服这个边距问题。

这是我制作的几个演示:

Hiding sidebar with no transition effects Hiding sidebar with minimal transition effect

更新了小提琴,修复了评论者发现我没有注意到的问题,现在它可以正常工作了。添加了一个 .no-sidebar 类,该类在切换时添加,该类删除了由引导程序创建的 margin-left,因此现在它可以很好地与响应式样式表一起使用。

http://jsfiddle.net/andresilich/dQ5b7/23/

【讨论】:

这是一个很好的解决方案。但是,我发现了一个您可以在演示中看到的问题。每当您单击#content 的任何元素时,您的边距都会发生变化。你能解决它吗? @NelsonReis 边距会发生变化,因为它是一个流动的文档,如果您想要一个固定的文档,您只需将 &lt;div class="container-fluid"&gt; 更改为简单的 container 并将 &lt;div class="row-fluid"&gt; 容器更改为简单的&lt;div class="row"&gt; @NelsonReis 这是一个没有流体痕迹的修补版本,jsfiddle.net/dQ5b7/21 我不是这个意思。如果您尝试单击#content 上的任何元素,例如页面上的任何文本,边距将会改变。似乎事件是在任何元素单击时触发的,而不是在您单击切换元素时触发的。 @NelsonReis 更新了小提琴,现在它工作正常,添加了一个类来切换而不是直接在 jquery 中切换 css,这样演示可以支持响应式样式表设置的媒体查询。 demo【参考方案2】:

试试这两个


代码https://github.com/IronSummitMedia/startbootstrap-simple-

演示http://ironsummitmedia.github.io/startbootstrap-simple-sidebar


更新(再添加一个)

代码 http://www.bootstrapzero.com/bootstrap-template/facebook

演示 http://www.bootply.com/render/96266


【讨论】:

以上是关于Twitter Bootstrap 流体容器侧边栏切换的主要内容,如果未能解决你的问题,请参考以下文章

修复了流体推特引导程序 2.0 中的侧边栏导航

使用 Twitter BootStrap Css Toolkit 没有侧边栏时的全宽内容

如何使用 Twitter Bootstrap v3.0 构建两列流体布局

Twitter Bootstrap Css根据父行流体修复孩子的高度

在 Rails 布局中使用 Sass 的 Twitter Bootstrap

Twitter Bootstrap2 100% 高度响应