使用 Twitter Bootstrap 响应式地重新排序 div?

Posted

技术标签:

【中文标题】使用 Twitter Bootstrap 响应式地重新排序 div?【英文标题】:Reordering divs responsively with Twitter Bootstrap? 【发布时间】:2013-09-02 02:55:10 【问题描述】:

我正在使用Twitter Bootstrap v3 并希望使用column ordering 和offsetting 响应地重新排序元素。

这就是我想要使用我的元素的方式。在 -xs-sm 断点处,包含 div 堆叠 4 到一行:

-md-lg 断点处,包含 div 堆叠 2 到一行:

这是当前代码 - 我知道如何在包含的 div 上设置类,但不知道在 A、B 和 C 上:

  <div class="row">
    <div class="containing col-xs-6 col-sm-6 col-md-3 col-lg-3">
      <div class="row">
       <div class="a col-xs-12 col-sm-12 col-md-6 col-lg-6">Content of A</div>
       <div class="b col-xs-12 col-sm-12 col-md-6 col-lg-6">Content of B</div>
       <div class="c col-xs-12 col-sm-12 col-md-6 col-lg-6">Content of C</div>
      </div>
    </div>
    ... more containing divs...
  </div>

我不知道如何使用 Bootstrap 3 的 column ordering 和 offsetting 以正确的顺序获得 A、B 和 C。真的有可能吗?

这是我使用 JSFiddle 所获得的:http://jsfiddle.net/3vYgR/

【问题讨论】:

“4/2 堆叠成一行”是什么意思?你的意思是第一个版本是4个单位高,第二个是2个单位?或者你的意思是第一个版本可以在水平线上有 4 个 a-b-c 组,第二个可以有 2 个? 【参考方案1】:

Bootstrap 4Bootstrap 5 的用户会希望看到这个问题: Bootstrap change order of columns


Bootstrap 3(原始答案)

我想你想看看 pushpull 类...

<div class="row">
   <div class="a col-xs-12 col-sm-12 col-md-6 col-lg-6 col-lg-push-6 col-md-push-6">Content of A</div>
   <div class="b col-xs-12 col-sm-12 col-md-6 col-lg-6 col-lg-pull-6 col-md-pull-6">Content of B</div>
   <div class="c col-xs-12 col-sm-12 col-md-6 col-lg-6 col-lg-push-6 col-md-push-6">Content of C</div>
</div>

演示:http://bootply.com/77853

【讨论】:

这正是我想要的,谢谢!对于任何阅读这里的人来说,都是推/拉文档的链接:getbootstrap.com/css/#grid-column-ordering 虽然我仍然不完全理解推拉的确切作用...... 您只需要新的网格类,例如从 12 列变为 6 列。不需要 col-sm-* 或 col-lg-* 类,因为它们分别继承了 xs 和 md。 不要忘记,如果您的元素开始出现在意外位置,您可能还需要使用“clearfix”。 这个例子也给出了我的回答中列出的 [C] 的垂直对齐问题。【参考方案2】:

@skelly 提供的答案是一个很好的起点,但确实会导致一些垂直对齐问题。假设 A 是一个 tall div,那么 C 在 A 下方垂直对齐:

[A] [B]
[ ]
    [C]

此外,如果您想更进一步,您可能还需要考虑使用clearfix 块。例如;

<!-- Add clearfix for only the required viewport(s) -->
<div class="clearfix visible-md-block visible-lg-block"></div>

如果没有 clearfix mdlg 可能会变成:

[A] [B]
    [C] [D]

如果您希望最终“列”中的元素超过 2 个,或者元素的高度开始使其他元素失去对齐,这一点尤其重要。

使用clearfix mdlg 将是:

[A] [B]
    [C]
    [D]

小提琴示例:http://jsfiddle.net/L5174o8d/

【讨论】:

有没有办法解决垂直对齐问题?我想要的是相反的,但我有同样的对齐问题。例如:jsfiddle.net/bqop535n 如果我对您的理解正确,那么您应该删除 clearfix 和 push/pulls,例如:jsfiddle.net/qkaL02z8【参考方案3】:

我尝试了 Skelly 的回答中所示的推/拉,但一旦应用了高度,C 就会在新行中结束:http://www.bootply.com/Q3djHYawgb#

如果 B 可以在以小尺寸显示时首先显示,那么我认为在右侧列中创建一行来包含 A 和 C 更有意义:

<div class="containing row">
    <div class="b col-xs-12 col-md-6">Content of B</div>
    <div class="ac col-xs-12 col-md-6">
        <div class="row">
            <div class="a col-xs-12">Content of A</div>
        </div>
        <div class="row">
            <div class="c col-xs-12">Content of C</div>
        </div>
    </div>
</div>

见http://jsfiddle.net/hoodoo99/L2BE9/

【讨论】:

当 XS 启动时,您的示例将 A 置于 B 之下。【参考方案4】:

任何不使用更传统方法的理由,即。 B 向左浮动,其他元素向右浮动?

就像你把它添加到你的 jsfiddle 中的当前 CSS 中一样:

.b 
    float: left;
    width: 50%;
    height: 100px;

.a, .c 
    float: right;
    width: 50%;   
    height: 50px;

见http://jsfiddle.net/E6BFk/

我不确定 Bootstrap 的列排序是否可以实现堆叠效果,也许只有重新排序......尽管关于该功能的文档非常少。

【讨论】:

以上是关于使用 Twitter Bootstrap 响应式地重新排序 div?的主要内容,如果未能解决你的问题,请参考以下文章

Twitter Bootstrap2 100% 高度响应

如何使用 JavaScript 检测 Twitter Bootstrap 3 的响应断点?

如何使用 twitter bootstrap 使文本和画布响应?

Retina iPhone 无法使用响应式 Twitter Bootstrap

如何使用 Twitter Bootstrap 实现响应式 Youtube 嵌入 iframe?

使用响应式 Twitter Bootstrap 内容重叠水平表单的问题