与Bootstrap 3垂直对齐


889

我正在使用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>

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


1
不,不,我想垂直对齐2 div,里面没有文本,像这样的jsfiddle.net/corinem/Aj9H9,但是在这个示例中,我不使用bootstrap
corinem 2013年


6
重要说明:两列都需要“ vcenter”类。否则它将无法正常工作。现在只花一个小时就花了一个小时。
Cymro

对于我来说,没有答案能在chrome IE8和移动设备上完美地工作,因为我的行包含5个
col-

在Bootstrap 4中,垂直中心对齐非常不同:stackoverflow.com/a/41464397/171456
Zim

Answers:


938

这个答案是一个hack,但是我强烈建议您使用flexbox(如@Haschem answer中所述),因为它现在在任何地方都受支持。

演示链路:
- 引导3
- 自举4素α6

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

.vcenter {
    display: inline-block;
    vertical-align: middle;
    float: none;
}
<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>

自举

inline-block如果您在代码中保留实际空间(例如...</div> </div>...),则using 在块之间添加了额外的空间。如果列大小总计为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>

在这里,我们在<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>

在此处输入图片说明

注意到看似无用的评论了<!-- ... -->吗?它们很重要 -如果没有它们,<div>元素之间的空白将占据布局中的空间,从而破坏网格系统。

注意:Bootply已更新


18
如果您指定总计为12的列网格(例如,使用col-lg-2col-lg-10),则会中断此操作。有趣的是,如果添加以下JS代码(假设使用jQuery),则它可以自行修复:$('.row').html($('.vcenter'));
Jake Z

8
@pasemes这是由(众所周知)的inline-block 多余空间引起的。我在编辑中给出了解决方案。
zessx 2014年

92
带有空白注释的部分感觉像是深沉的,黑暗的,邪恶的魔术。是的。但是某个地方的人认为它应该起作用,所以它确实起作用。
cfstras 2014年

5
尚未有人对此感到惊讶,但是您可以设置“ font-size:0;”代替注释内容。内联块div的父级上删除“神秘空间”
Poff

4
无需使用任何html注释<!-->或任何javascript代码来解决额外的空间问题,这里有一个简单有效的CSS技巧:负边距。只需添加margin-right:-4px; .vcenter类。经过测试并可以与所有浏览器一起使用(旧版IE6和IE7除外,但谁在乎史前时代;))
Frank

897

灵活的盒子布局

随着CSS Flexible Box的问世,许多Web设计师的噩梦1得到了解决。hacky之一,垂直对齐。现在即使在未知高度也有可能。

“两十年的布局黑客活动即将结束。也许不是明天,而是很快,还有我们的余生。”

— CSS传奇Eric MeyerW3Conf 2013上

柔性箱(或简称为Flexbox)是一种专门用于布局目的的新布局系统。该规范规定

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

在这种情况下如何提供帮助?好的,我们等着瞧。


垂直对齐的列

使用Twitter Bootstrap,我们有.row一些.col-*。我们要做的就是将所需的.row2显示为flex容器框,然后按属性将其所有flex项目 s(各列)垂直对齐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>
.vertical-align {
    display: flex;
    align-items: center;
}

输出

Twitter Bootstrap中的垂直对齐列

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

澄清 align-items: center

8.3跨轴对齐:align-items属性

伸缩项可以在伸缩容器的当前行的横轴上对齐,类似于justify-content但在垂直方向上。align-items为所有flex容器的项目设置默认对齐方式,包括匿名flex项目

align-items: center; 按中心值,弹性项目的边距框位于行内交叉轴的中心。


大警报

重要说明#1: Twitter Bootstrap不会width在超小型设备中指定列的,除非您为.col-xs-#列提供类之一。

因此,在这个特定的演示中,我使用了.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 */
    }
}

或者您可以在特定的屏幕尺寸上指定,.vertical-align 例如:

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

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

重要说明#2:由于简洁,省略了供应商前缀。Flexbox语法在此期间已更改。新的书面语法在旧版本的Web浏览器上将不起作用(但不能与Internet Explorer 9一样旧!Internet Explorer 10和更高版本支持Flexbox)。

这意味着您还应该display: -webkit-box在生产模式下使用供应商前缀属性,例如等等。

如果在演示中单击“切换编译视图”,您将看到CSS声明的前缀版本(这要归功于Autoprefixer)。


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

正如您在上一个演示中看到的那样,列(弹性项目)不再像其容器(弹性容器框,即.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  */
}

输出

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

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

最后但并非最不重要的一点是,请注意,此处的演示和代码段旨在为您提供不同的想法,从而提供一种实现目标的现代方法。如果要在现实世界的网站或应用程序中使用此方法,请注意“ 大警报 ”部分。


为了进一步阅读,包括浏览器支持,这些资源将很有用:


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


9
经过一番研究,我实际上发现HTML5Please.com表示有足够的​​支持来使用它。太棒了!html5please.com/#flexbox
Alec Moore

6
这实际上是最好的解决方案,应该有更多的支持。当然,我们开发人员必须尽可能多地使用它来传播它。
Mateus Neves 2014年

12
我尝试了此操作,但没有按预期的方式为我工作,直到我编辑了您的小提琴并意识到这完全没有用而且浪费时间。这样做完全错过了响应式设计的要点,因为当列不适合屏幕时,它们将不再堆叠在其他列之上,从而导致对引导的需求完全无用,并使网站无响应。要了解我的意思,请将相应示例中的任何col-xs- *更改为col-xs-12,使您的浏览器屏幕非常小(如移动设备),并查看结果:不再具有响应性。
2015年

8
@HashemQolami尽管您使用的是名为的类col-*,但您的小提琴/代码笔没有使用引导程序,因此会产生误导。您的示例不适用于引导程序;它的网格系统不基于flex,因此它们不兼容。只需在具有引导功能的页面中尝试任何示例,您就会发现它们不起作用。
Pere 2015年

5
@Hashem Qolami仍然找不到您的建议的任何用例。Bootstrap的核心区别特征之一是,一旦它们不水平放置,列就会彼此堆叠。您的解决方案不再发生这种情况。正如您在本小提琴中看到的那样,即使仅加载样式,网格系统也能正常工作。没有js; 只是CSS。更改渲染区域的大小,它将响应。在您的任何示例中都不会发生这种情况。失去了“移动优先”的方法,因此无需使用Bootstrap。因此,此答案不正确,具有误导性或不完整。
Pere 2015年

48

下面的代码为我工作:

.vertical-align {
    display: flex;
    align-items: center;
}

4
最简单的解决方案恕我直言
saiyancoder

3
任何人都可以使用单列的解决方案吗?我排成一行,然后进入col-md-6。此解决方案和其余Flexbox解决方案仅在有2列的情况下才有效
Ka Mok

36

更新2020

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

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

如果您试图居中的元素的父元素没有定义的高度,那么任何垂直居中解决方案都将无效 !

引导程序4

现在,默认情况下,Bootstrap 4是flexbox,因此有许多不同的垂直对齐方式可以使用:自动边距flexbox utilsdisplay 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>

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

my-auto 表示垂直y轴上的边距,它等效于:

margin-top: auto;
margin-bottom: auto;

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>

或者,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>

Bootstrap 4-垂直居中的不同高度的列Demo


3-使用显示实用程序的垂直居中:

自举4具有显示utils的,可以被用于display:tabledisplay:table-celldisplay: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>

Bootstrap 4-使用display utils 演示的垂直居中

另请参阅: Bootstrap 4中的垂直对齐中心


引导程序3

在要居中的项目容器上的Flexbox方法:

.display-flex-center {
    display: flex;
    align-items: center;
}

转换translateY方法:

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

.transform-center {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
}

显示内联方法:

.display-inline-block {
    display: inline;
}
.display-inline-block > div {
    display: inline-block;
    float: none;
    vertical-align: middle;
}

Bootstrap 3居中方法演示


1
是用于mx-auto(水平居中)的Bootstrap文档,因此有意义的是my-auto垂直居中(y轴)。
xinthose


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>

.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;
    }
}

每个屏幕分辨率需要不同列数的更复杂的布局(例如-xs为2行,-sm为3行,-md为4行等),但是需要使用-xs的简单页面堆叠和-sm并在行中更大,这很好用。


以我为例,我必须clear: both;在媒体查询中的类中添加一个,以使其正常工作。
motaa

1
@motaa,很抱歉给您带来混乱...以BS3的方式,正如您在我的HTML示例中看到的那样,我将其用作.row修饰符...因此它应该看起来像class="row row-sm-flex-center"。BS3 .row定义处理clear:both;
凯文·尼尔森

我应该更彻底地分析您的html代码。:)我也确实使用.row修饰符,但在我的情况下(wordpress),它在父主题中已更改,最终导致我clear: both;再次添加了。
motaa

21

按照您接受的答案,如果您不想自定义标记,为了关注点分离或仅仅因为您使用CMS,可以使用以下解决方案:

.valign {
  font-size: 0;
}

.valign > [class*="col"] {
  display: inline-block;
  float: none;
  font-size: 14px;
  font-size: 1rem;
  vertical-align: middle;
}
<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>

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



17

这是我的解决方案。只需将此类添加到您的CSS内容即可。

.align-middle {
  display: flex;
  justify-content: center;
  align-items: center;
}

然后,您的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>

.align-middle {
  display: flex;
  justify-content: center;
  align-items: center;
}
<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>


1
这会中断响应式类,例如col-md-6
Lucas Bustamante

15

我只是这样做,并且它做了我想要做的。

.align-middle {
  margin-top: 25%;
  margin-bottom: 25%;
}

现在我的页面看起来像

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

 +--------------------------------+
 |                                |
 |  +--------------------------+  |
 |  |                          |  |
 |  |                          |  |
 |  |                          |  |
 |  |                          |  |
 |  |                          |  |
 |  +--------------------------+  |
 |                                |
 +--------------------------------+

这种方法的问题在于,当DIV具有指定的高度时,它似乎不起作用: jsfiddle.net/4bpxen25/1 我建议: stackoverflow.com/a/28519318/1477388
user1477388

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;
}

自举链接

您可能需要修改高度(特别是.v-center),并根据div[class*='col-']需要删除/更改div 。


8

我遇到了同样的问题。就我而言,我不知道外部容器的高度,但是这是我固定它的方式:

首先,将html和的高度设置为body100%。这个很重要!没有这些,htmland body元素将仅继承其子代的高度。

html, body {
   height: 100%;
}

然后我有一个外部容器类:

.container {
  display: table;
  width: 100%;
  height: 100%; /* For at least Firefox */
  min-height: 100%;
}

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

.inner-container {
  display: table-cell;
  vertical-align: middle;
}

HTML很简单:

<body>
   <div class="container">
     <div class="inner-container">
        <p>Vertically Aligned</p>
     </div>
   </div>
</body>

这就是垂直对齐内容所需的全部。在小提琴中检查一下:

Jsfiddle


8

不需要表格和表格单元格。使用转换可以轻松实现。

示例: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%);
}
<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>


7

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

我发现它们在我想保留Bootstrap网格系统的响应能力和可配置性的情况下非常有效地工作(例如使用-md-sm)的情况下,但是我希望给定行中的所有列都具有相同的垂直高度(以便然后垂直对齐其内容,并使该行中的所有列共享同一中间)。

CSS / Less:

.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;
}

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>

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);

生成以下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;
    }
}

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

<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>

真是太好了!
Pietro Coelho

仅由于语法简短和使用LESS变量而被推荐。
爱德华·卢卡

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>

以您的示例为例: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>

资料来源:Flex·Bootstrap


4

好的,我偶然混合了一些解决方案,现在终于可以在我的布局中使用了,在该布局中,我尝试使用最小分辨率的Bootstrap列制作3x3表格。

/* Required styles */

#grid a {
  display: table;
}

#grid a div {
  display: table-cell;
  vertical-align: middle;
  float: none;
}


/* Additional styles for demo: */

body {
  padding: 20px;
}

a {
  height: 40px;
  border: 1px solid #444;
}

a > div {
  width: 100%;
  text-align: center;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />

<div id="grid" class="clearfix row">
  <a class="col-xs-4 align-center" href="#">
    <div>1</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>2</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>3</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>4</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>5</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>6</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>7</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>8</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>9</div>
  </a>
</div>


2

    div{
        border: 1px solid;
    }
    span{
        display: flex;
        align-items: center;
    }
    .col-5{
        width: 100px;
        height: 50px;
        float: left;
        background: red;
    }
    .col-7{
        width: 200px;
        height: 24px;

        float: left;
        background: green;
    }
    <span>
        <div class="col-5">
        </div>
        <div class="col-7"></div>
    </span>


1

尝试这个,

.exe {
  font-size: 0;
}

.exe > [class*="col"] {
  display: inline-block;
  float: none;
  font-size: 14px;
  font-size: 1rem;
  vertical-align: middle;
}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/>
<div class="row  exe">
   <div class="col-xs-5">
      <div style="height:5em;border:1px solid grey">Big</div>
   </div>
   <div class="col-xs-5">
       <div style="height:3em;border:1px solid red">Small</div>
   </div>
 </div>


1

有几种方法可以做到:

  1. 采用 

    display: table-cell;
    vertical-align: middle;

    和容器的CSS

    display: table;
  2. 将填充与媒体屏幕一起使用,以相对于屏幕大小更改填充。Google @media屏幕了解更多信息。

  3. 使用相对填充

    即,以百分比指定填充


0

使用Bootstrap 4(当前处于Alpha版),您可以使用.align-items-center该类。因此,您可以保留Bootstrap的响应性。立即为我工作。请参阅Bootstrap 4文档


仅当包含元素为display:flex时,这才适用于某些项目。
Zim

0

的HTML

<div class="row">
    <div class="col-xs-2 pull-bottom"
         style="height:100px;background:blue">
    </div>
    <div class="col-xs-8 pull-bottom"
         style="height:50px;background:yellow">
    </div>
</div>

的CSS

.pull-bottom {
    display: inline-block;
    vertical-align: bottom;
    float: none;
}

-4

我遇到了相同的情况,我想在一行中垂直对齐一些div元素,发现Bootstrap类col-xx-xx将样式作为float应用于div:左。

我必须将样式应用于诸如style =“ Float:none”之类的div元素上,并且所有div元素都开始垂直对齐。这是工作示例:

<div class="col-lg-4" style="float:none;">

JsFiddle链接

万一有人想阅读有关float属性的更多信息:

W3Schools-浮动


这对我不起作用。我在Firefox和Chrome中进行了测试。所有面板垂直堆叠。
Alf

float:none不会使它们垂直堆叠,这就是它的工作方式。
ATHER

1
然后,这是一个不同问题的正确答案。;)
Alf
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.