我如何水平居中?
如何使用 CSS 将
水平居中于另一个
中?<div id="outer">
<div id="inner">Foo foo</div>
</div>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何使用 CSS 将
水平居中于另一个
中?<div id="outer">
<div id="inner">Foo foo</div>
</div>
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(30)
使用
flexbox
可以非常轻松地水平和垂直居中设置 div 的样式。要将 div 垂直居中对齐,请使用属性
align-items: center
。其他解决方案
您可以将此 CSS 应用于内部
:
当然,您不必将
width
设置为 <代码>50%。任何小于包含的宽度都可以。
margin: 0 auto
是实际居中的内容。如果您的目标是 Internet Explorer 8(及更高版本),则最好使用此相反:
它将使内部元素水平居中,并且无需设置特定的宽度即可工作。
工作示例在这里:
With
flexbox
it is very easy to style the div horizontally and vertically centered.To align the div vertically centered, use the property
align-items: center
.Other Solutions
You can apply this CSS to the inner
<div>
:Of course, you don't have to set the
width
to50%
. Any width less than the containing<div>
will work. Themargin: 0 auto
is what does the actual centering.If you are targeting Internet Explorer 8 (and later), it might be better to have this instead:
It will make the inner element center horizontally and it works without setting a specific
width
.Working example here:
如果您不想在内部
div
上设置固定宽度,您可以这样做:这使得内部
div
成为一个内联元素,可以使用text-align
居中。If you don't want to set a fixed width on the inner
div
you could do something like this:That makes the inner
div
into an inline element that can be centered withtext-align
.带 Flexbox 的现代盒子模型
旧盒子模型(已弃用)
display: box
及其属性box-pack
、box-align
、box-orient
、box-direction
等已被flexbox取代。虽然它们仍然可以工作,但不建议在生产中使用它们。根据您的可用性,您还可以使用
box-orient、box-flex、box-direction
属性。了解有关将子元素居中的更多信息
CSS 盒子模型模块级别 3< /p>
盒子模型 (CSS2)
MDN 上的框对齐
以及这个解释了为什么盒模型是最好的方法:
The modern box model with Flexbox
The old box model (deprecated)
display: box
and its propertiesbox-pack
,box-align
,box-orient
,box-direction
etc. have been replaced by flexbox. While they may still work, they are not recommended to be used in production.According to your usability you may also use the
box-orient, box-flex, box-direction
properties.Read more about centering the child elements
CSS Box Model Module Level 3
Box model (CSS2)
box-align on MDN
And this explains why the box model is the best approach:
确保父元素为定位,即,IE,相对,固定,固定,固定,固定,固定,绝对或粘性。
如果您不知道DIV的宽度,则可以使用
变换:Translatex(-50%);
而不是负差。使用 css calc(),代码可以变得更简单:
原理仍然相同;将物品放在中间并补偿宽度。
Make sure the parent element is positioned, i.e., relative, fixed, absolute, or sticky.
If you don't know the width of your div, you can use
transform:translateX(-50%);
instead of the negative margin.With CSS calc(), the code can get even simpler:
The principle is still the same; put the item in the middle and compensate for the width.
我已经创建了这个示例显示如何 vertally 和水平
对齐
。代码基本上是这样:
即使您调整大小您的屏幕,它也将留在
中心
。I've created this example to show how to vertically and horizontally
align
.The code is basically this:
And it will stay in the
center
even when you resize your screen.一些海报已经提到了CSS&nbsp; 3使用
显示:box
。该语法已过时,不应再使用。 [另请参见这篇文章] 。
因此,仅出于完整性,这是使用 。
So if you have simple markup like:
...and you want to center your items within the box, here's what you need on the parent element (.box):
如果您需要支持较旧的浏览器,这些浏览器将使用较旧的语法用于Flexbox 这是一个好地方。
Some posters have mentioned the CSS 3 way to center using
display:box
.This syntax is outdated and shouldn't be used anymore. [See also this post].
So just for completeness here is the latest way to center in CSS 3 using the Flexible Box Layout Module.
So if you have simple markup like:
...and you want to center your items within the box, here's what you need on the parent element (.box):
If you need to support older browsers which use older syntax for flexbox here's a good place to look.
如果您不想设置固定宽度并且不需要额外的边距,请将
display: inline-block
添加到您的元素中。您可以使用:
If you don't want to set a fixed width and don't want the extra margin, add
display: inline-block
to your element.You can use:
将高度和宽度未知的 div
水平和垂直居中。它适用于相当现代的浏览器(Firefox、Safari/WebKit、Chrome、Internet & Explorer & 10、Opera 等)
在 Codepen 或 JSBin。
Centering a div of unknown height and width
Horizontally and vertically. It works with reasonably modern browsers (Firefox, Safari/WebKit, Chrome, Internet & Explorer & 10, Opera, etc.)
Tinker with it further on Codepen or on JSBin.
设置
width
和SETMargin-Left
和Margin-Right
toauto
。不过,对于水平来说,这是。如果您需要这两种方式,那么您只需两种方式做。不要害怕试验;这并不是您会破坏任何东西。Set the
width
and setmargin-left
andmargin-right
toauto
. That's for horizontal only, though. If you want both ways, you'd just do it both ways. Don't be afraid to experiment; it's not like you'll break anything.如果您不给它一个宽度,则不能集中。否则,默认情况下将需要整个水平空间。
It cannot be centered if you don't give it a width. Otherwise, it will take, by default, the whole horizontal space.
CSS 3 的 box-align 属性
CSS 3's box-align property
我通常这样做的方式是使用绝对位置:
外部DIV不需要任何额外的属性才能起作用。
The way I usually do it is using absolute position:
The outer div doesn't need any extra properties for this to work.
最近,我不得不将一个“隐藏”div(即
display:none;
)居中,其中有一个表格表单需要在页面上居中。我编写了以下 jQuery 代码来显示隐藏的 div,然后将 CSS 内容更新为自动生成的表格宽度,并更改边距以使其居中。 (显示切换是通过单击链接触发的,但不需要显示此代码。)注意:我共享此代码,因为 Google 将我带到了此 Stack Overflow 解决方案以及所有内容本来可以工作,除非隐藏元素没有任何宽度,并且在显示之前无法调整大小/居中。
I recently had to center a "hidden" div (i.e.,
display:none;
) that had a tabled form within it that needed to be centered on the page. I wrote the following jQuery code to display the hidden div and then update the CSS content to the automatic generated width of the table and change the margin to center it. (The display toggle is triggered by clicking on a link, but this code wasn't necessary to display.)NOTE: I'm sharing this code, because Google brought me to this Stack Overflow solution and everything would have worked except that hidden elements don't have any width and can't be resized/centered until after they are displayed.
对于Firefox和Chrome:
对于Internet&nbsp; Explorer,Firefox和Chrome:
text-align:
属性是现代浏览器的可选,但是在Internet&nbsp; Explorer Quirks Mode中有必要用于传统浏览器支持。For Firefox and Chrome:
For Internet Explorer, Firefox, and Chrome:
The
text-align:
property is optional for modern browsers, but it is necessary in Internet Explorer Quirks Mode for legacy browsers support.使用:
Use:
为此解决的另一个解决方案而无需为其中一个元素设置宽度是使用CSS 3
transform
属性。诀窍是
translatex(-50%)
设置#inner
元素在其自身宽度的左侧50%。您可以将相同的技巧用于垂直对齐。这是一个 fiddle 显示水平和垂直比对。
更多信息在
Another solution for this without having to set a width for one of the elements is using the CSS 3
transform
attribute.The trick is that
translateX(-50%)
sets the#inner
element 50 percent to the left of its own width. You can use the same trick for vertical alignment.Here's a Fiddle showing horizontal and vertical alignment.
More information is on Mozilla Developer Network.
Chris Coyier 撰写了一篇关于“以未知为中心”的优秀文章他的博客。这是多种解决方案的汇总。我发布了一个未在此问题中发布的内容。它比 Flexbox 解决方案提供更多的浏览器支持,并且您没有使用
display : table;
这可能会破坏其他东西。Chris Coyier who wrote an excellent post on 'Centering in the Unknown' on his blog. It's a roundup of multiple solutions. I posted one that isn't posted in this question. It has more browser support than the Flexbox solution, and you're not using
display: table;
which could break other things.我最近找到了一个方法:
两个元素必须具有相同的宽度才能正常运行。
I recently found an approach:
Both elements must be the same width to function correctly.
例如,请参阅此链接和下面的代码片段:
如果你的父母有很多孩子,那么你的 CSS 内容必须像这样 fiddle 上的示例 。
HTML 内容如下所示:
然后查看这个 fiddle 上的示例。
For example, see this link and the snippet below:
If you have a lot of children under a parent, so your CSS content must be like this example on fiddle.
The HTML content look likes this:
Then see this example on fiddle.
仅根据我的经验进行水平居中
,水平居中的最佳方法是应用以下属性:
容器:
text-align:中心;
content框:
显示
显示:inline-block;演示:
另请参见 这个小提琴 !
水平居中 从我的经验上讲
,将盒子中心的最佳方法 在垂直和水平上都使用其他容器并应用以下属性:
外容器:
display:display:table;
内部容器:
显示:table-cell;
垂直align:中间;
text-align:center; center;
内容框:
显示:inline-block;
emo:demo:
另请参见 这个小提琴 !
Centering only horizontally
In my experience, the best way to center a box horizontally is to apply the following properties:
The container:
text-align: center;
The content box:
display: inline-block;
Demo:
See also this Fiddle!
Centering both horizontally & vertically
In my experience, the best way to center a box both vertically and horizontally is to use an additional container and apply the following properties:
The outer container:
display: table;
The inner container:
display: table-cell;
vertical-align: middle;
text-align: center;
The content box:
display: inline-block;
Demo:
See also this Fiddle!
这个方法也可以正常工作:
对于内部
,唯一的条件是其
height
和width
不得大于其容器的高度和宽度。This method also works just fine:
For the inner
<div>
, the only condition is that itsheight
andwidth
must not be larger than the ones of its container.Flexbox
display: flex
的行为类似于块元素,并根据 Flexbox 模型布局其内容。它适用于justify-内容:居中
。请注意:Flexbox 兼容除 Internet Explorer 之外的所有浏览器。请参阅显示:flex 无法在 Internet Explorer 上运行完整且最新的浏览器兼容性列表。
文本对齐:中心
应用
text-align: center
内联内容在行框内居中。但是,由于内部 div 默认为width: 100%
,因此您必须设置特定宽度或使用以下其中一项:显示:块
显示:内联
显示: 内联块
保证金:0 自动
使用
保证金:0 自动
是另一种选择,它更适合旧浏览器的兼容性。它与display: table 一起使用
。变换
变换:翻译
允许您修改 CSS 视觉格式化模型的坐标空间。使用它,可以平移、旋转、缩放和倾斜元素。要水平居中,需要position:absolute< /code>
和
left :50%
。(已弃用)
标签
是
文本对齐:居中
。它适用于旧版浏览器和大多数新浏览器,但不被认为是一个好的做法,因为此功能 已过时并已从 Web 标准中删除。
Flexbox
display: flex
behaves like a block element and lays out its content according to the flexbox model. It works withjustify-content: center
.Please note: Flexbox is compatible all browsers exept Internet Explorer. See display: flex not working on Internet Explorer for a complete and up to date list of browsers compatibility.
Text-align: center
Applying
text-align: center
the inline contents are centered within the line box. However since the inner div has by defaultwidth: 100%
you have to set a specific width or use one of the following:display: block
display: inline
display: inline-block
Margin: 0 auto
Using
margin: 0 auto
is another option and it is more suitable for older browsers compatibility. It works together withdisplay: table
.Transform
transform: translate
lets you modify the coordinate space of the CSS visual formatting model. Using it, elements can be translated, rotated, scaled, and skewed. To center horizontally it requireposition: absolute
andleft: 50%
.<center>
(Deprecated)The tag
<center>
is the HTML alternative totext-align: center
. It works on older browsers and most of the new ones but it is not considered a good practice since this feature is obsolete and has been removed from the Web standards.最简单的方法:
The easiest way:
Flex具有超过97%的浏览器支持覆盖范围,可能是在几行中解决此类问题的最佳方法:
Flex have more than 97% browser support coverage and might be the best way to solve these kind of problems within few lines:
如果内容的宽度未知,则可以使用以下方法。假设我们有这两个元素:
.outer
- 完整宽度.inner
- 没有宽度集(但是可以指定最大宽度)假设该计算的宽度元素分别为1000像素和300像素。如下:
.inner
内部.center-Helper
.center-Helper
inline block;它变成与.inner
使其宽300像素的大小相同。.center-Helper
相对于其父级的50%;这将其左派放在500像素WRT处。外。.inner
相对于其父母剩下的50%;这将其左侧放在-150像素WRT。中心帮手,这意味着其左侧为500-150 = 350像素WRT。外。.outer
隐藏以防止水平滚动条。演示:
If width of the content is unknown you can use the following method. Suppose we have these two elements:
.outer
-- full width.inner
-- no width set (but a max-width could be specified)Suppose the computed width of the elements are 1000 pixels and 300 pixels respectively. Proceed as follows:
.inner
inside.center-helper
.center-helper
an inline block; it becomes the same size as.inner
making it 300 pixels wide..center-helper
50% right relative to its parent; this places its left at 500 pixels wrt. outer..inner
50% left relative to its parent; this places its left at -150 pixels wrt. center helper which means its left is at 500 - 150 = 350 pixels wrt. outer..outer
to hidden to prevent horizontal scrollbar.Demo:
你可以这样做,
这也会垂直对齐
#inner
。如果您不想,请删除display
和vertical-align
属性;You can do something like this
This will also align the
#inner
vertically. If you don't want to, remove thedisplay
andvertical-align
properties;这就是您想要的最短的方式。
JSFIDDLE
Here is what you want in the shortest way.
JSFIDDLE
您可以使用
display:flex
对外部div和水平中心,必须添加jusify-content:中心
,或者您可以访问 w3schools -css flex属性属性以获取更多想法。
You can use
display: flex
for your outer div and to horizontally center you have to addjustify-content: center
or you can visit w3schools - CSS flex Property for more ideas.
您只需使用 flexbox 像这样:
将自动改装器应用于所有浏览器支持:
否则
请使用变换:
使用AutoPrefixer:
You can just simply use Flexbox like this:
Apply Autoprefixer for all browser support:
Or else
Use transform:
With Autoprefixer:
我发现存在一个选项:
每个人都说使用:
但还有另一种选择。为父 div 设置此属性。它
任何时候都完美工作:
看,孩子走在中心。
最后为您提供 CSS:
One option existed that I found:
Everybody says to use:
But there is another option. Set this property for the parent div. It
works perfectly anytime:
And see, child go center.
And finally CSS for you: