我正在使用Twitter Bootstrap 3,当我想垂直对齐两个 div
时,我遇到了问题 - 例如JSFiddle link:
<!-- 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
来修复它,但我认为这对于响应式设计来说不是一个好的解决方案 .
23 回答
以下代码对我有用:
我刚刚做了这件事,它做了我想做的事 .
现在我的页面看起来像
Update 2018
我知道最初的问题是针对Bootstrap 3,但是现在已经发布了Bootstrap 4,这里有一些关于垂直中心的更新指南 .
Important! Vertical center is relative to the height of the parent
Bootstrap 4
现在BS4是 flexbox by default ,有许多不同的垂直对齐方法:auto-margins,flexbox utils或display utils以及vertical align utils . 起初"vertical align utils"似乎很明显,但这些仅适用于内联和表格显示元素 . 这里有一些Bootstrap 4垂直居中选项..
1 - Vertical Center Using Auto Margins:
垂直居中的另一种方法是使用
my-auto
. 这会将元素置于其容器中心 . 例如,h-100
使行成为全高,my-auto
将使col-sm-12
列垂直居中 .BS4 - Vertical center using auto-margins Demo
my-auto
表示垂直y轴上的边距,相当于:2 - Vertical Center with Flexbox:
由于Bootstrap 4
.row
现在是display:flex
,您可以在任何列上使用align-self-center
来垂直居中...或者,在整个
.row
上使用align-items-center
垂直居中对齐行中的所有col-*
...BS4 - Vertical center different height columns Demo
3 - Vertical Center Using Display Utils:
Bootstrap 4具有display utils,可用于
display:table
,display:table-cell
,display:inline
等 . 这些可与vertical alignment utils一起使用,以对齐内联,内联块或表格单元格元素 .BS4 - Vertical center using display utils Demo
另见:Vertical Align Center in Bootstrap 4
Bootstrap 3
Flexbox method on the container of the item(s) to center:
Transform translateY method:
Display inline method:
Demo of Bootstrap 3 centering methods
使用Bootstrap 4(当前为alpha),您可以使用
.align-items-center
类 . 所以你可以保持Bootstrap的响应特性 . 工作对我来说很好 . 见Bootstrap 4 Documentation .灵活的盒子布局
随着CSS Flexible Box的出现,许多网页设计师的噩梦1已经得到解决 . 最黑客的一个,垂直对齐 . 现在甚至可以在 unknown heights 中实现 .
Flexible Box(或简称Flexbox)是一种专为布局目的而设计的新布局系统 . specification states:
在这种情况下,它如何帮助?好的,我们等着瞧 .
垂直对齐列
使用Twitter Bootstrap我们有
.row
s有一些.col-*
s . 我们需要做的就是将所需的.row
2显示为flex container框,然后将所有flex item(列)垂直对齐align-items属性 .EXAMPLE HERE(请仔细阅读评论)
输出
彩色区域显示填充框的列 .
澄清对齐项目:中心
大警报
Important note #1: 除非您给列中的一个
.col-xs-#
类,否则Twitter Bootstrap不会在超小型设备中指定width
列 .因此,在这个特定的演示中,我使用了
.col-xs-*
类,以便在移动模式下正确显示列,因为它明确指定了列的width
.但是,您也可以通过在特定屏幕尺寸中将
display: flex;
更改为display: block;
来简化Flexbox布局 . 例如:或者你可以这样specify .vertical-align only on specific screen sizes:
在那种情况下,我会选择@KevinNelson的approach .
Important note #2: 由于简洁,省略了供应商前缀 . Flexbox语法在此期间已更改 . 新的书面语法不适用于旧版本的Web浏览器(但不像Internet Explorer 9那样旧!Internet Explorer 10及更高版本支持Flexbox) .
这意味着您还应该在 生产环境 模式中使用像
display: -webkit-box
这样的供应商前缀属性 .如果单击Demo中的"Toggle Compiled View",您将看到CSS声明的前缀版本(感谢Autoprefixer) .
具有垂直对齐内容的全高列
正如您在previous demo中看到的那样,列(弹性项目)不再像其容器一样高(弹性容器框,即
.row
元素) .这是因为
align-items
属性使用center
值 . 默认值为stretch
,以便项目可以填充父元素的整个高度 .为了解决这个问题,您还可以将
display: flex;
添加到列中:EXAMPLE HERE (再次,请注意评论)
输出
彩色区域显示填充框的列 .
Last, but not least ,请注意这里的演示和代码片段旨在为您提供不同的想法,以提供实现目标的现代方法 . 如果您打算在现实世界的网站或应用程序中使用此方法,请注意“ Big Alert ”部分 .
有关浏览器支持的进一步阅读,这些资源将非常有用:
Mozilla Developer Network - Flexible boxes
Guide To Flexbox - CSS Tricks
HTML5Rocks - Flexbox quick
SmashingMagazine - Centering Elements with Flexbox
Philip Walton - Solved By Flexbox
Can I Use: Flexible Box Layout Module
1.垂直对齐div内的图像,响应高度为2.最好使用其他类,以免改变Twitter Bootstrap的默认.row .
我遇到了同样的情况,我希望在一行中垂直对齐几个div元素,并发现Bootstrap类col-xx-xx将样式应用于div作为float:left .
我必须在div元素上应用样式,如style =“Float:none”,并且所有div元素都垂直对齐 . 这是工作示例:
JsFiddle Link
以防有人想要阅读有关float属性的更多信息:
W3Schools - Float
我真的发现以下代码使用Chrome而不是当前选择的答案以外的其他浏览器:
Bootply Link
您可能需要修改高度(特别是
.v-center
)并根据需要删除/更改div[class*='col-']
上的div .试试这个,
好吧,不小心我混了一个很少的解决方案,它最终适用于我的布局,我试图在最小分辨率下制作一个带有Bootstrap列的3x3表 .
我遇到了同样的问题 . 在我的情况下,我不知道外部容器的高度,但这是我修复它的方式:
首先设置
html
和body
元素的高度,使它们为100% . 这个很重要!如果没有这个,html
和body
元素将简单地继承他们孩子的身高 .然后我有一个外部容器类:
最后是带有类的内部容器:
HTML非常简单:
这就是垂直对齐内容所需的全部内容 . 在小提琴中查看:
Jsfiddle
不需要 table 和 table . 使用变换可以轻松实现 . 示例:http://codepen.io/arvind/pen/QNbwyM
码:
您仍然可以在需要时使用自定义类:
Bootply
如果在代码中放置一个真实空间(如
...</div> </div>...
),则使用inline-block
会在块之间添加额外的空间 . 如果列大小合计为12,则这个额外的空间会破坏我们的网格:在这里,我们在
<div class="[...] col-lg-2">
和<div class="[...] col-lg-10">
(回车和2个标签/ 8个空格)之间有额外的空格 . 所以...让我们踢出这个额外的空间!!
请注意看似无用的评论
<!-- ... -->
?它们是 important - 没有它们,<div>
元素之间的空白将占用布局中的空间,从而破坏了网格系统 .注意:Bootply已更新
在div的CSS中尝试这个:
根据接受的答案,如果您不希望自定义标记,分离关注点或仅仅因为您使用CMS,以下解决方案可以正常工作:
这里的限制是您不能从父元素继承字体大小,因为该行将字体大小设置为0以删除空格 .
自Bootstrap 4以来,本机支持Flex行为 . 在
row
div中添加d-flex align-items-center
. 您不再需要修改您的CSS .简单示例:http://jsfiddle.net/vgks6L74/
用你的例子:http://jsfiddle.net/7zwtL702/
资料来源:https://getbootstrap.com/docs/4.0/utilities/flex/
这是我的解决方案 . 只需将此类添加到您的CSS .
然后你的HTML看起来像这样 .
有几种方法可以做到这一点
1 .
以及容器的css
使用填充和媒体屏幕相对于屏幕大小更改填充 . 谷歌@media屏幕了解更多
使用相对填充,即以%表示填充
希望能帮助到你
HTML
CSS
我想我会分享我的“解决方案”,以防它帮助其他不熟悉@media查询的人 .
感谢@HashemQolami的回答,我构建了一些媒体查询,这些查询可以像col- *类一样移动起来,这样我就可以将col- *堆叠到移动设备上,但是在中心垂直对齐显示大屏幕,例如
.
每个屏幕分辨率需要不同数量的列的更复杂的布局(例如,-xs为2行,-sm为3,-md为4等)需要更高级的finagling,但对于带-xs的简单页面堆叠和-sm和更大的行,这工作正常 .
如果您使用的是Less版本的Bootstrap,并且自己编译成CSS,则可以使用一些实用程序类与Bootstrap类一起使用 .
我发现这些工作非常好,我想保留Bootstrap网格系统的响应性和可配置性(比如使用
-md
或-sm
),但我希望给定行中的所有列都具有相同的垂直高度(这样然后我可以垂直对齐它们的内容,并让行中的所有列共享一个公共中间) .CSS /减:
HTML:
我在zessx's answer上详细说明了一下,以便在不同的屏幕尺寸上混合不同的列尺寸时更容易使用 .
如果您使用Sass,则可以将其添加到scss文件中:
这会生成以下CSS(如果您不使用Sass,可以直接在样式表中使用):
现在,您可以在响应列上使用它,如下所示:
我更喜欢这种方法David Walsh Vertical center CSS:
transform
不是必不可少的;它只是更准确地找到中心 . 因此,Internet Explorer 8可能会稍微不那么集中,但它仍然不错 - Can I use - Transforms 2d .