与Bootstrap 3垂直对齐

cor*_*nem 860 html css css3 twitter-bootstrap twitter-bootstrap-3

我正在使用Twitter Bootstrap 3,当我想垂直对齐时我遇到问题div,例如 - JSFiddle链接:

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">

<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<div class="row">
  <div class="col-xs-5">
    <div style="height:5em;border:1px solid #000">Big</div>
  </div>
  <div class="col-xs-5">
    <div style="height:3em;border:1px solid #F00">Small</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

Bootstrap中的网格系统float: left不使用display:inline-block,因此该属性vertical-align不起作用.我尝试使用margin-top它来修复它,但我认为这对于响应式设计来说不是一个好的解决方案.

zes*_*ssx 911

这个答案提出了一个黑客,但我强烈建议你使用flexbox(如@Haschem答案中所述),因为它现在在任何地方都受到支持.

演示链接:
- Bootstrap 3
- Bootstrap 4 alpha 6

您仍然可以在需要时使用自定义类:

.vcenter {
    display: inline-block;
    vertical-align: middle;
    float: none;
}
Run Code Online (Sandbox Code Playgroud)
<div class="row">
    <div class="col-xs-5 col-md-3 col-lg-1 vcenter">
        <div style="height:10em;border:1px solid #000">Big</div>
    </div><!--
    --><div class="col-xs-5 col-md-7 col-lg-9 vcenter">
        <div style="height:3em;border:1px solid #F00">Small</div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

Bootply

inline-block如果在代码中使用真实空间(如...</div> </div>...),则使用块之间会增加额外的空间.如果列大小合计为12,则这个额外的空间会破坏我们的网格:

<div class="row">
    <div class="col-xs-6 col-md-4 col-lg-2 vcenter">
        <div style="height:10em;border:1px solid #000">Big</div>
    </div>
    <div class="col-xs-6 col-md-8 col-lg-10 vcenter">
        <div style="height:3em;border:1px solid #F00">Small</div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

在这里,我们在<div class="[...] col-lg-2">和之间有一个额外的空格<div class="[...] col-lg-10">(回车和2个标签/ 8个空格).所以...

在此输入图像描述

让我们踢出这个额外的空间!

<div class="row">
    <div class="col-xs-6 col-md-4 col-lg-2 vcenter">
        <div style="height:10em;border:1px solid #000">Big</div>
    </div><!--
    --><div class="col-xs-6 col-md-8 col-lg-10 vcenter">
        <div style="height:3em;border:1px solid #F00">Small</div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

注意看似无用的评论<!-- ... -->?它们很重要 - 没有它们,<div>元素之间的空白将占用布局中的空间,打破网格系统.

注意:Bootply已更新

  • 带有空白评论的部分感觉就像深沉,黑暗,邪恶的魔法.它是.但有人认为它应该有效,所以确实如此. (91认同)
  • 检查了与演示的链接,但它在我的Chrome上无效 (28认同)
  • 如果指定最多加12的列网格(例如使用`col-lg-2`和`col-lg-10`),则会中断.有趣的是,如果你添加以下JS代码(假设是jQuery),它会设法修复自己:`$('.row').html($('.vcenter'));` (18认同)
  • 如果你有超过2个div,这个解决方案不起作用 (9认同)
  • @pasemes这是由(众所周知的)`inline-block` [额外空间](http://css-tricks.com/fighting-the-space-between-inline-block-elements/)引起的.我在编辑中提供了一个解决方案. (7认同)
  • 惊讶没有人提到这个,但是,你可以设置"font-size:0;",而不是评论的东西.在内联块div的父级删除"神秘空间" (4认同)
  • 没有必要使用任何html注释<! - - >或任何javascript代码来修复额外的空间问题,有一个简单而有效的CSS技巧:负边距.只需添加margin-right:-4px; 到.vcenter类.测试并使用所有浏览器(旧的IE6和IE7除外......但谁关心史前史;)) (4认同)
  • 我建议在HTML标记中避免使用类似评论的黑暗魔法黑客.最干净和最好的做法是设置`font-size:0;`为父,然后显式为子,例如`fon-size:16px;`@zessx随意提高答案 (3认同)
  • 这就是我讨厌前端开发的原因. (3认同)
  • 感觉应该提到你需要在行中的所有列上使用`.vcenter`,你不能只在一个列上使用它。 (2认同)

Has*_*ami 877

灵活的盒子布局

随着CSS Flexible Box的出现,许多网页设计师的噩梦1已经得到解决.最hacky之一,垂直对齐.现在即使在未知的高度也是可能的.

"二十年的布局黑客即将结束.也许不是明天,但很快,以及我们的余生."

- CSS传奇埃里克·迈耶W3Conf 2013

Flexible Box(或简称Flexbox)是一种专为布局目的而设计的新布局系统.该规范规定:

Flex布局在表面上类似于块布局.它缺少许多可用于块布局的更复杂的以文本或文档为中心的属性,例如浮点数和列.作为回报,它获得了简单而强大的工具,用于分配空间并以Web应用程序和复杂网页通常需要的方式对齐内容.

在这种情况下,它如何帮助?好的,我们等着瞧.


垂直对齐的列

使用Twitter Bootstrap我们有.row一些.col-*s.我们需要做的就是将所需的.row2显示为弹性容器盒,然后按属性垂直对齐其所有弹性项目(列)align-items.

这里的例子 (请仔细阅读评论)

<div class="container">
    <div class="row vertical-align"> <!--
                    ^--  Additional class -->
        <div class="col-xs-6"> ... </div>
        <div class="col-xs-6"> ... </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)
.vertical-align {
    display: flex;
    align-items: center;
}
Run Code Online (Sandbox Code Playgroud)

输出

Twitter Bootstrap中的垂直对齐列

彩色区域显示填充框的列.

澄清 align-items: center

8.3交叉轴对齐:align-items属性

柔性物品可以在柔性容器的当前线的交叉轴上对齐,类似于justify-content但是在垂直方向上.align-items设置所有Flex容器项的默认对齐方式,包括匿名弹性项.

align-items: center; 按中心值,弹性项目的边距框位于线条内的横轴中心.


大警报

重要提示#1:width除非您为.col-xs-#列提供其中一个类,否则Twitter Bootstrap不会指定超小型设备中的列.

因此,在这个特定的演示中,我使用了.col-xs-*类来使列在移动模式下正确显示,因为它明确指定width了列的列.

但是,您也可以通过更改为特定的屏幕尺寸来关闭 Flexbox布局.例如:display: flex;display: block;

/* Extra small devices (767px and down) */
@media (max-width: 767px) {
    .row.vertical-align {
        display: block; /* Turn off the flexible box layout */
    }
}
Run Code Online (Sandbox Code Playgroud)

或者你可以指定.vertical-align 在特定的屏幕尺寸,如下所示:

/* Small devices (tablets, 768px and up) */
@media (min-width: 768px) {
    .row.vertical-align {
        display: flex;
        align-items: center;
    }
}
Run Code Online (Sandbox Code Playgroud)

在那种情况下,我会采用@KevinNelson方法.

重要说明#2:由于简洁,省略了供应商前缀.Flexbox语法在此期间已更改.新的书面语法不适用于旧版本的Web浏览器(但不像Internet Explorer 9那样旧!Internet Explorer 10及更高版本支持Flexbox).

这意味着您还应该display: -webkit-box在生产模式中使用像(等)这样的供应商前缀属性.

如果单击Demo中的"Toggle Compiled View",您将看到CSS声明的前缀版本(感谢Autoprefixer).


具有垂直对齐内容的全高柱

正如您在上一个演示中看到的那样,列(flex项)不再像它们的容器那样高(flex容器盒.即.row元素).

这是因为使用centeralign-items属性值.默认值是stretch这些项可以填充父元素的整个高度.

为了解决这个问题,您还可以添加display: flex;到列中:

这里的例子 (再次,请注意评论)

.vertical-align {
  display: flex;
  flex-direction: row;
}

.vertical-align > [class^="col-"],
.vertical-align > [class*=" col-"] {
  display: flex;
  align-items: center;     /* Align the flex-items vertically */
  justify-content: center; /* Optional, to align inner flex-items
                              horizontally within the column  */
}
Run Code Online (Sandbox Code Playgroud)

输出

在Twitter Bootstrap中具有垂直对齐内容的全高列

彩色区域显示填充框的列.

最后,但并非最不重要的是,请注意这里的演示和代码片段旨在为您提供不同的想法,以提供实现目标的现代方法.如果您打算在现实世界的网站或应用程序中使用此方法,请注意" 大警报 "部分.


有关浏览器支持的进一步阅读,这些资源将非常有用:


1. 垂直对齐div内的图像,响应高度为 2.最好使用其他类,以免改变Twitter Bootstrap的默认值.row.

  • 我试过这个并没有按照预期的方式为我工作,直到我编辑你的小提琴并意识到这完全没用,浪费时间.这样做完全错过了响应式设计的重点,因为当列不适合屏幕时,列不会再堆叠在其他列之上,从而使得引导程序的需求完全无用并且使站点无响应.要查看我的意思,请在相应示例中将任何col-xs-*更改为col-xs-12,使浏览器屏幕非常小(如移动设备)并查看结果:不再响应. (12认同)
  • 经过一番研究,我实际上发现HTML5Please.com说有足够的支持来使用它.所以这太棒了!http://html5please.com/#flexbox (9认同)
  • @HashemQolami虽然您使用的是名为`col-*`的类,但您的小提琴/代码不使用引导程序,因此它们具有误导性.您的示例不适用于bootstrap; 它的网格系统不是基于`flex`,因此它们是不兼容的.只需在引导程序页面中尝试任何示例,您就会发现它们无法正常工作. (8认同)
  • 这实际上是最好的解决方案,应该有更多的支持.当然,我们开发人员必须尽可能多地使用它来传播它. (6认同)
  • @Hashem Qolami仍然找不到任何用例的建议.Bootstrap的核心功能之一是,一旦它们不能水平放置,列就会叠加在一起.您的解决方案不再发生这种情况.即使您只加载样式,网格系统仍然有效,正如您可以看到的[在这个小提琴](http://jsfiddle.net/vd41r313/).没有js; 只是css.更改渲染区域的大小,它将响应.在您的任何示例中都不会发生这种情况."移动优先"方法丢失,无需Bootstrap.所以这个答案是错误的,误导性的或不完整的. (5认同)
  • @HashemQolami抱歉,但你错了.每种情况下都会加载Bootstrap css,但bootstrap本身并未运行.在你的第一个和第二个Codepens中,通过在每个屏幕大小中更改你的`col-*`以适应12列,就像在我之前的评论中告诉你的那样(你是否尝试过? ).然后让你的浏览器足够小,注意它们没有堆栈:http://codepen.io/anon/pen/pvLpeR http://codepen.io/anon/pen/zxWpzR此外没有bootstrap .js的痕迹来源 - 自己检查一下. (4认同)
  • 我喜欢使用Flex而且我一直在使用Chrome打包应用程序,这意味着我不必担心跨浏览器的CSS,但是在其他项目中我还不能使用它,因为它不受旧版本支持浏览器.只是认为这将是有用的信息. (2认同)
  • @Pere和其他所有人抱怨移动优先事项......通过提供移动回退很容易解决[见移动回退示例2](http://s.codepen.io/bootstrapped/debug/bEYQGd) .此外,它可以很容易地与所有引导程序一起使用.[这是一个复杂的例子,有面板,缩略图等](http://codepen.io/bootstrapped/details/RrabNe/)或者看[我的解释在这里](http://stackoverflow.com/a/34800816/3123861) . (2认同)
  • @BryanWillis"抱怨移动优先事项".(几乎)Bootstrap的唯一目的就是"移动优先".如果不是因为制作响应式(移动适应性)网站而使用Bootstrap网格系统,我找不到任何用例.如果您只是想在桌面站点中使用某种"列",那么您不需要全部开销Bootstrap提供; 这是旧的,简单明了的HTML + CSS.因此,如果有人在Bootstrap列中提供垂直对齐的"解决方案"而不同时提供"移动回退",那么有人在这里忽略了这一点. (2认同)
  • ...或者可以添加`flex-wrap:wrap`来阻止浮动模型的破坏. (2认同)

Tha*_*nga 46

以下代码对我有用:

.vertical-align {
    display: flex;
    align-items: center;
}
Run Code Online (Sandbox Code Playgroud)

  • 最简单的解决方案IMHO (4认同)
  • 任何人都有一个适用于单列的解决方案?我排了一排,然后进入了一个col-md-6.此解决方案和其他flexbox仅在有2列时才有效 (3认同)

Zim*_*Zim 28

更新2018年

我知道最初的问题是针对Bootstrap 3,但是现在已经发布了Bootstrap 4,这里有一些关于垂直中心的更新指南.

重要! 垂直中心相对于父级的高度

如果你试图中心元素的父一直没有明确的 高度,没有垂直居中的解决方案将工作!

Bootstrap 4

现在BS4是flexbox,默认情况下有许多不同的垂直对齐方法:自动边距,flexbox utils,或display utils以及vertical align utils.起初,"vertical align utils"似乎很明显,但这些适用于内联和表格显示元素.这里有一些Bootstrap 4垂直居中选项..


1 - 使用自动边距的垂直中心:

垂直居中的另一种方法是使用my-auto.这会将元素置于其容器中心.例如,h-100使行成为全高,并使列my-auto垂直居中col-sm-12.

<div class="row h-100">
    <div class="col-sm-12 my-auto">
        <div class="card card-block w-25">Card</div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

BS4 - 使用自动边距演示的垂直中心

my-auto 表示垂直y轴上的边距,相当于:

margin-top: auto;
margin-bottom: auto;
Run Code Online (Sandbox Code Playgroud)

2 - 带Flexbox的垂直中心:

垂直中心网格列

从Bootstrap 4 .row开始,display:flex您可以简单地align-self-center在任何列上使用它来垂直居中...

       <div class="row">
           <div class="col-6 align-self-center">
                <div class="card card-block">
                 Center
                </div>
           </div>
           <div class="col-6">
                <div class="card card-inverse card-danger">
                    Taller
                </div>
          </div>
    </div>
Run Code Online (Sandbox Code Playgroud)

或者,使用align-items-center整个.row垂直居中对齐所有col-*行...

       <div class="row align-items-center">
           <div class="col-6">
                <div class="card card-block">
                 Center
                </div>
           </div>
           <div class="col-6">
                <div class="card card-inverse card-danger">
                    Taller
                </div>
          </div>
    </div>
Run Code Online (Sandbox Code Playgroud)

BS4 - 垂直中心不同高度列演示


3 - 垂直中心使用Display Utils:

自举4具有显示utils的,可以被用于display:table,display:table-cell,display:inline等.这些可以与使用垂直取向utils的对准内联的,内联块或表格单元格的元件.

<div class="row h-50">
    <div class="col-sm-12 h-100 d-table">
        <div class="card card-block d-table-cell align-middle">
            I am centered vertically
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

BS4 - 使用display utils 演示的垂直中心

另见: Bootstrap中的垂直对齐中心4


Bootstrap 3

物品容器上的Flexbox方法为中心:

.display-flex-center {
    display: flex;
    align-items: center;
}
Run Code Online (Sandbox Code Playgroud)

变换translateY方法:

.transform-center-parent {
    position: relative;
    transform-style: preserve-3d;
}

.transform-center {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
}
Run Code Online (Sandbox Code Playgroud)

显示内联方法:

.display-inline-block {
    display: inline;
}
.display-inline-block > div {
    display: inline-block;
    float: none;
    vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)

Bootstrap 3定心方法的演示


use*_*160 26

在div的CSS中尝试这个:

display: table-cell;
vertical-align: middle;
Run Code Online (Sandbox Code Playgroud)

  • 这使得切换到响应模式变得非常棘手. (3认同)
  • 父元素需要显示:table (3认同)

Kev*_*son 21

我想我会分享我的"解决方案",以防它帮助其他不熟悉@media查询的人.

感谢@HashemQolami的回答,我构建了一些媒体查询,这些查询可以像col-*类一样移动起来,这样我就可以将col-*堆叠到移动设备上,但是在中心垂直对齐显示更大的屏幕,例如

<div class='row row-sm-flex-center'>
    <div class='col-xs-12 col-sm-6'></div>
    <div class='col-xs-12 col-sm-6'></div>
</div>
Run Code Online (Sandbox Code Playgroud)

.

.row-xs-flex-center {
    display:flex;
    align-items:center;
}
@media ( min-width:768px ) {
    .row-sm-flex-center {
        display:flex;
        align-items:center;
    }
}
@media ( min-width: 992px ) {
    .row-md-flex-center {
        display:flex;
        align-items:center;
    }
}
@media ( min-width: 1200px ) {
    .row-lg-flex-center {
        display:flex;
        align-items:center;
    }
}
Run Code Online (Sandbox Code Playgroud)

每个屏幕分辨率需要不同列数的更复杂的布局(例如,-xs为2行,-sm为3,-md为4等)需要更高级的finagling,但对于带-xs的简单页面堆叠和-sm和更大的行,这工作正常.


Man*_*zep 21

根据接受的答案,如果您不希望自定义标记,分离关注点或仅仅因为您使用CMS,以下解决方案可以正常工作:

.valign {
  font-size: 0;
}

.valign > [class*="col"] {
  display: inline-block;
  float: none;
  font-size: 14px;
  font-size: 1rem;
  vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/>
<div class="row valign">
   <div class="col-xs-5">
      <div style="height:5em;border:1px solid #000">Big</div>
   </div>
   <div class="col-xs-5">
       <div style="height:3em;border:1px solid #F00">Small</div>
   </div>
 </div>
Run Code Online (Sandbox Code Playgroud)

这里的限制是您不能从父元素继承字体大小,因为该行将字体大小设置为0以删除空格.


use*_*388 20

我更喜欢这种方法,根据David Walsh Vertical center CSS:

.children{
    position: relative;
    top: 50%;
    transform: translateY(-50%);
}
Run Code Online (Sandbox Code Playgroud)

transform不是必要的; 它只是更准确地找到中心.因此,Internet Explorer 8可能会稍微不那么集中,但它仍然不错 - 我可以使用 - 转换2d.


Edv*_*erg 17

这是我的解决方案.只需将此类添加到您的CSS.

.align-middle {
  display: flex;
  justify-content: center;
  align-items: center;
}
Run Code Online (Sandbox Code Playgroud)

然后你的HTML看起来像这样.

<div class="col-xs-12 align-middle">
  <div class="col-xs-6" style="background-color:blue;">
    <h3>Item</h3>
    <h3>Item</h3>
  </div>
  <div class="col-xs-6" style="background-color:red;">
    <h3>Item</h3>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

.align-middle {
  display: flex;
  justify-content: center;
  align-items: center;
}
Run Code Online (Sandbox Code Playgroud)
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<!DOCTYPE html>
    <title>Title</title>
  </head>
  <body>
    <div class="container">
      <div class="row">
        <div class="col-xs-12 align-middle">
          <div class="col-xs-6" style="background-color:blue;">
            <h3>Item</h3>
            <h3>Item</h3>
          </div>
          <div class="col-xs-6" style="background-color:red;">
            <h3>Item</h3>
          </div>
        </div>
      </div>
    </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 这会破坏响应类,例如 col-md-6 (2认同)

Rya*_*der 15

我刚刚做了这个,它做了我想做的事.

.align-middle {
  margin-top: 25%;
  margin-bottom: 25%;
}
Run Code Online (Sandbox Code Playgroud)

现在我的页面看起来像

<div class='container-fluid align-middle'>
    content

 +--------------------------------+
 |                                |
 |  +--------------------------+  |
 |  |                          |  |
 |  |                          |  |
 |  |                          |  |
 |  |                          |  |
 |  |                          |  |
 |  +--------------------------+  |
 |                                |
 +--------------------------------+
Run Code Online (Sandbox Code Playgroud)


bab*_*kes 10

我真的发现以下代码使用Chrome而不是其他浏览器而不是当前选择的答案:

.v-center {
    display:table!important; height:125px;
}

.v-center div[class*='col-'] {
   display: table-cell!important;
   vertical-align:middle;
   float:none;
}
.v-center img {
   max-height:125px;
}
Run Code Online (Sandbox Code Playgroud)

Bootply链接

您可能需要修改高度(特别是在.v-center)并删除/更改div以div[class*='col-']满足您的需求.


Kin*_*mah 8

我遇到了同样的问题.在我的情况下,我不知道外部容器的高度,但这是我修复它的方式:

首先设置您htmlbody元素的高度,使它们为100%.这个很重要!如果没有这个,htmlbody元素将简单地继承他们孩子的身高.

html, body {
   height: 100%;
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个外容器类:

.container {
  display: table;
  width: 100%;
  height: 100%; /* For at least Firefox */
  min-height: 100%;
}
Run Code Online (Sandbox Code Playgroud)

最后是带有类的内部容器:

.inner-container {
  display: table-cell;
  vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)

HTML非常简单:

<body>
   <div class="container">
     <div class="inner-container">
        <p>Vertically Aligned</p>
     </div>
   </div>
</body>
Run Code Online (Sandbox Code Playgroud)

这就是垂直对齐内容所需的全部内容.在小提琴中查看:

的jsfiddle


Ger*_*bus 7

如果您使用的是Less版本的Bootstrap,并且自己编译成CSS,则可以使用一些实用程序类来与Bootstrap类一起使用.

我发现这些工作非常好,我想保留Bootstrap网格系统的响应性和可配置性(比如使用-md-sm),但我希望给定行中的所有列都具有相同的垂直高度(这样我就可以然后垂直对齐他们的内容,让行中的所有列共享一个公共中间).

CSS /减:

.display-table {
    display: table;
    width: 100%;
}
.col-md-table-cell {
    @media (min-width: @screen-md-min) {
        display: table-cell;
        vertical-align: top;
        float: none;
    }
}
.col-sm-table-cell {
    @media (min-width: @screen-sm-min) {
        display: table-cell;
        vertical-align: top;
        float: none;
    }
}
.vertical-align-middle {
    vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<div class="row display-table">
    <div class="col-sm-5 col-sm-table-cell vertical-align-middle">
        ...
    </div>
    <div class="col-sm-5 col-sm-table-cell vertical-align-middle">
        ...
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)


Arv*_*waj 7

不需要桌子和桌子.使用变换可以轻松实现.示例:http://codepen.io/arvind/pen/QNbwyM

码:

.child {
  height: 10em;
  border: 1px solid green;
  position: relative;
}
.child-content {
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
<div class="row parent">
  <div class="col-xs-6 col-lg-6 child">
    <div class="child-content">
      <div style="height:4em;border:1px solid #000">Big</div>
    </div>
  </div>
  <div class="col-xs-6 col-lg-6 child">
    <div class="child-content">
      <div style="height:3em;border:1px solid #F00">Small</div>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)


sb.*_*son 6

我详细阐述了zessx的答案,以便在不同屏幕尺寸上混合不同的列大小时更容易使用.

如果您使用Sass,可以将其添加到您的scss文件中:

@mixin v-col($prefix, $min-width) {
    @media (min-width: $min-width) {
        .col-#{$prefix}-v {
            display: inline-block;
            vertical-align: middle;
            float: none;
        }
    }
}

@include v-col(lg, $screen-lg);
@include v-col(md, $screen-md);
@include v-col(sm, $screen-sm);
@include v-col(xs, $screen-xs);
Run Code Online (Sandbox Code Playgroud)

这会生成以下CSS(如果您不使用Sass,可以直接在样式表中使用):

@media (min-width: 1200px) {
    .col-lg-v {
        display: inline-block;
        vertical-align: middle;
        float: none;
    }
}

@media (min-width: 992px) {
    .col-md-v {
        display: inline-block;
        vertical-align: middle;
        float: none;
    }
}

@media (min-width: 768px) {
    .col-sm-v {
        display: inline-block;
        vertical-align: middle;
        float: none;
    }
}

@media (min-width: 480px) {
    .col-xs-v {
        display: inline-block;
        vertical-align: middle;
        float: none;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以在响应列上使用它,如下所示:

<div class="container">
    <div class="row">
        <div class="col-sm-7 col-sm-v col-xs-12">
            <p>
                This content is vertically aligned on tablets and larger. On mobile it will expand to screen width.
            </p>
        </div><div class="col-sm-5 col-sm-v col-xs-12">
            <p>
                This content is vertically aligned on tablets and larger. On mobile it will expand to screen width.
            </p>
        </div>
    </div>
    <div class="row">
        <div class="col-md-7 col-md-v col-sm-12">
            <p>
                This content is vertically aligned on desktops and larger. On tablets and smaller it will expand to screen width.
            </p>
        </div><div class="col-md-5 col-md-v col-sm-12">
            <p>
                This content is vertically aligned on desktops and larger. On tablets and smaller it will expand to screen width.
            </p>
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)


Bot*_*cul 5

自 Bootstrap 4 以来,本机支持 Flex 行为。d-flex align-items-centerrowdiv 中添加。您不再需要修改 CSS 内容。

简单示例:http : //jsfiddle.net/vgks6L74/

<!-- language: html -->
<div class="row d-flex align-items-center">
  <div class="col-5 border border-dark" style="height:10em">  Big </div>
  <div class="col-2 border border-danger" style="height:3em"> Small </div>
</div>
Run Code Online (Sandbox Code Playgroud)

以你的例子:http : //jsfiddle.net/7zwtL702/

<!-- language: html -->
<div class="row d-flex align-items-center">
    <div class="col-5">
        <div class="border border-dark" style="height:10em">Big</div>
    </div>
    <div class="col-2">
        <div class="border border-danger" style="height:3em">Small</div>
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

来源:Flex·Bootstrap