如何使用FlexBox在容器内水平和垂直地居中div。在下面的例子中,我希望每一个数字在彼此下面(在行中),水平居中。
null
.flex-container {
padding: 0;
margin: 0;
list-style: none;
display: flex;
align-items: center;
justify-content: center;
}
row {
width: 100%;
}
.flex-item {
background: tomato;
padding: 5px;
width: 200px;
height: 150px;
margin: 10px;
line-height: 150px;
color: white;
font-weight: bold;
font-size: 3em;
text-align: center;
}
<div class="flex-container">
<div class="row">
<span class="flex-item">1</span>
</div>
<div class="row">
<span class="flex-item">2</span>
</div>
<div class="row">
<span class="flex-item">3</span>
</div>
<div class="row">
<span class="flex-item">4</span>
</div>
</div>
null
http://codepen.io/anon/pen/zlxbo
下面是两种通用的对中解决方案。
一个用于垂直对齐的弹性项目(弹性方向:列
),另一个用于水平对齐的弹性项目(弹性方向:行
)。
在这两种情况下,居中的div的高度可以是可变的、未定义的、未知的,等等。居中的div的高度并不重要。
以下是两者的HTML:
<div id="container"><!-- flex container -->
<div class="box" id="bluebox"><!-- flex item -->
<p>DIV #1</p>
</div>
<div class="box" id="redbox"><!-- flex item -->
<p>DIV #2</p>
</div>
</div>
CSS(不包括装饰风格)
垂直堆叠柔性项目时:
#container {
display: flex; /* establish flex container */
flex-direction: column; /* make main axis vertical */
justify-content: center; /* center items vertically, in this case */
align-items: center; /* center items horizontally, in this case */
height: 300px;
}
.box {
width: 300px;
margin: 5px;
text-align: center; /* will center text in <p>, which is not a flex item */
}
演示
当柔性项目水平堆叠时:
根据上面的代码调整flex-direction
规则。
#container {
display: flex;
flex-direction: row; /* make main axis horizontal (default setting) */
justify-content: center; /* center items horizontally, in this case */
align-items: center; /* center items vertically, in this case */
height: 300px;
}
演示
flex格式设置上下文的范围仅限于父子关系。子容器之外的flex容器的后代不参与flex布局,并且将忽略flex属性。从本质上讲,flex属性不能继承到子属性之外。
因此,您总是需要将display:flex
或display:inline-flex
应用于父元素,以便将flex属性应用于子元素。
为了垂直和/或水平居中包含在flex项中的文本或其他内容,使项成为(嵌套的)flex容器,并重复居中规则。
.box {
display: flex;
justify-content: center;
align-items: center; /* for single line flex container */
align-content: center; /* for multi-line flex container */
}
这里有更多细节:如何在FlexBox中垂直对齐文本?
或者,您可以将margin:auto
应用于flex项的内容元素。
p { margin: auto; }
在这里了解flexauto
边距:对齐flex项目的方法(参见框56)。
当flex容器有多行时(由于换行),align-content
属性将是跨轴对齐所必需的。
根据规范:
8.4.打包柔性行:align-content
属性
当交叉轴中有多余的空间时,align-content
属性对齐flex容器中的行,类似于justify-content
对齐主轴中的各个项。注意,此属性对单行flex容器不起作用。
这里有更多的细节:flex-wrap如何与align-self、align-items和align-content一起工作?
除IE<10外,所有主要浏览器都支持Flexbox。一些最近的浏览器版本,如Safari 8和IE10,需要供应商前缀。有关添加前缀的快速方法,请使用Autoprefixer。更多详情请参阅本答案。
有关使用CSS表和定位属性的替代居中解决方案,请参阅以下答案:https://stackoverflow.com/A/31977476/3597276
我想你想要像下面这样的东西。
null
html, body {
height: 100%;
}
body {
margin: 0;
}
.flex-container {
height: 100%;
padding: 0;
margin: 0;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
align-items: center;
justify-content: center;
}
.row {
width: auto;
border: 1px solid blue;
}
.flex-item {
background-color: tomato;
padding: 5px;
width: 20px;
height: 20px;
margin: 10px;
line-height: 20px;
color: white;
font-weight: bold;
font-size: 2em;
text-align: center;
}
<div class="flex-container">
<div class="row">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
</div>
</div>
问题内容: 如何使用flexbox在容器内水平和垂直居中div。在下面的示例中,我希望每个数字都彼此相邻(按行),并水平居中。 问题答案: 我认为您想要以下内容。 你的元素应该是块级(而非)如果你想要的高度和顶部/底部填充,以正常工作。 另外,在上,将宽度设置为而不是。 您的属性很好。 如果您希望垂直居中于视口中,请为和分配100%的高度,然后将页边距清零。 请注意,需要一个高度才能看到垂直对齐效
问题内容: 我弹出一个包含ASP.NET表单的弹出窗口,单击链接“请求信息”,然后出现该表单。 但是,具有链接“请求信息”以触发弹出窗口的页面包含很多内容,因此需要滚动才能看到该链接。 如果用户滚动阅读内容,则需要始终居中,否则,如果他们不滚动,弹出窗口仍将居中显示在屏幕上。 在绝对定位,整个页面宽度与边距设置为。 问题答案: 如果div具有固定的宽度和高度,请使用:(如果width = 120p
问题内容: 有没有办法在 垂直和水平方向上输入一个DIV, 但这很重要, 当窗口小于内容时,内容将不会被剪切 。div必须具有背景色,宽度和高度。 我总是将div的中心定位为绝对位置和负边距,如提供的示例所示。但是它有一个问题,那就是削减内容的顶部。有没有一种方法可以将div.content居中而不会出现此问题? CSS: HTML: 我的问题不是重复的“如何在水平和垂直方向上居中放置元素?”1-
问题内容: 我试图将标签内容垂直居中,但是当我添加CSS样式时,水平文本对齐会消失。 如何为我的每个标签使文本对齐x和y? 问题答案: 方法1- / : 在受支持的浏览器(大多数)中,可以将/ 与组合使用, 以动态垂直/水平居中元素。 方法2-Flexbox方法: 在支持的浏览器中,将目标元素的设置为并用于垂直居中和水平居中。只是不要忘记为其他浏览器支持添加供应商前缀。 方法3- / : 在某些情
我正在尝试垂直居中我的选项卡内容,但是当我添加CSS样式时,水平文本对齐消失了。 我如何使文本对齐x和y为我的每个选项卡? null null
问题内容: 在页面上垂直和水平居中放置元素的最佳方法? 我知道这将以水平为中心,但是垂直进行的最佳方法是什么? 问题答案: 该演示的主要技巧是元素的正常流动是从上到下,因此将其设置为零。然而,绝对定位的元件作用为自由空间分布是相同的,并且类似地可以垂直在指定为中心并且(不IE7工作)。 此技巧适用于的任何大小div。