如何使Bootstrap列都具有相同的高度?


965

我正在使用Bootstrap。如何使三根柱子的高度相同?

这是问题的屏幕截图。我希望蓝色和红色列与黄色列的高度相同。

三个引导程序列,中间列比其他两列长

这是代码:

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container-fluid">
<div class="row">
    <div class="col-xs-4 panel" style="background-color: red">
        some content
    </div>
    <div class="col-xs-4 panel" style="background-color: yellow">
        catz
        <img width="100" height="100" src="https://lorempixel.com/100/100/cats/">
    </div>
    <div class="col-xs-4 panel" style="background-color: blue">
        some more content
    </div>
</div>
</div>



11
引导网站上有一篇文章提供了5行解决方案getbootstrap.com.vn/examples/equal-height-columns
Eduard Gamonal

2
Bootstrap上的示例破坏了响应能力Eduard。Flex .row丢失了flex-wrap: wrap;。这是一个具有响应能力的示例:codepen.io/bootstrapped/details/RrabNe
Bryan Willis

可能的解决方法–在其他列中透明图像1像素宽。在上面的示例中,此新的一个像素宽度的图像与cat pic的像素高度匹配。(在您的情况下可能不起作用或不实用)
Sql Surfer

在Bootstrap 4中,我们可以使用同一张卡
Amjad Rehman A

Answers:


1044

使用Bootstrap 4的解决方案4

Bootstrap 4使用Flexbox,因此不需要额外的CSS。

演示版

<div class="container">
    <div class="row ">
        <div class="col-md-4" style="background-color: red">
          some content
        </div>
        <div class="col-md-4" style="background-color: yellow">
          catz
          <img width="100" height="100" src="https://placekitten.com/100/100/">
        </div>
        <div class="col-md-4" style="background-color: green">
          some more content
        </div>
    </div>
</div>

解决方案1使用负边距(不会破坏响应能力)

演示版

.row{
    overflow: hidden; 
}

[class*="col-"]{
    margin-bottom: -99999px;
    padding-bottom: 99999px;
}

解决方案2使用表

演示版

.row {
    display: table;
}

[class*="col-"] {
    float: none;
    display: table-cell;
    vertical-align: top;
}

使用Flex的解决方案3已于2015年8月添加。此之前发布的注释不适用于此解决方案。

演示版

.row {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display:         flex;
  flex-wrap: wrap;
}
.row > [class*='col-'] {
  display: flex;
  flex-direction: column;
}

7
可以将其视为被吸收到负空间中的列。如果消除了溢出,您将看到发生了什么。
Popnoodles

9
如果专门针对引导程序列类,则可能应该使用锚^而不是通配符*。使用^表示类必须以col-开头,因为显示的通配符将匹配任何在字符串中任何位置具有col-的类,这可能会对您使用约定col-的样式产生不良影响。(即,东西堆的东西)。
Logan G.

7
不错的答案,但有一些警告。解决方案1禁用浮动,因此破坏了引导网格的响应行为。解决方案2(在positioniseverything.net/articles/onetruelayout/equalheight中有更深入的说明)不显示底部边框(因为它被裁剪在填充空间中的某个位置)。
Ohad Schneider

14
解决方案3破坏了行响应。
SPRBRN

10
您应该flex-wrap: wrap;在第三个示例中添加@Popnoodles 以启用响应能力。您还需要添加display:flex; flex-direction:列; 列类。如果要使用.row而不是自定义类,则需要为旧版浏览器提供一个后备,以更改显示范围。这是一个例子
Bryan Willis

321

更新2020

Bootstap 3.x的最佳方法 -使用CSS flexbox(并且需要最少的CSS)。

.equal {
  display: flex;
  display: -webkit-flex;
  flex-wrap: wrap;
}

Bootstrap相同高度的Flexbox示例

要仅在特定的断点处应用相同高度的flexbox(响应),请使用媒体查询。例如,这是sm(768px)以上:

@media (min-width: 768px) {
  .row.equal {
    display: flex;
    flex-wrap: wrap;
  }
}

此解决方案也适用于多行(列换行):https :
//www.bootply.com/gCEXzPMehZ

其他解决方法

这些选项将由其他人推荐,但不是一个好主意对于响应式设计。这些仅适用于不带列换行的简单单行布局。

1)使用巨大的负边距和填充

2)使用display:table-cell(此解决方案还会影响响应网格,因此@media查询只能用于table在垂直堆叠列之前在更大的屏幕上应用显示)


引导程序4

现在默认情况下在Bootstrap 4中使用了Flexbox,因此不需要额外的CSS来制作等高的列:http : //www.codeply.com/go/IJYRI4LPwU

例:

<div class="container">
    <div class="row">
        <div class="col-md-6"></div>
        <div class="col-md-6"></div>
    </div>
</div>

5
您可以使用媒体查询将弹性框仅应用到较大/较宽的设备上。我更新了bootply:bootply.com/Cn6fA6LuTq
Zim

如果有人感兴趣,我创建了一支笔来演示使用flexbox对表单的类似效果。
贾斯汀·劳

2
这是一个带有flexbox的已知Safari bug:证明:bugs.webkit.org/show_bug.cgi?id=137730
Zim

5
@Stanley关于“不再响应”的评论陈旧且无关紧要。
吉姆(Zim)

1
这是唯一对我有用的修复程序。谢谢Zim,太好了!
瑞安(Ryan NZ)

83

无需JavaScript。只需将类添加.row-eq-height到您现有的类中,.row如下所示:

<div class="row row-eq-height">
  <div class="col-xs-12 col-sm-4 panel" style="background-color: red">
    some content
  </div>
  <div class="col-xs-6 col-sm-4 panel" style="background-color: yellow">
    kittenz
  <img src="http://placekitten.com/100/100">
  </div>
  <div class="col-xs-6 col-sm-4 panel" style="background-color: blue">
    some more content
  </div>
</div>

提示:如果您的行中有12列以上,则引导网格将无法包装它。所以添加一个新的div.row.row-eq-height每12列。

提示:您可能需要添加

<link rel="stylesheet" href="http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css" />

到你的html


5
基于flexbox。不适用于IE8或9,也不适用于Android 2.x caniuse.com/#feat=flexbox
Chris Moschini

60
注意:getbootstrap.vn不是“ Bootstrap”。这是一个第三方项目。
Zim

不过,这似乎已集成到bootstrap v4中。
西里尔·杜尚·多丽丝

我包括了正确的CSS(来自.vn网站),但是它弄乱了所有内容。它基于flex
ekkis,2016年

太好了...插件地狱。
舰队

63

要回答您的问题,这就是您所需要的全部内容,并带有带有前缀css的完整响应式演示

/* Using col-xs media query breakpoint but you can change 481 to 768 to only apply to col-sm and above if you'd like*/

@media only screen and (min-width : 481px) {
    .flex-row {
        display: flex;
        flex-wrap: wrap;
    }
    .flex-row > [class*='col-'] {
        display: flex;
        flex-direction: column;
    }
    .flex-row.row:after, 
    .flex-row.row:before {
        display: flex;
    }
}

Codepen屏幕截图

为了增加对flex列之内的缩略图内容flex的支持(例如上面的屏幕截图),还可以添加以下内容……请注意,您也可以使用面板来做到这一点:

.flex-row .thumbnail,
.flex-row .caption {
    display: flex;
    flex: 1 0 auto;
    flex-direction: column;
}
.flex-text {
    flex-grow: 1;
}    
.flex-row img {
    width: 100%;
}

尽管flexbox在IE9及以下版本中不起作用,但您可以使用带有条件标记的演示,将条件标记与诸如javascript网格之类的条件填充为polyfill :

<!--[if lte IE 9]>

<![endif]-->

至于接受的答案中的其他两个示例...表演示是一个不错的主意,但是实现错误。毫无疑问,将CSS应用于引导程序列类无疑会完全破坏网格框架。您应该为一个和两个使用自定义选择器,不应将表格样式应用于[class*='col-']已定义宽度的表格样式。仅当您想要相等的高度和相等的宽度的列时,才应使用此方法。它不用于任何其他布局,并且不响应。我们可以使其在移动显示器上回退...

<div class="table-row-equal">
<div class="thumbnail">
    Content...
</div>
<div class="thumbnail">
    Content...
</div>
</div>
@media only screen and (min-width : 480px){
    .table-row-equal {
        display: table;
        width: 100%;
        table-layout: fixed;
        border-spacing: 30px 0px;
        word-wrap: break-word;
    }
    .table-row-equal .thumbnail {
        float: none;
        display: table-cell;
        vertical-align: top;
        width: 1%;
    }
}

最后,已接受答案中的第一个演示实现了一个真实布局的版本某些情况下是一个不错的选择,但不适用于引导列。这样做的原因是所有列都扩展到容器高度。因此,这也将破坏响应能力,因为列不会扩展到其旁边的元素,而是扩展到整个容器。此方法也将不允许您将底部页边距再应用于行,并且还会导致其他问题,例如滚动到定位标记。

有关完整的代码,请参见Codepen,它会自动为flexbox代码添加前缀。


11
这是唯一对我有效的答案。评分最高的3个答案只是浪费时间
ken2k 2016年

3
看起来不错,但不幸的是,它不适用于MacOS上的Safari 9.1 :-(
KevinH,2016年

1
@TheSchecke这里是修复。据我所知,这现在可以在所有受flexbox支持的浏览器中使用。如果我错了,请告诉我。s.codepen.io/bootstrapped/debug/pboJNd。问题与row:after, row:before显示:表集有关,这显然是Safari不喜欢的。
布莱恩·威利斯

2
请注意,这种情况在iPad的Safari浏览器上严重中断了
马修·洛克

1
很抱歉听到@MatthewLock。我刚刚使用最新的野生动物园在iPad Air IOS 8.1上进行了测试,并且可以在该平台上运行。我还可以使用iPad mini视网膜和Safari 7在crossbrowsertesting.com上进行测试,而且似乎也可以正常工作。这是该测试的结果。可以提供您使用的iPad和Safari版本吗?我很想尝试尽快解决此问题,或者至少在答案中加上评论,因为我知道很多人都在使用它。
Bryan Willis

42

您只显示一行,因此您的用例可能仅限于此。万一您有多行,这个插件-github Javascript-grids-可以完美地工作!它使每个面板都可以扩展到最高的面板,从而基于该行中的最高面板为每一行提供不同的高度。与CSS相比,这是一个jquery解决方案,但想推荐它作为替代方法。


1
唯一有效且不会破坏响应能力的解决方案
ArturKędzior16年

这是否允许您指定列应为正方形-还是全部相同?
niico

@niico 14-自从我使用它已经有一段时间了,但是在我的应用程序中,要求每一行中的元素都具有相同的高度,但是行与行之间的高度可能有所不同。由于高度是行中元素的函数,因此,如果元素的高度等于元素的宽度,则它们应显示为正方形。
globalSchmidt

30

如果要在任何浏览器中使用此功能,请使用javascript:

$( document ).ready(function() {
    var heights = $(".panel").map(function() {
        return $(this).height();
    }).get(),

    maxHeight = Math.max.apply(null, heights);

    $(".panel").height(maxHeight);
});

1
有一个div class =“ row”,其中每个类别的“ col-md-4”类都有可变数量的面板,这应该给我3列,行数未知,这取决于我要列出的项目数。与我尝试过的各种CSS东西相反,此JS可以工作,并且几乎不需要我的HTML / CSS更改。我唯一改变的是用附加类标记所有列面板,即“ same-height-panel”,然后使用$(“。same-height-panel”)代替$(“。panel”)
nidalpres

1
经过一天的CSS素材实验,唯一对我有用的解决方案。
Dinosaurius

1
这是一个很好的解决方案,但.ready()不是正确的调用时间-应该调用它.load()
jave.web

1
@ jave.web如果您认为这是一个很好的解决方案,请给我一个赞许。谢谢
paulalexandru '17

使用window.onload = function() {...function content above...}代替。这样效果更好。
Blackpanther0001

10

我尝试了该线程和其他页面上提出的许多建议,但是没有一种解决方案在每种浏览器中都可以100%起作用。

因此,我尝试了一段时间,并提出了这个建议。 只有1个类 的flexbox的帮助下,Bootstrap等高柱的完整解决方案这适用于所有主要的IE10 +浏览器。

CSS:

.row.equal-cols {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}

.row.equal-cols:before,
.row.equal-cols:after {
  display: block;
}

.row.equal-cols > [class*='col-'] {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column;
}

.row.equal-cols > [class*='col-'] > * {
  -webkit-flex: 1 1 auto;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto; 
}

HTML:

<div class="container">
  <div class="row equal-cols">
    <div class="col-sm-4">
      <div class="content"></div>
    </div>
    <div class="col-sm-4">
      <div class="content"></div>
    </div>
    <div class="col-sm-4">
      <div class="content"></div>
    </div>
  </div>
</div>

例如,要支持更多版本的IE,您可以使用https://github.com/liabru/jquery-match-height并将的所有子列作为目标.equal-cols。像这样:

// Create a check for IE9 (or any other specific browser).
if(IE9) {
  $(".row.equal-cols > [class*='col-']").matchHeight();
}

如果没有此polyfill,则这些列的行为将与常规的Bootstrap列相同,因此这是一个很好的后备方法。


这对我来说非常出色。谢谢!
randlet

8

您也可以使用inline-flex,效果非常好,并且可能比使用CSS修改每个行元素更简洁。

对于我的项目,我希望每一行的子元素的边框都具有相同的高度,以使边框看起来参差不齐。为此,我创建了一个简单的CSS类。

.row.borders{
    display: inline-flex;
    width: 100%;
}

2
它成功地使行中的所有内容都具有相同的高度;这破坏了Bootstrap的响应能力。
Christine268


7

厚脸皮的jquery解决方案(如果有人感兴趣)。只要确保您所有的cols(el)都有一个通用的类名...如果将其绑定到$(window).resize也可以响应

function equal_cols(el)
{
    var h = 0;
    $(el).each(function(){
        $(this).css({'height':'auto'});
        if($(this).outerHeight() > h)
        {
            h = $(this).outerHeight();
        }
    });
    $(el).each(function(){
        $(this).css({'height':h});
    });
}

用法

$(document).ready(function(){
   equal_cols('.selector');
});

注意:此帖子已按照@Chris的注释进行了编辑,该注释仅将代码设置为$.each()函数中的最后一个最高高度


这被低估了-简单而又小巧,但可以调整所有列的大小,而无需在一行中具有固定数量的列。好一个!
乔登2015年

1
这不起作用,因为您在每个函数中都设置了最后一个最大高度。如果第三列是最高列,则列1和2的高度不正确。您必须设置最后一行“ $(this).css({'height':h});” 每个功能之后。我将进行编辑。
克里斯

7

前面的一些答案说明了如何使div保持相同的高度,但是问题是,当宽度太窄时,div不会堆叠,因此您可以多花一部分实现它们的答案。对于每一个,除了可以使用行类之外,还可以使用此处提供的CSS名称,因此,如果您始终希望div彼此相邻,则div应该看起来像这样:

<div class="row row-eq-height-xs">Your Content Here</div>

对于所有屏幕:

.row-eq-height-xs {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display:         flex;
    flex-direction: row;
}

对于何时要使用sm:

.row-eq-height-sm {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display:         flex;
    flex-direction: column;
}
@media (min-width:768px) {
    .row-eq-height-sm {
        flex-direction: row;
    }
}

对于何时要md:

.row-eq-height-md {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display:         flex;
    flex-direction: column;
}
@media (min-width:992px) {
    .row-eq-height-md {
        flex-direction: row;
    }
}

对于何时要使用lg:

.row-eq-height-lg {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display:         flex;
    flex-direction: column;
}
@media (min-width:1200px) {
    .row-eq-height-md {
        flex-direction: row;
    }
}

编辑 根据评论,确实存在一个更简单的解决方案,但是您需要确保为所有大小减小到xs的列提供所需的最大宽度信息(例如<div class="col-md-3 col-sm-4 col-xs-12">

.row-eq-height {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
}

您使事情变得比您需要的复杂得多:)`只需使用即可,flex-wrap: wrap;不需要所有单独的命令……除非您特别想要它们。
布赖恩·威利斯

iPad Safari上此操作失败
马修·洛克

6

令我惊讶的是,我无法在2018年末在这里找到一个有价值的解决方案。我继续使用Flexbox自己找到了Bootstrap 3解决方案。

干净简单的示例:

Bootstrap 3中匹配的列宽示例

的HTML

<div class="row row-equal">
    <div class="col-lg-4 col-md-4 col-sm-4 col-xs-12 col-equal">
        <p>Text</p>
    </div>
    <div class="col-lg-4 col-md-4 col-sm-4 col-xs-12 col-equal">
        <img src="//placehold.it/200x200">
    </div>
    <div class="col-lg-4 col-md-4 col-sm-4 col-xs-12 col-equal">
        <p>Text</p>
    </div>  
</div>

的CSS

img {
  width: 100%;
}
p {
  padding: 2em;
}
@media (min-width: 768px) {
  .row-equal {
    display: flex;
    flex-wrap: wrap;
  }
  .col-equal {
    margin: auto;
  }
}

查看工作演示:http : //jsfiddle.net/5kmtfrny/


5

我知道我来晚了,但是现在您可以使用“最小高度”样式属性来实现您的目的。


5

如果有人使用bootstrap 4并寻找相等高度的列,请使用row-eq-heightdiv父级

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" rel="stylesheet" />
<div class="row row-eq-height">
  <div class="col-xs-4" style="border: 1px solid grey;">.row.row-eq-height &gt; .col-xs-4</div>
  <div class="col-xs-4" style="border: 1px solid grey;">.row.row-eq-height &gt; .col-xs-4<br>this is<br>a much<br>taller<br>column<br>than the others</div>
  <div class="col-xs-4" style="border: 1px solid grey;">.row.row-eq-height &gt; .col-xs-4</div>
</div>

参考:http : //getbootstrap.com.vn/examples/equal-height-columns/


3

这是我的解决方案(编译的CSS):

.row.row-xs-eq {
  display: table;
  table-layout: fixed;
  margin: 0;
}

.row.row-xs-eq::before {
  content: none;
}

.row.row-xs-eq::after {
  content: none;
}

.row.row-xs-eq > [class^='col-'] {
  display: table-cell;
  float: none;
  padding: 0;
}

@media (min-width: 768px) {
  .row.row-sm-eq {
    display: table;
    table-layout: fixed;
    margin: 0;
  }

  .row.row-sm-eq::before {
    content: none;
  }

  .row.row-sm-eq::after {
    content: none;
  }

  .row.row-sm-eq > [class^='col-'] {
    display: table-cell;
    float: none;
    padding: 0;
  }
}

@media (min-width: 992px) {
  .row.row-md-eq {
    display: table;
    table-layout: fixed;
    margin: 0;
  }

  .row.row-md-eq::before {
    content: none;
  }

  .row.row-md-eq::after {
    content: none;
  }

  .row.row-md-eq > [class^='col-'] {
    display: table-cell;
    float: none;
    padding: 0;
  }
}

@media (min-width: 1200px) {
  .row.row-lg-eq {
    display: table;
    table-layout: fixed;
    margin: 0;
  }

  .row.row-lg-eq::before {
    content: none;
  }

  .row.row-lg-eq::after {
    content: none;
  }

  .row.row-lg-eq > [class^='col-'] {
    display: table-cell;
    float: none;
    padding: 0;
  }
}

因此您的代码如下所示:

<div class="row row-sm-eq">
  <!-- your old cols definition here -->
</div>

基本上,这是与用于.col-*类的系统相同的系统,区别在于您需要应用.row-*类应用于行本身。

.row-sm-eq列的将堆叠在XS屏幕上。如果您不需要将它们堆叠在任何屏幕上,则可以使用.row-xs-eq

我们实际使用的SASS版本:

.row {
  @mixin row-eq-height {
    display: table;
    table-layout: fixed;
    margin: 0;

    &::before {
      content: none;
    }

    &::after {
      content: none;
    }

    > [class^='col-'] {
      display: table-cell;
      float: none;
      padding: 0;
    }
  }

  &.row-xs-eq {
    @include row-eq-height;
  }

  @media (min-width: $screen-sm-min) {
    &.row-sm-eq {
      @include row-eq-height;
    }
  }

  @media (min-width: $screen-md-min) {
    &.row-md-eq {
      @include row-eq-height;
    }
  }

  @media (min-width: $screen-lg-min) {
    &.row-lg-eq {
      @include row-eq-height;
    }
  }
}

现场演示


注意:在单行内混合.col-xs-12.col-xs-6不能正常工作。


很好 我的解决方案是相同的。并且有可能具有相等的高度的列,border-spacing并使用负边距在标准Bootstrap的列之间留出30px的间距。
最大

3

将解决方案1应用于行中的唯一列时存在问题。想改善解决方案1。

 [class^="col-"]:not([class*="-12"]){
      margin-bottom: -99999px;
      padding-bottom: 99999px;
  }

(对不起,不能评论Popnoodles的答案。我的声誉不够高)


2

最好的:

Github Reflex-文档

与引导程序一起使用

更新:

  1. 包括CSS
  2. 更新您的代码:

/*!
 *
 * Reflex v1.0
 *
 * Reflex is a flexbox grid which provides a way to take advantage of emerging
 * flexbox support while providing a fall back to inline-block on older browsers
 *
 * Built by Lee Jordan G.C.S.E.
 * email: ldjordan@gmail.com
 * github: https://github.com/leejordan
 *
 * Structure and calculations are inspired by twitter bootstrap
 *
 */
.reflex-order-12 {
  -webkit-order: 12;
  -ms-flex-order: 12;
  order: 12;
}
.reflex-order-11 {
  -webkit-order: 11;
  -ms-flex-order: 11;
  order: 11;
}
.reflex-order-10 {
  -webkit-order: 10;
  -ms-flex-order: 10;
  order: 10;
}
.reflex-order-9 {
  -webkit-order: 9;
  -ms-flex-order: 9;
  order: 9;
}
.reflex-order-8 {
  -webkit-order: 8;
  -ms-flex-order: 8;
  order: 8;
}
.reflex-order-7 {
  -webkit-order: 7;
  -ms-flex-order: 7;
  order: 7;
}
.reflex-order-6 {
  -webkit-order: 6;
  -ms-flex-order: 6;
  order: 6;
}
.reflex-order-5 {
  -webkit-order: 5;
  -ms-flex-order: 5;
  order: 5;
}
.reflex-order-4 {
  -webkit-order: 4;
  -ms-flex-order: 4;
  order: 4;
}
.reflex-order-3 {
  -webkit-order: 3;
  -ms-flex-order: 3;
  order: 3;
}
.reflex-order-2 {
  -webkit-order: 2;
  -ms-flex-order: 2;
  order: 2;
}
.reflex-order-1 {
  -webkit-order: 1;
  -ms-flex-order: 1;
  order: 1;
}
.reflex-order-0 {
  -webkit-order: 0;
  -ms-flex-order: 0;
  order: 0;
}
.reflex-container {
  display: inline-block;
  display: -webkit-flex;
  display: flex;
  zoom: 1;
  *display: inline;
  margin: 0;
  padding: 0;
  position: relative;
  width: 100%;
  letter-spacing: -0.31em;
  *letter-spacing: normal;
  word-spacing: -0.43em;
  list-style-type: none;
}
.reflex-container *,
.reflex-container:before,
.reflex-container:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  max-width: 100%;
  letter-spacing: normal;
  word-spacing: normal;
  white-space: normal;
}
.reflex-container *:before,
.reflex-container *:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
[class*="reflex-col-"] {
  width: 100%;
  vertical-align: top;
  position: relative;
  display: inline-block;
  display: -webkit-flex;
  display: flex;
  zoom: 1;
  *display: inline;
  text-align: left;
  text-align: start;
}
.reflex-item {
  display: block;
  display: -webkit-flex;
  display: flex;
  -webkit-flex-direction: column;
  flex-direction: column;
  -webkit-flex: 1 1 auto;
  flex: 1 1 auto;
}
_:-ms-fullscreen,
:root .reflex-item {
  width: 100%;
}
.reflex-col-12 {
  width: 100%;
  *width: 99.9%;
}
.reflex-col-11 {
  width: 91.66666666666666%;
  *width: 91.56666666666666%;
}
.reflex-col-10 {
  width: 83.33333333333334%;
  *width: 83.23333333333335%;
}
.reflex-col-9 {
  width: 75%;
  *width: 74.9%;
}
.reflex-col-8 {
  width: 66.66666666666666%;
  *width: 66.56666666666666%;
}
.reflex-col-7 {
  width: 58.333333333333336%;
  *width: 58.233333333333334%;
}
.reflex-col-6 {
  width: 50%;
  *width: 49.9%;
}
.reflex-col-5 {
  width: 41.66666666666667%;
  *width: 41.56666666666667%;
}
.reflex-col-4 {
  width: 33.33333333333333%;
  *width: 33.23333333333333%;
}
.reflex-col-3 {
  width: 25%;
  *width: 24.9%;
}
.reflex-col-2 {
  width: 16.666666666666664%;
  *width: 16.566666666666663%;
}
.reflex-col-1 {
  width: 8.333333333333332%;
  *width: 8.233333333333333%;
}
@media (min-width: 480px) {
  .reflex-col-xs-12 {
    width: 100%;
    *width: 99.9%;
  }
  .reflex-col-xs-11 {
    width: 91.66666666666666%;
    *width: 91.56666666666666%;
  }
  .reflex-col-xs-10 {
    width: 83.33333333333334%;
    *width: 83.23333333333335%;
  }
  .reflex-col-xs-9 {
    width: 75%;
    *width: 74.9%;
  }
  .reflex-col-xs-8 {
    width: 66.66666666666666%;
    *width: 66.56666666666666%;
  }
  .reflex-col-xs-7 {
    width: 58.333333333333336%;
    *width: 58.233333333333334%;
  }
  .reflex-col-xs-6 {
    width: 50%;
    *width: 49.9%;
  }
  .reflex-col-xs-5 {
    width: 41.66666666666667%;
    *width: 41.56666666666667%;
  }
  .reflex-col-xs-4 {
    width: 33.33333333333333%;
    *width: 33.23333333333333%;
  }
  .reflex-col-xs-3 {
    width: 25%;
    *width: 24.9%;
  }
  .reflex-col-xs-2 {
    width: 16.666666666666664%;
    *width: 16.566666666666663%;
  }
  .reflex-col-xs-1 {
    width: 8.333333333333332%;
    *width: 8.233333333333333%;
  }
}
@media (min-width: 768px) {
  .reflex-col-sm-12 {
    width: 100%;
    *width: 99.9%;
  }
  .reflex-col-sm-11 {
    width: 91.66666666666666%;
    *width: 91.56666666666666%;
  }
  .reflex-col-sm-10 {
    width: 83.33333333333334%;
    *width: 83.23333333333335%;
  }
  .reflex-col-sm-9 {
    width: 75%;
    *width: 74.9%;
  }
  .reflex-col-sm-8 {
    width: 66.66666666666666%;
    *width: 66.56666666666666%;
  }
  .reflex-col-sm-7 {
    width: 58.333333333333336%;
    *width: 58.233333333333334%;
  }
  .reflex-col-sm-6 {
    width: 50%;
    *width: 49.9%;
  }
  .reflex-col-sm-5 {
    width: 41.66666666666667%;
    *width: 41.56666666666667%;
  }
  .reflex-col-sm-4 {
    width: 33.33333333333333%;
    *width: 33.23333333333333%;
  }
  .reflex-col-sm-3 {
    width: 25%;
    *width: 24.9%;
  }
  .reflex-col-sm-2 {
    width: 16.666666666666664%;
    *width: 16.566666666666663%;
  }
  .reflex-col-sm-1 {
    width: 8.333333333333332%;
    *width: 8.233333333333333%;
  }
}
@media (min-width: 992px) {
  .reflex-col-md-12 {
    width: 100%;
    *width: 99.9%;
  }
  .reflex-col-md-11 {
    width: 91.66666666666666%;
    *width: 91.56666666666666%;
  }
  .reflex-col-md-10 {
    width: 83.33333333333334%;
    *width: 83.23333333333335%;
  }
  .reflex-col-md-9 {
    width: 75%;
    *width: 74.9%;
  }
  .reflex-col-md-8 {
    width: 66.66666666666666%;
    *width: 66.56666666666666%;
  }
  .reflex-col-md-7 {
    width: 58.333333333333336%;
    *width: 58.233333333333334%;
  }
  .reflex-col-md-6 {
    width: 50%;
    *width: 49.9%;
  }
  .reflex-col-md-5 {
    width: 41.66666666666667%;
    *width: 41.56666666666667%;
  }
  .reflex-col-md-4 {
    width: 33.33333333333333%;
    *width: 33.23333333333333%;
  }
  .reflex-col-md-3 {
    width: 25%;
    *width: 24.9%;
  }
  .reflex-col-md-2 {
    width: 16.666666666666664%;
    *width: 16.566666666666663%;
  }
  .reflex-col-md-1 {
    width: 8.333333333333332%;
    *width: 8.233333333333333%;
  }
}
@media (min-width: 1200px) {
  .reflex-col-lg-12 {
    width: 100%;
    *width: 99.9%;
  }
  .reflex-col-lg-11 {
    width: 91.66666666666666%;
    *width: 91.56666666666666%;
  }
  .reflex-col-lg-10 {
    width: 83.33333333333334%;
    *width: 83.23333333333335%;
  }
  .reflex-col-lg-9 {
    width: 75%;
    *width: 74.9%;
  }
  .reflex-col-lg-8 {
    width: 66.66666666666666%;
    *width: 66.56666666666666%;
  }
  .reflex-col-lg-7 {
    width: 58.333333333333336%;
    *width: 58.233333333333334%;
  }
  .reflex-col-lg-6 {
    width: 50%;
    *width: 49.9%;
  }
  .reflex-col-lg-5 {
    width: 41.66666666666667%;
    *width: 41.56666666666667%;
  }
  .reflex-col-lg-4 {
    width: 33.33333333333333%;
    *width: 33.23333333333333%;
  }
  .reflex-col-lg-3 {
    width: 25%;
    *width: 24.9%;
  }
  .reflex-col-lg-2 {
    width: 16.666666666666664%;
    *width: 16.566666666666663%;
  }
  .reflex-col-lg-1 {
    width: 8.333333333333332%;
    *width: 8.233333333333333%;
  }
}
.reflex-wrap {
  -webkit-flex-wrap: wrap;
  flex-wrap: wrap;
}
.reflex-wrap-reverse {
  -webkit-flex-wrap: wrap-reverse;
  flex-wrap: wrap-reverse;
}
.reflex-direction-row-reverse {
  -webkit-flex-direction: row-reverse;
  flex-direction: row-reverse;
}
.reflex-direction-column {
  -webkit-flex-direction: column;
  flex-direction: column;
}
.reflex-direction-column-reverse {
  -webkit-flex-direction: column-reverse;
  flex-direction: column-reverse;
}
.reflex-align-start {
  -webkit-align-items: flex-start;
  align-items: flex-start;
}
.reflex-align-end {
  -webkit-align-items: flex-end;
  align-items: flex-end;
}
.reflex-align-end [class*="reflex-col-"] {
  vertical-align: bottom;
}
.reflex-align-center {
  -webkit-align-items: center;
  align-items: center;
}
.reflex-align-center [class*="reflex-col-"] {
  vertical-align: middle;
}
.reflex-align-baseline {
  -webkit-align-items: baseline;
  align-items: baseline;
}
.reflex-align-baseline [class*="reflex-col-"] {
  vertical-align: baseline;
}
.reflex-align-content-start {
  -webkit-align-content: flex-start;
  align-content: flex-start;
}
.reflex-align-content-end {
  -webkit-align-content: flex-end;
  align-content: flex-end;
}
.reflex-align-content-end [class*="reflex-col-"] {
  vertical-align: bottom;
}
.reflex-align-content-center {
  -webkit-align-content: center;
  align-content: center;
}
.reflex-align-content-space-between {
  -webkit-align-content: space-between;
  align-content: space-between;
}
.reflex-align-content-space-around {
  -webkit-align-content: space-around;
  align-content: space-around;
}
.reflex-align-self-stretch {
  -webkit-align-self: stretch;
  align-self: stretch;
}
.reflex-align-self-start {
  -webkit-align-self: flex-start;
  align-self: flex-start;
}
.reflex-align-self-end {
  -webkit-align-self: flex-end;
  align-self: flex-end;
  vertical-align: bottom;
}
.reflex-align-self-center {
  -webkit-align-self: center;
  align-self: center;
  vertical-align: middle;
}
.reflex-align-self-baseline {
  -webkit-align-self: baseline;
  align-self: baseline;
  vertical-align: baseline;
}
.reflex-justify-start {
  text-align: left;
  -webkit-justify-content: flex-start;
  justify-content: flex-start;
}
.reflex-justify-end {
  text-align: right;
  -webkit-justify-content: flex-end;
  justify-content: flex-end;
}
.reflex-justify-center {
  text-align: center;
  -webkit-justify-content: center;
  justify-content: center;
}
.reflex-justify-space-between {
  text-align: justify;
  -moz-text-align-last: justify;
  text-align-last: justify;
  -webkit-justify-content: space-between;
  justify-content: space-between;
}
.reflex-justify-space-around {
  text-align: justify;
  -moz-text-align-last: justify;
  text-align-last: justify;
  -webkit-justify-content: space-around;
  justify-content: space-around;
}
.reflex-item-margin-sm {
  margin: 0 0.25em 0.5em;
}
.reflex-item-margin-md {
  margin: 0 0.5em 1em;
}
.reflex-item-margin-lg {
  margin: 0 1em 2em;
}
.reflex-item-content-margin-sm * {
  margin-right: 0.25em;
  margin-left: 0.25em;
}
.reflex-item-content-margin-md * {
  margin-right: 0.5em;
  margin-left: 0.25em;
}
.reflex-item-content-margin-lg * {
  margin-right: 1em;
  margin-left: 1em;
}
.reflex-img {
  display: inline-block;
  display: -webkit-flex;
  display: flex;
  zoom: 1;
  *display: inline;
  -webkit-flex: 0 0 auto;
  flex: 0 0 auto;
  margin-left: 0;
  margin-right: 0;
  max-width: 100%;
  width: 100%;
  height: auto;
}
.reflex-item-footer {
  margin-top: auto;
  margin-left: 0;
  margin-right: 0;
}
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="reflex-container reflex-wrap">
  <div class="reflex-col-xs-12 reflex-col-sm-4 panel" style="background-color: red">
  some content
  </div>
  <div class="reflex-col-xs-6 reflex-col-sm-4 panel" style="background-color: yellow">
  kittenz
  <img src="http://upload.wikimedia.org/wikipedia/en/1/13/Matrona.jpg">
  </div>
  <div class="reflex-col-xs-6 reflex-col-sm-4 panel" style="background-color: blue">
  some more content
  </div>
</div>


欢迎使用Stack Overflow!尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。请参阅如何写一个好的答案
ByteHamster,2015年

2

这是我的方法,我在媒体查询中使用flex进行了一些更改。

  @media (min-width: 0px) and (max-width: 767px) {
  .fsi-row-xs-level {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .fsi-row-sm-level {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .fsi-row-md-level {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
  }
}
@media (min-width: 1200px) {
  .fsi-row-lg-level {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
  }
}

然后将所需的类添加到父级。

<div class="row fsi-row-lg-level fsi-row-md-level">
<div class="col-sm-4">column 1</div>
<div class="col-sm-4">column 2</div>
<div class="col-sm-4">column 3</div>
</div>

我使用响应断点是因为通量通常会妨碍引导程序标准响应性质。


2

我用这个超级简单的解决方案 clearfix,没有任何副作用。

这是AngularJS上的示例:

<div ng-repeat-start="item in list">
    <div class="col-lg-4 col-md-6 col-sm-12 col-xs-12"></div>
</div>
<div ng-repeat-end>
    <div ng-if="$index % 3 == 2" class="clearfix visible-lg"></div>
    <div ng-if="$index % 2 == 1" class="clearfix visible-md"></div>
</div>

还有一个关于PHP的示例:

<?php foreach ($list as $i => $item): ?>
    <div class="col-lg-4 col-md-6 col-sm-12 col-xs-12"></div>
    <div class="clearfix visible-md"></div>
    <?php if ($i % 2 === 1): ?>
        <div class="clearfix visible-lg"></div>
    <?php endif; ?>
<?php endforeach; ?>

但是,这不会使列的高度相同。
skerit's

1
对于我想要在行中具有相同高度/位置的列,这是一个解决方案
Michal-Areda-net

2

对于那些寻求快速,简单解决方案的人-如果您具有相对一致的块内容集,则可以在div上将最小高度设置为比最大块大一点,从而更容易实现。

.align-box {
    min-height: 400px;
}

2

.row.container-height {
	overflow: hidden; 
}

.row.container-height > [class*="col-"]{
    margin-bottom: -99999px;
    padding-bottom: 99999px;
}

其中.container-height是必须添加到其所有.col *子级都具有相同高度的.row样式元素中的样式类。

仅将这些样式应用于某些特定的.row(如示例中的.container-height)还可以避免对所有.col *应用margin和padding溢出。


2

我搜索了相同问题的解决方案,结果发现其中一个可行!-几乎没有多余的代码。

请参阅https://medium.com/wdstack/bootstrap-equal-height-columns-d07bc934eb27 ,以获取很好的理解,并在底部找到所需的资源,并带有链接。

https://www.codeply.com/go/EskIjvun4B

这对我来说是正确的响应方式...引用:... 3-使用flexbox(最好!)

截至2017年,在响应式设计中制作相等高度的列的最佳(最简单)方法是使用CSS3 flexbox。

.row.display-flex {
  display: flex;
  flex-wrap: wrap;
}
.row.display-flex > [class*='col-'] {
  display: flex;
  flex-direction: column;
}

并简单地使用:

div class="container">
   <div class="row display-flex .... etc..

1
@media (min-width: @screen-sm-min) {
    div.equal-height-sm {
        display: table;


        > div[class^='col-'] {
            display: table-cell;
            float: none;
            vertical-align: top;
        }
    }
}

<div class="equal-height-sm">
    <div class="col-xs-12 col-sm-7">Test<br/>Test<br/>Test</div>
    <div class="col-xs-12 col-sm-5">Test</div>
</div>

例:

https://jsfiddle.net/b9chris/njcnex83/embedded/result/

从这里的几个答案改编而成。基于flexbox的答案是正确的方法,一旦IE8和9都死了,一旦Android 2.x死了,但这在2015年就不成立了,并且可能不会在2016年出现。IE8和9仍然构成4-使用量的6%(取决于您的测量方式)对许多公司用户而言更糟。http://caniuse.com/#feat=flexbox

display: tabledisplay: table-cell诀窍是更向下兼容-和一个伟大的事情是唯一严重的兼容性问题是它的力量是Safari的问题box-sizing: border-box,一些已经应用到您的引导标记。http://caniuse.com/#feat=css-table

显然,您可以添加更多执行类似操作的类,例如.equal-height-md。我将它们绑定到div上是为了在受限的使用中获得较小的性能优势,但是您可以删除该标签,使其像Bootstrap的其余部分一样更加通用。

请注意,这里的jsfiddle使用CSS,因此,LESS所提供的内容在链接的示例中进行了硬编码。例如,@ screen-sm-min已替换为Less将插入的内容-768px。


1

如果在您的情况下有意义,则可以在每个休息时间之后简单地添加一个空的12列div,用作分隔线,该分隔线紧贴行中最高单元格的底部。

<div class="row">
   <div class="col-xs-6">Some content</div>
   <div class="col-xs-6">
      Lots of content! Lots of content! Lots of content! Lots of content! Lots of content! 
   </div>
   <div id="spacer-div" class="col-xs-12"></div>
   <div class="col-xs-6">More content...</div>
</div><!--this You forgot to close -->

希望这可以帮助!


这不能回答他问的问题!
Ellisan '17

0

以为我只是补充说,Dr.Flink给出的答案也可以应用于Bootstrap 3 form-horizontal块-如果您想为每个单元格使用背景色,这将非常方便。为了使它适用于引导表单,您需要包装表单内容,该内容仅用于复制类似表格的结构。

下面的示例还提供了CSS,该CSS演示了一个附加的媒体查询,该查询使Bootstrap 3可以简单地接管并在较小的屏幕上正常进行。这在IE8 +中也适用。

例:

<form class="form-horizontal" role="form">

  <div class="form-wrapper">
    <div class="form-group">
      <label class="col-xs-12 col-sm-2 control-label">My Label</label>
      <div class="col-xs-12 col-sm-10">
        Some content
      </div>
    </div>
  </div>

</form>
.form-wrapper {
  display: table;
}

.form-wrapper .form-group {
  display: table-row;
}

.form-wrapper .form-group .control-label {
  display: table-cell;
  float: none;
}

.form-wrapper .form-group label + div {
  display: table-cell;
  float: none;
}

@media (max-width: 768px) {
  .form-wrapper {
    display: inherit;
  }
  .form-wrapper .form-group {
    display: block;
  }
  .form-wrapper .form-group .control-label {
    display: inherit;
  }
  .form-wrapper .form-group label + div {
    display: inherit;
  }
}

0

尝试通过flex-box这样做

.container {
	display: flex;
	padding-bottom: 50px;
}
.col {
	background: blue;
	padding: 30px;
}

.col.center {
	background: red;
	height: 100px;
	margin-bottom: -50px;
}
<div class="container">
  <div class="col">Left</div>
  <div class="col center">Center</div>
  <div class="col">Right</div>
</div>

实时JSFiddle- https: //jsfiddle.net/grinmax_/spsn4fnq/


0

因此,是的,Bootstrap 4确实使行中的所有列等于高度,但是,如果在行内的内容周围创建边框,则可能会发现列的高度不相等!

当我应用height: 100%到col内的元素时,我发现我失去了利润。

我的解决方案是在col的div上使用填充(而不是内部元素的边距)。像这样:

<div class="container">
    <div class="row">
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
    </div>
</div>

上面的代码示例使用Bootstrap 4.1创建一组九个带有边框的盒子


0

的HTML

<div class="container-fluid">
    <div class="row-fluid">
        <div class="span4 option2">
            <p>left column </p>
            <p>The first column has to be the longest The first column has to be the longes</p>
        </div>

        <div class="span4 option2">
            <p>middle column</p>
        </div>

        <div class="span4 option2">
            <p>right column </p>
            <p>right column </p>
            <p>right column </p>
            <p>right column </p>
            <p>right column </p>
        </div>
    </div>
</div>

的CSS

.option2 { background: red; border: black 1px solid; color: white; }

JS

$('.option2').css({
    'height': $('.option2').height()
});

0

2019/03/19

** Bootstrap 4等高解决方案**

Bootstrap实用程序/ flex高度相等

Codepen中的实时示例

固定父级div的Bootstrap类的高度相等heightmin-height

<div class="d-flex align-content-stretch flex-wrap" style="min-height: 200px">
    <div>Flex height test text for example , Flex height test text for example </div>
    <div>Flex item</div>
    <div>Flex item</div>
    <div>Flex item</div>
 </div>


3
为什么给我负面票。你能对此发表评论吗?
MD Ashik

-1

您可以将列包装在div中

<div class="row">
<div class="col-md-12>
  <div class="col-xs-12 col-sm-4 panel" style="background-color: red">
  some content
  </div>
  <div class="col-xs-6 col-sm-4 panel" style="background-color: yellow">
  kittenz
  <img src="http://placekitten.com/100/100">
  </div>
  <div class="col-xs-6 col-sm-4 panel" style="background-color: blue">
  some more content
  </div>
</div>
</div>

使用其中一列中的按钮对我不起作用。
雷·亨特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.