【问题标题】:Pull Bootstrap grid elements vertically垂直拉动 Bootstrap 网格元素
【发布时间】:2014-07-28 18:30:25
【问题描述】:

我正在使用 Bootstrap 3 网格构建布局,应按如下方式堆叠:

桌面:

1 | 2
1 | 2
- | 2
3 | 2

手机:

1
1
-
2
2
2
2
-
3

在另一篇文章中,我找到了一个解决方案,可以将 box2 向右浮动,以便网格在桌面上正确堆叠。但是,这只适用于 box2 高于 box1 的情况。如果不是,box3 将显示在 box2 下方,而不是 box1。如上所示,还有其他方法可以堆叠这些盒子吗?所有三个框都可以有不同的高度,并且可以包含任意数量的文本、图像、表格等。

http://jsfiddle.net/G9WPv/

【问题讨论】:

  • “仅在 box2 高于 box1 时有效”,但它似乎有效 when 2 is below 1?这个例子有什么问题?
  • @ZachSaucier 问题是“[它] 仅在 box2 高于 box1 时才有效”(jsfiddle.net/G9WPv/3)。无论 box1 和 box2 的高度如何,我都希望它始终低于 box1。
  • 啊,所以更高是指更高(:感谢您的澄清。每组的宽度是(以百分比/像素/其他单位为单位)还是根据内容动态?
  • @ZachSaucier 是的,完全正确 :) 它们在演示中被定义为网格,因此它们是基于窗口大小的动态的。

标签: html css twitter-bootstrap


【解决方案1】:

这在 CSS 中是非常可能的,你可以通过 Bootstrap 的网格布局来做到这一点。为了解决这个问题,您需要利用左右浮动的属性。

演示:http://www.bootply.com/l0Flnma2Im

考虑以下示例。您希望这会在 xs 视口上按预期 100% 显示,因为每个视口都将按照您想要的顺序显示 100% 宽度。而且,您希望它在 md/lg 浏览器上也能按预期显示,左边是 1/3,右边是 2。

<div class="col-xs-12 col-md-6">
  <div>1<br>1</div>
</div>
<div class="col-xs-12 col-md-6 pull-right">
  <div>2<br>2<br>2<br>2<br>2</div>
</div>
<div class="col-xs-12 col-md-6">
  <div>3</div>
</div>

现在,出现的唯一问题是“1”块扩展得比“2”块大。发生这种情况时,右侧会出现 3。为什么会这样?发生这种情况是因为浮动只是试图填补右侧的空白。但是,我们可以通过使用clear: left; 来强制它始终位于左侧,以确保其左侧不会出现任何内容。

.always-left {
    clear: left;
  }

代码现在变成:

<div class="col-xs-12 col-md-6">
  <div>1<br>1</div>
</div>
<div class="col-xs-12 col-md-6 pull-right">
  <div>2<br>2<br>2<br>2<br>2</div>
</div>
<div class="col-xs-12 col-md-6 always-left">
  <div>3</div>
</div>

【讨论】:

  • 框可以包含任意行数的文本、图像、表格等,所以我事先不知道它们的高度。因此,您的解决方案似乎不适用。
  • 以我的例子来说,你在什么情况下会遇到身高问题?如您所见,它没有指定高度。请编辑您的主要问题以及附加要求。
  • 我事先不知道box的内容,所以如果它们的高度不同,会导致像bootply.com/6Ka8NnKTUd那样的奇怪堆叠(box1和box3之间的间隙)。
  • 啊,好的。查看我更新的答案以获得更简单的解决方案。
  • 太棒了,就是这样! box2 上的float:right;(即pull-right)和box3 上的clear:left; 成功了。谢谢。
【解决方案2】:

这很可能只使用媒体查询和一些绝对定位。

Look at this fiddle

您需要将 3 个 div 包装在一个容器中。

基本上你的 CSS 看起来像这样。

.container {
    width: 100%;
    position: relative;
}
#box1 {
    background-color: #d7d7d7;
    width: 100%;
}
#box2 {
    background-color: #e7e7e7;
    width: 100%;
    position: relative;
}
#box3 {
    background-color: #f7f7f7;
    width: 100%;
}

@media screen and (min-width: 700px) {
    #box1, #box3 {
        width: 40%;
    }
    #box2 {
        width: 60%;
        position: absolute;
        top: 0;
        right: 0;
    }
}

这些盒子可以是任何尺寸,在移动设备尺寸的屏幕上,它们会以正确的顺序堆叠。

当然,对于引导网格系统,可能需要进行一些调整才能使其恰到好处......但这就是它的本质。

和平。

【讨论】:

  • 设置宽度、设置元素数量和设置高度对于少量元素可能是合理的。但是,如果不满足这些条件中的任何一个,那么唯一的选择就是使用 js 替代方案
  • @ZachSaucier 这个例子可能有一个基于百分比的宽度,但高度或任何元素可以根据需要/想要的大小......但在原始问题的范围内它不是显然需要 3 个以上的容器。
  • 这可行,但会导致由绝对定位引起的container 溢出问题。关于如何解决这个问题的任何想法?
  • @niko 发布了一个很好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
相关资源
最近更新 更多