一些东西
如何使用 flexbox 在容器内水平和垂直居中 div。在下面的示例中,我希望每个数字彼此下方(按行),它们水平居中。
.flex-container { 填充:0;边距:0;列表样式:无;显示:弯曲;对齐项目:居中;证明内容:中心; } 行 { 宽度:100%; } .flex-item { 背景:番茄;填充:5px;宽度:200px;高度:150px;边距:10px;行高:150px;白颜色;字体粗细:粗体;字体大小:3em;文本对齐:居中; }
http://codepen.io/anon/pen/zLxBo
row{
,它对行没有影响。如果将其更改为 .row{
,结果将完全不同。
我认为您想要以下内容。
html, 身体 { 高度:100%; } 正文 { 边距:0; } .flex-container { 高度:100%;填充:0;边距:0;显示:弯曲;对齐项目:居中;证明内容:中心; } .row { 宽度:自动;边框:1px 纯蓝色; } .flex-item { 背景颜色:番茄;填充:5px;宽度:20px;高度:20px;边距:10px;行高:20px;白颜色;字体粗细:粗体;字体大小:2em;文本对齐:居中; }
参见演示:http://jsfiddle.net/audetwebdesign/tFscL/
如果您希望高度和顶部/底部填充正常工作,您的 .flex-item
元素应该是块级(div
而不是 span
)。
此外,在 .row
上,将宽度设置为 auto
而不是 100%
。
您的 .flex-container
属性很好。
如果您希望 .row
在视口中垂直居中,请将 100% 的高度分配给 html
和 body
,并将 body
边距归零。
请注意,.flex-container
需要一个高度才能看到垂直对齐效果,否则容器会计算包围内容所需的最小高度,该高度小于本示例中的视口高度。
脚注:
flex-flow
、flex-direction
、flex-wrap
属性可以使此设计更易于实现。我认为不需要 .row
容器,除非您想在元素周围添加一些样式(背景图像、边框等)。
一个有用的资源是:http://demo.agektmr.com/flexbox/
如何在 Flexbox 中垂直和水平居中元素
以下是两种通用的定心解决方案。
一个用于垂直对齐的弹性项目 (flex-direction: column
),另一个用于水平对齐的弹性项目 (flex-direction: row
)。
在这两种情况下,居中 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 */
}
https://i.stack.imgur.com/9Jbjt.png
当弹性项目水平堆叠时:
根据上面的代码调整 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;
}
https://i.stack.imgur.com/ccTOU.png
将弹性项目的内容居中
flex formatting context 的范围仅限于父子关系。超出子元素的 flex 容器的后代不参与 flex 布局,并且将忽略 flex 属性。本质上,flex 属性不能在子级之外继承。
因此,您将始终需要将 display: flex
或 display: inline-flex
应用于父元素,以便将 flex 属性应用于子元素。
为了使弹性项目中包含的文本或其他内容垂直和/或水平居中,使项目成为(嵌套的)弹性容器,并重复居中规则。
.box {
display: flex;
justify-content: center;
align-items: center; /* for single line flex container */
align-content: center; /* for multi-line flex container */
}
更多详细信息:How to vertically align text inside a flexbox?
或者,您可以将 margin: auto
应用于弹性项目的内容元素。
p { margin: auto; }
在此处了解 flex auto
边距:Methods for Aligning Flex Items(参见框 #56)。
将多行弹性项目居中
当 flex 容器有多行时(由于换行),align-content
属性将是横轴对齐所必需的。
从规范:
8.4.打包 Flex 线条:align-content 属性 align-content 属性在横向轴上有额外空间时对齐 flex 容器内的线条,类似于 justify-content 在主轴内对齐单个项目的方式。请注意,此属性对单行 flex 容器没有影响。
更多详细信息:How does flex-wrap work with align-self, align-items and align-content?
浏览器支持
所有主要浏览器都支持 Flexbox,except IE < 10。一些最新的浏览器版本,例如 Safari 8 和 IE10,需要 vendor prefixes。要快速添加前缀,请使用 Autoprefixer。 this answer 中有更多详细信息。
旧浏览器的居中解决方案
有关使用 CSS 表格和定位属性的替代居中解决方案,请参阅此答案:https://stackoverflow.com/a/31977476/3597276
添加
.container {
display: flex;
justify-content: center;
align-items: center;
}
到您想要居中的任何容器元素。文档:justify-content 和 align-items。
你可以利用
display: flex;
align-items: center;
justify-content: center;
在你的父组件上
https://i.stack.imgur.com/sBAyt.png
不要忘记使用重要的浏览器特定属性:
对齐项目:居中; -->
-webkit-box-align: center;
-moz-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
证明内容:中心; -->
-webkit-box-pack: center;
-moz-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
justify-content: center;
您可以阅读这两个链接以更好地理解 flex:http://css-tricks.com/almanac/properties/j/justify-content/ 和 http://ptb2.me/flexbox/
祝你好运。
1 - 将父 div 上的 CSS 设置为 display: flex;
2 - 将父 div 上的 CSS 设置为 flex-direction: column;
请注意,这将使该 div 中的所有内容从上到下排列。如果父 div 仅包含子 div 而没有其他内容,这将最有效。
3 - 将父 div 上的 CSS 设置为 justify-content: center;
下面是 CSS 外观的示例:
.parentDivClass { 显示:弹性;弹性方向:列;证明内容:中心; }
用这个:
html, body {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
}
对于一些这样的 HTML 标记:
<html>
<body>
<main>
<button> abc </button>
<p> something </p>
</main>
</body>
</html>
html,正文 { 显示:弹性;对齐项目:居中;证明内容:中心;高度:100%; }
一些东西
diplay: flex;
的容器和 margin:auto;
的项目完美。
注意:您必须设置 width
和 height
才能看到效果。
#container{ 宽度:100%; /*宽度需要设置*/ height: 150px; /*高度需要设置*/ display: flex; } .item{ 边距:自动; /*这些将使项目居中*/ background-color: #CCC; }
margin: auto
与 flexbox 一起“完美”工作,即它允许垂直和水平居中项目。
html, 身体 { 高度:100%;最大高度:100%; } .flex-container { 显示:弹性;高度:100%;背景颜色:绿色; } .container { 显示:弹性;边距:自动; }
https://i.stack.imgur.com/Q3n7s.png
代码
HTML:
<div class="flex-container">
<div class="rows">
<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>
</div>
CSS:
html, body {
height: 100%;
}
.flex-container {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
}
.rows {
display: flex;
flex-direction: column;
}
其中 flex-container
div 用于将您的 rows
div 垂直和水平居中,而 rows
div 用于对您的“项目”进行分组并在基于列的项目中对它们进行排序。
您可以将 flex-direction:column
添加到 flex-container
.flex-container {
flex-direction: column;
}
将 display:inline-block 添加到 flex-item
.flex-item {
display: inline-block;
}
因为您添加的宽度和高度对此元素没有影响,因为它具有内联显示。尝试添加 display:inline-block 或 display:block。了解有关宽度和高度的更多信息。
还添加到行类(给定行{}不被视为样式)
.row{
width:100%;
margin:0 auto;
text-align:center;
}
行中的工作演示:
.flex-container { 填充:0;边距:0;列表样式:无;显示:弯曲;对齐项目:居中;证明内容:中心;弹性方向:列; } .row{ 宽度:100%;边距:0 自动;文本对齐:居中; } .flex-item { 背景:番茄;填充:5px;宽度:200px;高度:150px;边距:10px;行高:150px;白颜色;字体粗细:粗体;字体大小:3em;文本对齐:居中;显示:内联块; }
专栏中的工作演示:
.flex-container { 填充:0;边距:0;宽度:100%;列表样式:无;显示:弯曲;对齐项目:居中; } .row { 宽度:100%; } .flex-item { 背景:番茄;填充:5px;宽度:200px;高度:150px;边距:10px;行高:150px;白颜色;字体粗细:粗体;字体大小:3em;文本对齐:居中;显示:内联块; }
希望这会有所帮助。
.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;
}