引导网格未按预期工作[重复]

Posted

技术标签:

【中文标题】引导网格未按预期工作[重复]【英文标题】:bootstrap grid not working as expected [duplicate] 【发布时间】:2014-06-23 16:56:20 【问题描述】:

我使用 bootstrap 3 创建了一个网格设计,但 div 没有正确堆叠

这是我得到的

看第二行。第一个和第三个低点工作正常,但看起来第二行受第一行内容的影响。如何解决这个问题?

这是我的 html

    <div class="col-md-2 col-xs-12 col-sm-3 songblock" id="songblock">
<div class="album-art" id="albumArt">
<img src="images/glass.jpg"  />
</div>
<div class="song-text">
<div class="song-box-title">Song title</div>
<div class="song-box-channel">Channel Name</div>
<div class="song-box-views">202,432,121</div>
</div>
</div>
</div>

<div class="col-md-2 col-xs-12 col-sm-3 songblock" id="songblock">
<div class="album-art" id="albumArt">
<img src="images/glass.jpg"  />
</div>
<div class="song-text">
<div class="song-box-title">Song title</div>
<div class="song-box-channel">Channel Name</div>
<div class="song-box-views">202,432,121</div>
</div>
</div>
</div>

在 css 中我被告知这样做-:

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

【问题讨论】:

网格的每一“行”都需要包裹在&lt;div class="row"&gt;中,否则浮动不会被清除(列是浮动的)。 我在截图中看到了13张图片,但只有&lt;img&gt;标签。 使用 javascript 填充数据,这是 2 个 div 的示例。我只是使用javascript一个接一个地堆叠每个具有该示例数据的div。 仅供参考 - .span*:first-child 是引导程序 2 的包装问题,它不适用于引导程序 3,因为 BS3 使用不同的盒子模型。但是,由于 BS3 不再使用“span”,这应该不会对您的页面产生任何影响。 【参考方案1】:

查看有问题的代码,问题似乎在于列的高度不一致。它包裹在第 6 个元素下方,位于第 5 个元素的右侧,比第 6 个元素高。如果您将正方形设置为特定高度,那么它将作为适当的网格工作,并且仍然允许您使其具有响应性,以便您的行可以针对不同的分辨率具有不同的宽度。 如果您使用 clearfixes,那么您的行总是必须以相同的计数结束。

根据一些答案,似乎对 class='row' 的需求可能有些混淆。在 Bootstrap 2 中,您确实需要为每一行添加新行,因为 :first-child 的边距与其余跨度不同。但是,Boostrap 3 使用:

box-sizing:border-box

这允许它为每个 col-* 设置相同的填充。因此,正如您从以下 html 中看到的那样,不存在列换行问题:

<!doctype html>
<html>
    <head>
        <link rel='stylesheet' type='text/css' href='//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css' />
    </head>
    <body>
        <div class='container'>
            <div class='row'>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
                <div class='col-xs-2'><div style='background-color:navy;height:30px;margin-top:6px;'>&nbsp;</div></div>
            </div>
        </div>
    </body>
</html>

因此,您不需要一行来包装每组 6 个 col-*。如果你这样做了,那么响应式功能将不起作用。例如。您可以使用col-md-2 col-sm-3 col-xs-6,并且 col-xs-6 每 2 个条目需要一个新行, col-sm 每 4 个条目需要一个新行, col-md 每 6 个条目需要一个新行。显然,我们无法更改 HTML 的屏幕尺寸...所以,当您希望动态数据包含在网格中时,您不想为每个分组使用一行。有意义吗?

但是,您确实需要一个带有负数 margin-left:-20px;margin-right:-20px; 的 ROW 来抵消容器的 20px 填充...否则您将遇到包装问题,您的 col-* 宽度最终比数量大 40px .

无论如何,我只是想为那些碰巧在这个页面上结束并开始认为他们必须像旧的 BS2 一样用行包装每个组的人做这个澄清。

【讨论】:

在我的情况下,之前无法设置高度,因为它不可预测。 @user3282115,是的,这主要是个人喜好。当我构建媒体列表时,我希望所有内容都具有相同的大小。所以,在同样的情况下,我可能会强制设置一个静态的“允许的最大高度”,隐藏溢出,并且很可能在框周围放置一个几乎不可见的边框以使所有内容对称。【参考方案2】:

也许添加带有“行”类的 div。

<div class="row">
  <div class="col-md-2 col-xs-12 col-sm-3 songblock" id="songblock">
  </div>
</div>

或者也尝试只使用“col-md-#”类并让rest默认。

<div class="row">
  <div class="col-md-2 ongblock" id="songblock">
  </div>
</div>

【讨论】:

【参考方案3】:

您遇到浮动结算问题。在第 6 列 div 之后添加:

   <div class="clearfix visible-md"></div>

如果您在其他视口上遇到同样的问题,您可以添加更多可见的实例:

   <div class="clearfix visible-sm visible-md"></div>

更多信息:响应列重置:http://getbootstrap.com/css/#grid

【讨论】:

工作得很好,非常感谢。 是的,这需要在 col-sm 的第 4 个条目之后和 col-md 的第 6 个条目之后进行 clearfix。似乎设置高度会是一个更好的方法,除非高度是如此不可预测,以至于这使得这不可行......因为在不同的地方为不同的分辨率放置 clearfixes 会很快变得混乱,恕我直言

以上是关于引导网格未按预期工作[重复]的主要内容,如果未能解决你的问题,请参考以下文章

动画未按预期工作[重复]

枕头图像打开保存未按预期工作[重复]

Spring Security:antMatcher 的序列未按预期工作 [重复]

Bootstrap 4 - col垂直对齐未按预期工作[重复]

Spring Boot中的Spring安全配置未按预期工作[重复]

js 正则表达式未按预期工作。未检测到换行符[重复]