如何使用CSS将一个<div>
水平居中于另一个<div>
中?
<div id="outer">
<div id="inner">Foo foo</div>
</div>
使用 flexbox
很容易使 div 水平和垂直居中。
#inner {
border: 0.05em solid black;
}
#outer {
border: 0.05em solid red;
width:100%;
display: flex;
justify-content: center;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>
要使 div 垂直居中对齐,请使用属性 align-items: center
。
其他解决方案
您可以将此CSS应用于内部的 <div>
:
#inner {
width: 50%;
margin: 0 auto;
}
width
设置为50%
。任何小于包含的<div>
的宽度都可以。 margin:0 auto
是实际居中的原因。#inner {
display: table;
margin: 0 auto;
}
这将使内部元素水平居中,而且不需要设置特定的width
。
示例见此处:
#inner {
display: table;
margin: 0 auto;
border: 1px solid black;
}
#outer {
border: 1px solid red;
width:100%
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>
margin-left: auto; margin-right: auto
。 - Emmanuel Touzerywidth: 50%
。建议使用类似 max-width: 300px
的方式。 - rybo111margin:0 auto
,它可以是 margin: <你需要的任何垂直边距> auto
,第二个参数是水平方向上的边距。 - YakovL如果您不想在内部的 div
上设置固定宽度,可以尝试以下方法:
#outer {
width: 100%;
text-align: center;
}
#inner {
display: inline-block;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>
这将使内部的 div
成为一个内联元素,可以使用 text-align
居中。
float: none;
。这可能只是因为 #inner 在您的CSS中从其他地方继承了 left
或 right
的 float
。 - Doug McLeantext-align
属性,因此您可能需要将内部元素的text-align
设置为initial
或其他值。 - pmoleri最佳方法是使用CSS3。
display:box
及其属性box-pack
,box-align
,box-orient
,box-direction
等已被flexbox替代。虽然它们可能仍然有效,但不建议在生产中使用。
#outer {
width: 100%;
/* Firefox */
display: -moz-box;
-moz-box-pack: center;
-moz-box-align: center;
/* Safari and Chrome */
display: -webkit-box;
-webkit-box-pack: center;
-webkit-box-align: center;
/* W3C */
display: box;
box-pack: center;
box-align: center;
}
#inner {
width: 50%;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>
box-orient,box-flex,box-direction
属性。
使用Flexbox的现代盒模型。#outer {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
align-items: center;
}
这就是说明为什么盒模型是最佳方法的原因:
-webkit
标志来实现 flexbox 布局 (display: -webkit-flex;
和 -webkit-align-items: center;
和 -webkit-justify-content: center;
)。 - Joseph Hansen#centered {
position: absolute;
left: 50%;
margin-left: -100px;
}
<div id="outer" style="width:200px">
<div id="centered">Foo foo</div>
</div>
确保父元素定位,即相对定位、固定定位、绝对定位或粘性定位。
如果您不知道div的宽度,可以使用transform:translateX(-50%);
代替负边距。
使用CSS calc(),代码可以变得更加简单:
.centered {
width: 200px;
position: absolute;
left: calc(50% - 100px);
}
对齐
。#outer {
position: relative;
}
/* and */
#inner {
margin: auto;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>
即使您调整屏幕大小,它也将保持在中心
。
一些帖子中提到使用display:box
的CSS 3方法进行居中。
这种语法已经过时,不应再使用。[另请参见此文章]
因此,为了完整起见,这里介绍使用Flexbox布局模块在CSS 3中进行居中的最新方法。
如果您拥有像这样简单的标记:
<div class="box">
<div class="item1">A</div>
<div class="item2">B</div>
<div class="item3">C</div>
</div>
如果你想在盒子中央放置项目,这是你需要在父元素(.box)上添加的内容:
.box {
display: flex;
flex-wrap: wrap; /* Optional. only if you want the items to wrap */
justify-content: center; /* For horizontal alignment */
align-items: center; /* For vertical alignment */
}
.box {
display: flex;
flex-wrap: wrap;
/* Optional. only if you want the items to wrap */
justify-content: center;
/* For horizontal alignment */
align-items: center;
/* For vertical alignment */
}
* {
margin: 0;
padding: 0;
}
html,
body {
height: 100%;
}
.box {
height: 200px;
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
border: 2px solid tomato;
}
.box div {
margin: 0 10px;
width: 100px;
}
.item1 {
height: 50px;
background: pink;
}
.item2 {
background: brown;
height: 100px;
}
.item3 {
height: 150px;
background: orange;
}
<div class="box">
<div class="item1">A</div>
<div class="item2">B</div>
<div class="item3">C</div>
</div>
如果您需要支持使用旧版语法的旧浏览器来使用flexbox,则可以查看这里。
flex-direction
的值。如果它是“row”(默认值),那么justify-content: center;
是用来水平居中对齐的(就像我在回答中提到的那样)。如果它是“column”,那么justify-content: center;
是用来垂直居中对齐的。 - Danielddisplay: inline-block
。#inner {
display: table;
margin: 0 auto;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>
display: table;
。它是做什么的? - Matt Cremeens将width
设置为auto
,然后将margin-left
和margin-right
都设置为auto
。这只对水平方向生效,如果您想在垂直方向也居中,需要同时进行上述步骤。不要害怕尝试;就算出现错误也不会破坏任何东西。
width: fit-content;
和 margin: 0 auto
。我认为这可以适用于未知宽度的情况。 - Rick
display:flex;
是最容易记住的(Chrome 在 DevTools 中提供指南),并支持在两个轴上居中。 - Akshay K Nair