【问题标题】:Equal height of child divs in Bootstrap columns - Chrome and SafariBootstrap 列中子 div 的高度相等 - Chrome 和 Safari
【发布时间】:2015-02-21 01:27:28
【问题描述】:

FIDDLE

基本上,目标是具有动态生成的内容的并排列,并且列内的 div 与具有最长内容的 div 具有相同的高度。重要的是不仅 Bootstrap 列的高度相同,而且它们的 子 div 也具有相同的高度。

在将几个不同问题的答案拼凑在一起后,我终于设法通过使用 table-cell 的组合并将所有内容的高度设置为 100% 来实现这一点:

@media (min-width: 768px) {

    .row {
        display: table-row;
        min-height: 100%;
        height: 100%;
    }

    [class*="col-"]{
        float: none;
        display: table-cell;
        background-color: red;  /* Color set just to confirm column heights */
        min-height: 100%;
        height: 100%;
        padding-bottom: 30px;
    }
}

.papers {
    color: #181818;
    border: #ccc solid 1px;
    background-color: #fffaec;
    box-shadow: 
        4px 4px 0 #fffaec,
        5px 5px 0 #ccc,
        9px 9px 0 #fffaec,
        10px 10px 0 #ccc,
        14px 14px 0 #fffaec;
    padding: 0px 30px;    
    text-align: left;
    min-height: 100%;
    height: 100%;
}

.papers:hover {
    background-color: #e9e5d9;
    box-shadow:
        4px 4px 0 #e9e5d9,
        5px 5px 0 #ccc,
        9px 9px 0 #e9e5d9,
        10px 10px 0 #ccc,
        14px 14px 0 #e9e5d9; 
}

或者,所以我想:它适用于 Firefox(我的开发环境),但不适用于 Chrome 或 Safari。为什么?

我需要它在保留 Bootstrap 的可堆叠网格效果的同时工作,并且以尽可能少的黑客方式。如果可能的话,我想用纯 CSS 来做这件事。

我已阅读有关此主题的其他问题,但其中大多数已过时,或者似乎仅适用于控制列本身的高度。

编辑:@Blake 通过直接设置列样式的解决方案:http://jsfiddle.net/7q4xjs25/11/

【问题讨论】:

    标签: css twitter-bootstrap responsive-design height


    【解决方案1】:

    显示为table-row 的元素期望它的父元素表现为table。事实上,将父元素设置为display: table; 将为其子元素启用此上下文。您实际上并不需要 table-row 元素,因此您只需将声明更改为:

    .row {
        display: table;
        min-height: 100%;
        height: 100%;
    }
    

    这应该会导致元素的行为符合您的预期!

    作为解决您对高度的评论的更新,您实际上可以删除所有 height: 100%min-height: 100% 规则。如果它们不存在,table-cell 元素将全部共享最高内容的高度.

    但是,您的其他一些样式似乎确实依赖于这些规则,因此您可能需要进行一些调整。虽然列元素现在将按内容调整大小,但其中的 .papers 元素将不会(因为它们的父元素不再具有可以填充的设定高度).. 并且由于这些元素是视觉样式的元素看起来您已经失去了之前display: table 更改的好处。为了解决这个问题,您需要确保具有视觉样式的元素是带有display: table-cell 的元素。这可能意味着将 papers 的类向上移动到列元素上,然后从那里开始工作以恢复您的间距,或者您仍然可以以不同的方式处理它。

    希望对你有帮助!

    【讨论】:

    • 太棒了,做到了!但是,现在将所有内容设置为 100% 的高度会使列成为浏览器窗口的高度,而不仅仅是高到足以容纳最长的内容。知道我该如何解决吗?感谢您的帮助。
    • 我已经更新了我的答案以触及该问题,希望这能满足您的需求。如果您还有其他问题,请告诉我!
    • 太棒了,谢谢。是的,我曾尝试将样式直接应用于列,但是如果不做一些像col-offset 这样的骇人听闻的事情,我就无法在它们之间获得所需的空间。
    • 我自己尝试了这些调整:jsfiddle.net/7q4xjs25/11 我利用了我们现在处于表格上下文中的事实,并使用border-spacing 来获得论文周围的空间。我注意到的一个小绊脚石是引导程序.row 样式添加了:before:after 伪元素,它们的样式也被设置为display: table;...这会导致一些多余的空间,所以你可能想要只需将它们设置为display: none。干杯!
    • 啊,漂亮!谢谢 - 将样式直接应用于列会使事情变得简单得多。
    猜你喜欢
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2018-03-13
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多