我有以下HTML和CSS布局:
html {
position: relative;
min-height: 100%;
}
body {
/* Margin bottom by footer height */
margin-bottom: 100px;
}
.col-md-6 {
display: flex;
justify-content: center;
}
.container_flex {
display: flex;
align-items: center;
justify-content: center;
/* vh refers to viewport height. Very useful! */
height: 100vh;
width: 100%;
}

<div class="container-fluid">
<div class="container_flex">
<div class="row">
<div class="col-md-6 col-xs-12" style="border:solid">
<h1>Column 1</h1>
</div>
<div class="col-md-6 col-xs-12" style="border:solid">
<h1>Column 2</h1>
</div>
</div>
</div>
</div>
&#13;
其中提供了以下结果:
我使用Flexbox的目的是垂直居中&#34; row&#34;在容器内部。但是,这会导致列在桌面模式下采用压缩外观。在移动视图中,列按预期堆栈。如果有人能解释为什么会出现这种压缩/粗短外观,我将不胜感激?
相反,如果删除行类,则不再显示此粗短压缩外观,如下所示:
但是,在移动视图中,列不再堆叠。有什么办法可以纠正这个问题吗?
如果有人有任何提示/指示如何有效地使用FlexBox和Bootstrap以比我在这里尝试更有效的方式垂直和水平居中,我将非常感激。
答案 0 :(得分:5)
删除行元素后,.col
元素将成为您的flex项。要使flex-items包装在Flex容器中,您需要使用flex-wrap
属性。但是,我不认为删除行元素和使用flex-wrap是你真正想要的。
关于你的问题。在第一个示例中看起来粗短的原因是因为您将row
元素作为'flex-item'。然后行项的宽度会调整其内容的大小,因为您尚未设置控制其大小的flex属性。正确设置flex属性后,您将看到所需的结果:
.container_flex {
display: flex;
align-items: center;
justify-content:center;
/* vh refers to viewport height. Very useful! */
height: 100vh;
width: 100%;
}
.row {
flex: 1;
}
<div class="container-fluid">
<div class="container_flex">
<!-- Note that if using Flexbox, then do not need to wrap col- in row class but then does not stack columns on mobile... use @media? -->
<div class="row">
<div class="col-md-6 col-xs-12" style="border:solid">
<h1>Column 1</h1>
</div>
<div class="col-md-6 col-xs-12" style="border:solid">
<h1>Column 2</h1>
</div>
</div>
</div>
</div>
以下简要说明原因:flex:1
是一个快捷方式属性,它将三个单独的弹性项属性设置为:
flex-grow: 1;
如果flex-item的大小小于flex容器中的可用空间,则将其设置为大于0的值会使项目伸展以填充可用空间。如果同一容器中有多个flex项,则它们会增长以与flex-grow
属性的值成比例共享可用空间。flex-shrink: 1;
如果弹性项目的大小大于弹性容器中的可用空间,则将此值设置为大于0的值会使项目缩小以适应可用的大小空间。如果同一容器中有多个flex项,它们将缩小以与flex-shrink
属性的值成比例共享可用空间。flex-basis: 0%;
在“弯曲”之前定义元素的起始大小。 关于使用flex-box的一般信息,请查看Chris Coyier撰写的this article css技巧;他很好地解释了柔性盒的工作原理。
如果您正在寻找有关一起使用bootstrap和flex-box的信息,我建议您也阅读this article!
我希望这会有所帮助。
答案 1 :(得分:2)
您需要flex:1
向.row
提供flex-grow
,flex-shrink
和flex-basis
的简写。默认值为0 1 auto
,使用flex:1
表示它为1 1 0
html {
position: relative;
min-height: 100%;
}
body {
/* Margin bottom by footer height */
margin-bottom: 100px;
}
.row {
flex: 1
}
.col-md-6 {
display: flex;
justify-content: center;
}
.container_flex {
display: flex;
align-items: center;
justify-content: center;
/* vh refers to viewport height. Very useful! */
height: 100vh;
width: 100%;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<div class="container-fluid">
<div class="container_flex">
<div class="row">
<div class="col-md-6 col-xs-12" style="border:solid">
<h1>Column 1</h1>
</div>
<div class="col-md-6 col-xs-12" style="border:solid">
<h1>Column 2</h1>
</div>
</div>
</div>
</div>
答案 2 :(得分:1)
您也可以使用bootsrap中的flex内置库(它也会响应):
http://v4-alpha.getbootstrap.com/layout/flexbox-grid/#responsive-flexbox
.col-md-6.col-xs-12{border:solid}/* CSS neede cause border are not set by default in bootsrap :) */
<link href="http://v4-alpha.getbootstrap.com/assets/css/docs-flexbox.min.css" rel="stylesheet"/>
<link href="http://v4-alpha.getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container">
<p>To see cols side by side, run snippet in full page mode and reduce it down to average 720px width to see col stacking </p>
<div class="row">
<div class="col-md-6 col-xs-12" >
col 1
</div>
<div class="col-md-6 col-xs-12" >
col 2
</div>
</div>
</div>