Bootstrap 3 个不同高度的响应列

Bootstrap 3 responsive columns of varying heights

编辑 定价表的内容都是动态生成的,我无法预测它们的高度,我只是使用 400px图表的案例。所以我无法为每一列设置静态高度作为修复。

我有 8 个定价表 都是相似高度接近400px,最大(红色方块)为430px,最小为390px

响应式 class 列:class="col-lg-3 col-md-4 col-sm-6"

HTML布局:

<div class="row">
    <% columns.each do |column| %>
        <div class="col-lg-3 col-md-4 col-sm-6">
            CONTENT
        </div>
    <% end %>   
</div>

如何防止列被推入 "new row",即 所有列都包含在同一个 div.row 标记中,因此它们可以做出响应。 但是在第二组列中,前两个 "slots" 被跳过,但是第三行(未显示)像正常一样开始。

重要的是它们都在同一个 .row 对象中 这样响应方面就可以工作并且列会崩溃。

问题图解:

我想要的是更像这样的东西:

你可以巧妙地使用媒体查询,并根据分辨率大小清除下一行中的第一项。

.regular {
    background: gray;
    height: 350px;
    margin-bottom: 30px;
}
.tall {
    background: red;
    height: 500px;
    margin-bottom: 30px;
}

/* Small Devices, Tablets */
@media only screen and (min-width : 768px) {
    .fix-row > div:nth-child(3) {
        clear: left;
    }
}

/* Medium Devices, Desktops */
@media only screen and (min-width : 992px) {
    .fix-row > div:nth-child(3) {
        clear: none;
    }
    .fix-row > div:nth-child(4) {
        clear: left;
    }
}

/* Large Devices, Wide Screens */
@media only screen and (min-width : 1200px) {
    .fix-row > div:nth-child(3) {
        clear: none;
    }
    .fix-row > div:nth-child(4) {
        clear: none;
    }
    .fix-row > div:nth-child(5) {
        clear: left;
    }
}
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row fix-row">
        <div class="col-lg-3 col-md-4 col-sm-6">
            <div class="regular">
                CONTENT
            </div>
        </div>
            <div class="col-lg-3 col-md-4 col-sm-6">
            <div class="tall">
                CONTENT
            </div>
        </div>
        <div class="col-lg-3 col-md-4 col-sm-6">
            <div class="regular">
                CONTENT
            </div>
        </div>
        <div class="col-lg-3 col-md-4 col-sm-6">
            <div class="regular">
                CONTENT
            </div>
        </div>
        <div class="col-lg-3 col-md-4 col-sm-6">
            <div class="regular">
                CONTENT
            </div>
        </div>
        <div class="col-lg-3 col-md-4 col-sm-6">
            <div class="regular">
                CONTENT
            </div>
        </div>
        <div class="col-lg-3 col-md-4 col-sm-6">
            <div class="regular">
                CONTENT
            </div>
        </div>
        <div class="col-lg-3 col-md-4 col-sm-6">
            <div class="regular">
                CONTENT
            </div>
        </div>
        <div class="col-lg-3 col-md-4 col-sm-6">
            <div class="regular">
                CONTENT
            </div>
        </div>
</div>

JSFiddle 示例: http://jsfiddle.net/tkL8edwj/

工作原理:

我使用媒体查询来确定最后一行项目的时间,然后使用 CSS 伪选择器 nth-child(n) 指定行中的最后一个项目。

由于您使用 col-lg-3col-md-4col-md-6 作为网格项 类,我可以根据默认 Bootstap 断点。

col-lg-4 在某个点 (1200px) 中断,因为您使用的是 4 我知道该行中有 3 个项目 (12/4 = 3)。这意味着我可以针对行中的每个 5th div 并获取每行的第一项,然后使用 clear: left 确保它清除浮动div秒之前。

其余断点也一样。我会注意到我还在必要时将 clear 重置为 clear: none,这样之前的目标就不会在错误的分辨率下中断。

我很清楚你在说什么,因为我 运行 也遇到过同样的问题。我不知道ruby,但答案很简单:

  1. 使用带有计数器的 for 循环 i
  2. i % 4 == 0 时,在 <div class='col'>.
  3. 之后打印:<%= </div><div class="row"> %>

这样,每 4 个条目,class='row' 将停止并创建一个新条目。最后一行不会影响下一行, class='col' 也不会受到影响。这在屏幕尺寸减小时也有效。

在 3 列 md、2 列 sm、4 列 lg 之后,您可以使用 mod (%) 添加 "clear:both" 样式的 div。

另一种方法是像这样使用 CSS column-width..

.row {
 -moz-column-width: 20em;
 -webkit-column-width: 20em;
 -moz-column-gap: 10px;
 -webkit-column-gap:10px; 
}

.row > .col-lg-3 {
 display: inline-block;
 padding: 0;
 margin: 10px;
 width: 100%; 
 float:none;
}

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