如何水平居中一个元素?

如何使用CSS在另一个<div>中水平居中<div>

<div id="outer"><div id="inner">Foo foo</div></div>
4721123 次浏览

您可以将此CSS应用于内部<div>

#inner {width: 50%;margin: 0 auto;}

当然,您不必将width设置为50%。任何小于包含<div>的宽度都可以。margin: 0 auto是实际居中的内容。

如果你的目标是Internet Explorer 8(及更高版本),最好改为:

#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>


编辑

使用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

如果不给它一个宽度,它就不能居中。否则,默认情况下,它将占用整个水平空间。

设置width并将margin-leftmargin-right设置为auto。不过,这是仅用于水平。如果你想要两种方式,你只需要两种方式。不要害怕尝试;你不会破坏任何东西。

如果你不想在内部div上设置固定的宽度,你可以这样做:

#outer {width: 100%;text-align: center;}
#inner {display: inline-block;}
<div id="outer"><div id="inner">Foo foo</div></div>

这使得内部div成为一个内联元素,可以以text-align为中心。

我最近不得不将一个“隐藏”div(即display:none;)居中,其中包含一个需要在页面居中的表格。我编写了以下jQuery代码来显示隐藏的div,然后将CSS内容更新为自动生成的表格宽度,并将边距更改为居中。(显示切换是通过单击链接触发的,但不需要显示此代码。)

注:我正在分享这段代码,因为Google将我带到了这个Stack Overflow解决方案,除了隐藏元素没有任何宽度并且在显示之前无法调整大小/居中之外,一切都可以正常工作。

$(function(){$('#inner').show().width($('#innerTable').width()).css('margin','0 auto');});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><div id="inner" style="display:none;"><form action=""><table id="innerTable"><tr><td>Name:</td><td><input type="text"></td></tr><tr><td>Email:</td><td><input type="text"></td></tr><tr><td>Email:</td><td><input type="submit"></td></tr></table></form></div>

#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);}

原理还是一样的;把物品放在中间,补偿宽度。

CSS 3的box对齐属性

#outer {width: 100%;height: 100%;display: box;box-orient: horizontal;box-pack: center;box-align: center;}

如果您不想设置固定宽度并且不想要额外的边距,请将display: inline-block添加到您的元素中。

您可以使用:

#element {display: table;margin: 0 auto;}

对于Firefox和Chrome:

<div style="width:100%;"><div style="width: 50%; margin: 0px auto;">Text</div></div>

对于Internet Explorer、Firefox和Chrome:

<div style="width:100%; text-align:center;"><div style="width: 50%; margin: 0px auto; text-align:left;">Text</div></div>

text-align:属性对于现代浏览器是可选的,但在Internet Explorer Quirks模式中对于旧版浏览器支持是必需的。

最好的方法是使用CSS3。

旧盒子模型(已弃用)

display: box及其属性box-packbox-alignbox-orientbox-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;}

阅读更多关于居中子元素

这就解释了为什么盒子模型是最好的方法

居中:自动宽度边距

此框通过将其左右边距宽度设置为“自动”来水平居中。这是使用CSS完成水平居中的首选方法,并且在大多数支持CSS 2的浏览器中运行良好。不幸的是,Internet Explorer 5/Windows不响应此方法-该浏览器的缺点,而不是技术。

有一个简单的解决方法。(在你反击这个词引起的恶心时停顿一下。)准备好了吗?Internet Explorer 5/Windows错误地将CSS“text-的对齐”属性应用于块级元素。为包含块级元素(通常是BODY元素)声明“text-的对齐:中心”水平居中Internet Explorer 5/Windows中的框。

此解决方法有一个副作用:继承了CSS“文本对齐”属性,将内联内容居中。通常需要为居中框显式设置“文本对齐”属性,以抵消Internet Explorer 5/Windows解决方法的效果。相关的CSS如下。

body {margin: 50px 0px;padding: 0px;text-align: center;}
#Content {width: 500px;margin: 0px auto;text-align: left;padding: 15px;border: 1px dashed #333;background-color: #EEE;}

http://bluerobot.com/web/css/center1.html

我通常使用的方法是使用绝对位置:

#inner{left: 0;right: 0;margin-left: auto;margin-right: auto;position: absolute;}

外部div不需要任何额外的属性来工作。

一些海报提到了CSS 3使用display:box居中的方式。

此语法已过时,不应再使用。[另请参阅这篇文章]

因此,为了完整起见,这里是使用灵活的盒子布局模块在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这是旧语法的旧浏览器,这是一个不错的地方。

我最近找到了一个方法:

#outer {position: absolute;left: 50%;}
#inner {position: relative;left: -50%;}

两个元素必须具有相同的宽度才能正常工作。

我已经将内联样式应用于内部div。使用这个:

<div id="outer" style="width:100%"><div id="inner" style="display:table;margin:0 auto;">Foo foo</div></div>

用途:

#outerDiv {width: 500px;}
#innerDiv {width: 200px;margin: 0 auto;}
<div id="outerDiv"><div id="innerDiv">Inner Content</div></div>

我创建了这个例子来展示如何垂直水平align

代码基本上是这样的:

#outer {position: relative;}

和…

#inner {margin: auto;position: absolute;left:0;right: 0;top: 0;bottom: 0;}

它将留在center,即使你调整你的屏幕。

#inner div使用以下CSS内容:

#inner {width: 50%;margin-left: 25%;}

我主要使用这个CSS内容来居中div

你可以做这样的事

#container {display: table;width: <width of your container>;height: <height of your container>;}
#inner {width: <width of your center div>;display: table-cell;margin: 0 auto;text-align: center;vertical-align: middle;}

这也将垂直对齐#inner。如果您不想,请删除displayvertical-align属性;

Chris Coyier在他的博客上写了一个关于“以未知为中心”的优秀的帖子。这是多个解决方案的综述。我发布了一个没有在这个问题中发布的。它比Flexbox解决方案有更多的浏览器支持,你没有使用display: table;,这可能会破坏其他东西。

/* This parent can be any width and height */.outer {text-align: center;}
/* The ghost, nudged to maintain perfect centering */.outer:before {content: '.';display: inline-block;height: 100%;vertical-align: middle;width: 0;overflow: hidden;}
/* The element to be centered, canalso be of any width and height */.inner {display: inline-block;vertical-align: middle;width: 300px;}

我最近发现了一件好事,混合使用line-height+vertical-align50%左技巧,你可以center一个动态大小的盒子在另一个动态大小的盒子里,在水平和垂直使用纯CSS。

请注意,您必须使用跨度(和inline-block),在现代浏览器+Internet Explorer 8中进行了测试。超文本标记语言:

<h1>Center dynamic box using only css test</h1><div class="container"><div class="center"><div class="center-container"><span class="dyn-box"><div class="dyn-head">This is a head</div><div class="dyn-body">This is a body<br />Content<br />Content<br />Content<br />Content<br /></div></span></div></div></div>

css:

.container {position: absolute;left: 0;right: 0;top: 0;bottom: 0;overflow: hidden;}
.center {position: absolute;left: 50%;top: 50%;}
.center-container {position: absolute;left: -2500px;top: -2500px;width: 5000px;height: 5000px;line-height: 5000px;text-align: center;overflow: hidden;}
.dyn-box {display: inline-block;vertical-align: middle;line-height: 100%;/* Purely asthetic below this point */background: #808080;padding: 13px;border-radius: 11px;font-family: arial;}
.dyn-head {background: red;color: white;min-width: 300px;padding: 20px;font-size: 23px;}
.dyn-body {padding: 10px;background: white;color: red;}

看这里的例子

试着玩弄

margin: 0 auto;

如果您也想将文本居中,请尝试使用:

text-align: center;

我找到了一个选项:

每个人都说要使用:

margin: auto 0;

但是还有另一种选择。为父div设置此属性。它任何时候都可以完美运行:

text-align: center;

看,孩子去中心。

最后是CSS给你:

#outer{text-align: center;display: block; /* Or inline-block - base on your need */}
#inner{position: relative;margin: 0 auto; /* It is good to be */}
<center>

我被已知的最简单的中心宠坏了?

</center>

例如,请参阅此链接和下面的代码片段:

div#outer {height: 120px;background-color: red;}
div#inner {width: 50%;height: 100%;background-color: green;margin: 0 auto;text-align: center; /* For text alignment to center horizontally. */line-height: 120px; /* For text alignment to center vertically. */}
<div id="outer" style="width:100%;"><div id="inner">Foo foo</div></div>

如果你有很多孩子在一个父下面,那么你的CSS内容必须像这样小提琴上的例子

超文本标记语言内容看起来像这样:

<div id="outer" style="width:100%;"><div class="inner"> Foo Text </div><div class="inner"> Foo Text </div><div class="inner"> Foo Text </div><div class="inner"> </div><div class="inner"> </div><div class="inner"> </div><div class="inner"> </div><div class="inner"> </div><div class="inner"> Foo Text </div></div>

看看这个小提琴上的例子

如果内容的宽度未知,您可以使用以下方法.假设我们有这两个元素:

  • .outer--全宽
  • .inner--未设置宽度(但可以指定最大宽度)

假设元素的计算宽度分别为1000像素和300像素。如下所示:

  1. .inner包在.center-helper里面
  2. 使.center-helper成为一个内联块;它变得与.inner相同,使其宽300像素。
  3. .center-helper向右推50%到其父级;这将其左侧设置为500像素。
  4. .inner向左推50%;这将使其左侧位于-150像素(宽)。中心助手,这意味着它的左侧位于500-150=350像素(宽)。外。
  5. .outer上的溢出设置为隐藏以防止水平滚动条。

演示:

body {font: medium sans-serif;}
.outer {overflow: hidden;background-color: papayawhip;}
.center-helper {display: inline-block;position: relative;left: 50%;background-color: burlywood;}
.inner {display: inline-block;position: relative;left: -50%;background-color: wheat;}
<div class="outer"><div class="center-helper"><div class="inner"><h1>A div with no defined width</h1><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br>Duis condimentum sem non turpis consectetur blandit.<br>Donec dictum risus id orci ornare tempor.<br>Proin pharetra augue a lorem elementum molestie.<br>Nunc nec justo sit amet nisi tempor viverra sit amet a ipsum.</p></div></div></div>

这是你想要的最短的方式。

JSFIDDLE

#outer {margin - top: 100 px;height: 500 px; /* you can set whatever you want */border: 1 px solid# ccc;}
#inner {border: 1 px solid# f00;position: relative;top: 50 % ;transform: translateY(-50 % );}

好吧,我设法找到了一个可能适合所有情况的解决方案,但使用JavaScript:

下面是结构:

<div class="container"><div class="content">Your content goes here!</div><div class="content">Your content goes here!</div><div class="content">Your content goes here!</div></div>

下面是JavaScript代码片段:

$(document).ready(function() {$('.container .content').each( function() {container = $(this).closest('.container');content = $(this);
containerHeight = container.height();contentHeight = content.height();
margin = (containerHeight - contentHeight) / 2;content.css('margin-top', margin);})});

如果您想在响应式方法中使用它,您可以添加以下内容:

$(window).resize(function() {$('.container .content').each( function() {container = $(this).closest('.container');content = $(this);
containerHeight = container.height();contentHeight = content.height();
margin = (containerHeight - contentHeight) / 2;content.css('margin-top', margin);})});

我知道我回答这个问题有点晚了,我没有费心去阅读每一个答案,所以这个可能是重复的。

inner { width: 50%; background-color: Khaki; margin: 0 auto; }

将未知高度和宽度的div居中

它适用于相当现代的浏览器(Firefox,Safari /WebKit,Chrome,Internet&Explorer&10,Opera等)

.content {position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);}
<div class="content">This works with any content</div>

Tinker with it further on Codepen or on JSBin.

试试这个:

<div id="a"><div id="b"></div></div>

css:

#a{border: 1px solid red;height: 120px;width: 400px}
#b{border: 1px solid blue;height: 90px;width: 300px;position: relative;margin-left: auto;margin-right: auto;}

最简单的方法:

#outer {width: 100%;text-align: center;}#inner {margin: auto;width: 200px;}
<div id="outer"><div id="inner">Blabla</div></div>

我只是使用最简单的解决方案,但它适用于所有浏览器:

<!doctype html><html><head><meta charset="utf-8"><title>center a div within a div?</title><style type="text/css">*{margin: 0;padding: 0;}
#outer{width: 80%;height: 500px;background-color: #003;margin: 0 auto;}
#outer p{color: #FFF;text-align: center;}
#inner{background-color: #901;width: 50%;height: 100px;margin: 0 auto;
}
#inner p{color: #FFF;text-align: center;}</style></head>
<body><div id="outer"><p>this is the outer div</p><div id="inner"><p>this is the inner div</p></div></div></body></html>

如果有人想为中心对齐这些div的jQuery解决方案:

$(window).bind("load", function() {var wwidth = $("#outer").width();var width = $('#inner').width();$('#inner').attr("style", "padding-left: " + wwidth / 2 + "px; margin-left: -" + width / 2 + "px;");});

首先:你需要给第二个div一个宽度:

例如:

超文本标记语言

<div id="outter"><div id="inner"Centered content"></div</div>

css:

 #inner{width: 50%;margin: auto;}

请注意,如果您没有给它一个宽度,它将占用该行的整个宽度。

而不是多个包装器和/或自动边距,这个简单的解决方案适合我:

<div style="top: 50%; left: 50%;height: 100px; width: 100px;margin-top: -50px; margin-left: -50px;background: url('lib/loading.gif') no-repeat center #fff;text-align: center;position: fixed; z-index: 9002;">Loading...</div>

它将div放在视图的中心(垂直和水平),大小和调整大小,将背景图像居中(垂直和水平),将文本居中(水平),并将div保留在视图中和内容顶部。

另一个无需为其中一个元素设置宽度的解决方案是使用CSS 3transform属性。

#outer {position: relative;}
#inner {position: absolute;left: 50%;
transform: translateX(-50%);}

诀窍是translateX(-50%)#inner元素设置为其自身宽度的左侧50%。您可以使用相同的技巧进行垂直对齐。

这是一个小提琴表示水平和垂直对齐。

更多信息在Mozilla开发者网络

#inner {width: 50%;margin: 0 auto;}

试试下面的CSS代码:

<style>#outer {display: inline-block;width: 100%;height: 100%;text-align: center;vertical-align: middle;}
#outer > #inner {display: inline-block;font-size: 19px;margin: 20px;max-width: 320px;min-height: 20px;min-width: 30px;padding: 14px;vertical-align: middle;}</style>

通过下面的超文本标记语言代码应用于CSS之上,水平居中和垂直居中(又名:在中间垂直对齐):

<div id="outer"><div id="inner">...These <div>ITEMS</div> <img src="URL"/> are in center...</div></div>

应用CSS和使用上述超文本标记语言后,网页中的该部分如下所示:

BEFORE applying code:┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃V..Middle & H..Center        ┣━1┃                             ┣━2┃                             ┣━3┗┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳┛1      2      3      4      5
AFTER:┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃                             ┣━1┃    V..Middle & H..Center    ┣━2┃                             ┣━3┗┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳┛1      2      3      4      5

为了将“内部”元素水平居中于“外部”包装器内,“内部”元素(DIV、IMG等类型)需要具有“内联”CSS属性,例如:显示:内联或显示:内联-块等,然后“外部”CSS属性text-的对齐:中心可以处理“内部”元素。

所以接近最小的CSS代码是这些:

<style>#outer {width: 100%;text-align: center;}
#outer > .inner2 {display: inline-block;}</style>

通过下面的超文本标记语言代码应用上面的CSS,居中(水平):

<div id="outer"><img class="inner2" src="URL-1"> <img class="inner2" src="URL-2"></div>

应用CSS并使用上述超文本标记语言后,网页中的该行如下所示:

BEFORE applying code:┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃┍━━━━━━━━━━┑                     ┃┃│ img URL1 │                     ┃┃┕━━━━━━━━━━┙                     ┃┃┍━━━━━━━━━━┑                     ┃┃│ img URL2 │                     ┃┃┕━━━━━━━━━━┙                     ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
AFTER:┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃    ┍━━━━━━━━━━┑ ┍━━━━━━━━━━┑    ┣━1┃    │ img URL1 │ │ img URL2 │    ┣━2┃    ┕━━━━━━━━━━┙ ┕━━━━━━━━━━┙    ┣━3┗┳━━━━━━━┳━━━━━━━┳━━━━━━━┳━━━━━━━┳┛1       2       3       4       5

如果你想避免每次为每个“内部”元素指定class=“inner2”属性,那么在早期使用这样的CSS:
<style>#outer {width: 100%;text-align: center;}
#outer > img, #outer > div {display: inline-block;}</style>

因此,上面的CSS可以像下面一样应用于“外部”包装器内的中心项目(水平):

<div id="outer"><img src="URL-1"> Text1 <img src="URL-2"> Text2</div>

应用CSS并使用上述超文本标记语言后,网页中的该行如下所示:

BEFORE applying code:┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃┍━━━━━━━━┑                ┃┃│img URL1│                ┃┃┕━━━━━━━━┙                ┃┃Text1                     ┃┃┍━━━━━━━━┑                ┃┃│img URL2│                ┃┃┕━━━━━━━━┙                ┃┃Text2                     ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛
AFTER:┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃   ┍━━━━━━━━━┑     ┍━━━━━━━━┑        ┣━1┃   │img URL1 │     │img URL2│        ┣━2┃   ┕━━━━━━━━━┙Text1┕━━━━━━━━┙Text2   ┣━3┗┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳┛1        2        3        4        5

“id”属性的唯一名称/值只能用于一个网页中的一个超文本标记语言元素,因此同一“id”名称的CSS属性不能在多个超文本标记语言元素上重复使用(一些网络浏览器错误地允许在多个元素上使用相同的id)。因此,当您在同一网页中需要多行,需要在该行的中心(水平)显示内部元素/项目时,您可以使用这样的CSS“class”(又名:CSS组,CSS中继器):
<style>.outer2 {width: 100%;text-align: center;}
.outer2 > div, .outer2 > div > img {display: inline-block;}</style>

因此,上面的CSS可以像下面一样应用于“outer2”包装器内的中心项目(水平):

<div class="outer2"><div>Line1: <img src="URL-1"> Text1 <img src="URL-2"></div></div>...<div class="outer2"><div>Line2: <img src="URL-3"> Text2 <img src="URL-4"></div></div>

应用CSS和使用上述超文本标记语言后,网页中的这些行如下所示:

BEFORE applying code:┏━━━━━━━━━━━━━━━━━━━━━━┓┃Line1:                ┃┃┍━━━━━━━━┑            ┃┃│img URL1│            ┃┃┕━━━━━━━━┙            ┃┃Text1                 ┃┃┍━━━━━━━━┑            ┃┃│img URL2│            ┃┃┕━━━━━━━━┙            ┃┗━━━━━━━━━━━━━━━━━━━━━━┛........................┏━━━━━━━━━━━━━━━━━━━━━━┓┃Line2:                ┃┃┍━━━━━━━━┑            ┃┃│img URL3│            ┃┃┕━━━━━━━━┙            ┃┃Text2                 ┃┃┍━━━━━━━━┑            ┃┃│img URL4│            ┃┃┕━━━━━━━━┙            ┃┗━━━━━━━━━━━━━━━━━━━━━━┛
AFTER:┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃         ┍━━━━━━━━┑     ┍━━━━━━━━┑   ┣━1┃         │img URL1│     │img URL2│   ┣━2┃   Line1:┕━━━━━━━━┙Text1┕━━━━━━━━┙   ┣━3┗┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳┛1        2        3        4        5.......................................┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃         ┍━━━━━━━━┑     ┍━━━━━━━━┑   ┣━1┃         │img URL3│     │img URL4│   ┣━2┃   Line2:┕━━━━━━━━┙Text2┕━━━━━━━━┙   ┣━3┗┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳┛1        2        3        4        5

要在中间垂直对齐,我们需要使用下面的CSS代码:
<style>.outer2 {width: 100%;text-align: center;vertical-align: middle;}
.outer2 > div, .outer2 > div > img {display: inline-block;vertical-align: middle;}</style>

因此,上面的CSS可以像下面一样应用,以水平居中项目并在“outer2”包装器的中间垂直对齐:

<div class="outer2"><div>Line1: <img src="URL-1"> Text1 <img src="URL-2"></div></div>...<div class="outer2"><div>Line2: <img src="URL-3"> Text2 <img src="URL-4"></div></div>

应用CSS和使用上述超文本标记语言后,网页中的这些行如下所示:

BEFORE applying code:┏━━━━━━━━━━━━━━━━━━━━━━┓┃Line1:                ┃┃┍━━━━━━━━┑            ┃┃│img URL1│            ┃┃┕━━━━━━━━┙            ┃┃Text1                 ┃┃┍━━━━━━━━┑            ┃┃│img URL2│            ┃┃┕━━━━━━━━┙            ┃┗━━━━━━━━━━━━━━━━━━━━━━┛........................┏━━━━━━━━━━━━━━━━━━━━━━┓┃Line2:                ┃┃┍━━━━━━━━┑            ┃┃│img URL3│            ┃┃┕━━━━━━━━┙            ┃┃Text2                 ┃┃┍━━━━━━━━┑            ┃┃│img URL4│            ┃┃┕━━━━━━━━┙            ┃┗━━━━━━━━━━━━━━━━━━━━━━┛
AFTER:┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃         ┍━━━━━━━━┑     ┍━━━━━━━━┑   ┣━1┃   Line1:│img URL1│Text1│img URL2│   ┣━2┃         ┕━━━━━━━━┙     ┕━━━━━━━━┙   ┣━3┗┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳┛1        2        3        4        5.......................................┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃         ┍━━━━━━━━┑     ┍━━━━━━━━┑   ┣━1┃   Line2:│img URL3│Text2│img URL4│   ┣━2┃         ┕━━━━━━━━┙     ┕━━━━━━━━┙   ┣━3┗┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳┛1        2        3        4        5
#outer {postion: relative}#inner {width: 100px;height: 40px;position: absolute;top: 50%;margin-top: -20px; /* Half of your height */}

根据您的情况,最简单的解决方案可能是:

margin: 0 auto; float: none;

是的,这是简短而干净的水平对齐代码。

.classname {display: box;margin: 0 auto;width: 500px /* Width set as per your requirement. */;}

最好的方法是使用表单元格显示(内部),它正好在显示表(外部)的div之后,并为内部div设置垂直对齐(使用表单元格显示),并且您在内部div中使用的每个标签都放置在div或页面的中心。

注意:您必须将指定的高度设置为外部

这是你知道的最好的方法,没有相对或绝对的位置,你可以在每个浏览器中使用它。

#outer{display: table;height: 100vh;width: 100%;}

#inner{display: table-cell;vertical-align: middle;text-align: center;}
<div id="outer"><div id="inner"><h1>set content center</h1><div>hi this is the best way to align your items center</div></div></div>

只能水平居中

根据我的经验,水平居中的最佳方法是应用以下属性:

容器:

  • 应该有text-align: center;

内容框:

  • 应该有display: inline-block;

演示:

.container {width: 100%;height: 120px;background: #CCC;text-align: center;}
.centered-content {display: inline-block;background: #FFF;padding: 20px;border: 1px solid #000;}
<div class="container"><div class="centered-content">Center this!</div></div>

请参阅这个小提琴


水平和垂直居中

根据我的经验,将两者框垂直和水平居中的最佳方法是使用额外的容器并应用以下属性:

外容器:

  • 应该有display: table;

内部容器:

  • 应该有display: table-cell;
  • 应该有vertical-align: middle;
  • 应该有text-align: center;

内容框:

  • 应该有display: inline-block;

演示:

.outer-container {display: table;width: 100%;height: 120px;background: #CCC;}
.inner-container {display: table-cell;vertical-align: middle;text-align: center;}
.centered-content {display: inline-block;background: #FFF;padding: 20px;border: 1px solid #000;}
<div class="outer-container"><div class="inner-container"><div class="centered-content">Center this!</div></div></div>

请参阅这个小提琴

就是这么简单。

只需决定要为内部div提供的宽度并使用以下CSS。

css

.inner{width: 500px; /* Assumed width */margin: 0 auto;}

<div id="outer" style="width:100%;margin: 0 auto; text-align: center;"><div id="inner">Foo foo</div></div>

看完所有的答案后,我没有看到我更喜欢的那个。这就是你如何将一个元素放在另一个元素的中心。

jsfiddle-http://jsfiddle.net/josephtveter/w3sksu1w/

<p>Horz Center</p><div class="outterDiv"><div class="innerDiv horzCenter"></div></div><p>Vert Center</p><div class="outterDiv"><div class="innerDiv vertCenter"></div></div><p>True Center</p><div class="outterDiv"><div class="innerDiv trueCenter"></div></div>.vertCenter{position: absolute;top:50%;-ms-transform: translateY(-50%);-moz-transform: translateY(-50%);-webkit-transform: translateY(-50%);transform: translateY(-50%);}
.horzCenter{position: absolute;left: 50%;-ms-transform: translateX(-50%);-moz-transform: translateX(-50%);-webkit-transform: translateX(-50%);transform: translateX(-50%);}
.trueCenter{position: absolute;left: 50%;top: 50%;-ms-transform: translate(-50%, -50%);-moz-transform: translate(-50%, -50%);-webkit-transform: translate(-50%, -50%);transform: translate(-50%, -50%);}
.outterDiv{position: relative;background-color: blue;width: 10rem;height: 10rem;margin: 2rem;}.innerDiv{background-color: red;width: 5rem;height: 5rem;}

超文本标记语言:

<div id="outer"><div id="inner"></div></div>

css:

#outer{width: 500px;background-color: #000;height: 500px}#inner{background-color: #333;margin: 0 auto;width: 50%;height: 250px;}

小提琴

添加#0到父div

#outer {text-align: center;}

#outer > div {margin: auto;width: 100px;}

这个方法也很好用:

div.container {display: flex;justify-content: center; /* For horizontal alignment */align-items: center;     /* For vertical alignment   */}

对于内部<div>,唯一的条件是它的heightwidth不能大于它的容器。

您可以使用CSS Flexbox实现这一点。您只需要将3个属性应用于父元素以使一切正常。

#outer {display: flex;align-content: center;justify-content: center;}

看看下面的代码,这将使您更好地理解属性。

了解更多关于CSS Flexbox

#outer {display: flex;align-items: center;justify-content: center;border: 1px solid #ddd;width: 100%;height: 200px;}
<div id="outer"><div id="inner">Foo foo</div></div>

给内部div添加一些width,并在CSS属性中添加margin:0 auto;

.outer {text-align: center;width: 100%}

您可以使用CSS Flexbox

#inner {display: flex;justify-content: center;}

您可以在此链接上了解更多信息:https://css-tricks.com/snippets/css/a-guide-to-flexbox/

可以使用CSS 3 Flexbox。使用Flexbox时有两种方法。

  1. 设置父元素display:flex;并将属性{justify-content:center; ,align-items:center;}添加到父元素。

#outer {display: flex;justify-content: center;align-items: center;}
<div id="outer" style="width:100%"><div id="inner">Foo foo</div></div>

  1. 设置父节点display:flex并将margin:auto;添加到子节点。

#outer {display: flex;}
#inner {margin: auto;}
<div id="outer" style="width:100%"><div id="inner">Foo foo</div></div>

将CSS添加到您的内部div。设置margin: 0 auto并将其宽度设置为小于100%,即外部div的宽度。

<div id="outer" style="width:100%"><div id="inner" style="margin:0 auto;width:50%">Foo foo</div></div>

这将产生预期的结果。

css

#inner {display: table;margin: 0 auto;}

超文本标记语言

<div id="outer" style="width:100%"><div id="inner">Foo foo</div></div>
<div id="outer" style="width:100%"><div id="inner" style="text-align:center">Foo foo</div></div>

最简单的答案:将边缘:自动;添加到内部。

<div class="outer"><div class="inner">Foo foo</div></div>

css代码

.outer{width: 100%;height: 300px;background: yellow;}
.inner{width: 30%;height: 200px;margin: auto;background: red;text-align: center}

查看我的代码笔链接:http://codepen.io/feizel/pen/QdJJrK

在此输入图片描述

简单地Margin:0px auto

#inner{display: block;margin: 0px auto;width: 100px;}
<div id="outer" style="width:100%"><div id="inner">Foo foo</div></div>

CSS 3:

可以在父容器上使用以下样式将子元素均匀地水平分布:

display: flex;
justify-content: space-between;  // <-- space-between or space-around

关于 justify-content的不同值的一个很好的 演示

Enter image description here

收听: 浏览器-兼容性

试试看:

#containerdiv {
display: flex;
justify-content: space-between;
}


#containerdiv > div {
background-color: blue;
width: 50px;
color: white;
text-align: center;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div id="containerdiv">
<div>88</div>
<div>77</div>
<div>55</div>
<div>33</div>
<div>40</div>
<div>45</div>
</div>
</body>
</html>

Flex 有超过97% 的浏览器支持覆盖率,可能是在几行内解决这些问题的最佳方法:

#outer {
display: flex;
justify-content: center;
}

它也可以水平和垂直居中使用绝对定位,像这样:

#outer{
position: relative;
}


#inner{
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%)
}

使用下面的代码。

超文本标示语言

<div id="outer">
<div id="inner">Foo foo</div>
</div>

CSS

#outer {
text-align: center;
}
#inner{
display: inline-block;
}

最广为人知的方法是使用 margin如下:

#parent {
width: 100%;
background-color: #CCCCCC;
}


#child {
width: 30%; /* We need the width */
margin: 0 auto; /* This does the magic */
color: #FFFFFF;
background-color: #000000;
padding: 10px;
text-align: center;
}
<div id="parent">
<div id="child">I'm the child and I'm horizontally centered! My daddy is a greyish div dude!</div>
</div>

运行代码以查看它是如何工作的。此外,当您尝试以这种方式居中时,有两件重要的事情您不应该在 CSS 中忘记: margin: 0 auto;。这就是我们想要的 Div 中心。另外不要忘记 width的孩子,否则它不会得到预期的中心!

您可以使用一行代码,只需 text-align:center

这里有一个例子:

#inner {
text-align: center;
}
<div id="outer" style="width:100%">
<div id="inner"><button>hello</button></div>
</div>

Flexbox

display: flex 表现得像一个块元素,并根据 Flexbox 模型布局其内容,它与 justify-content: center 一起工作。

请注意: Flexbox 兼容除 Internet Explorer 以外的所有浏览器。有关浏览器兼容性的完整和最新列表,请参阅 显示: flex 不能在 Internet Explorer 上工作

#inner {
display: inline-block;
}


#outer {
display: flex;
justify-content: center;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>


文字对齐: 居中

应用 强 > text-align: center,内联内容在行框中居中。但是,由于内部 div 默认有 width: 100%,你必须设置一个特定的宽度或使用下列之一:

#inner {
display: inline-block;
}


#outer {
text-align: center;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>


保证金: 0自动

使用 强 > margin: 0 auto是另一种选择,它更适合于较老的浏览器兼容性。

#inner {
display: table;
margin: 0 auto;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>


变形

transform: translate 允许您修改 CSS 可视化格式模型的坐标空间。使用它,元素可以被平移、旋转、缩放和倾斜。水平居中需要 position: absolute left: 50%

#inner {
position: absolute;
left: 50%;
transform: translate(-50%, 0%);
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>


<center>(已弃用)

标记 强 > <center>是代替 text-align: center 的 HTML。它可以在旧的浏览器和大多数新的浏览器上工作,但是它不被认为是一个好的实践,因为这个特性是 过时了,并且已经从 Web 标准中删除了。

#inner {
display: inline-block;
}
<div id="outer">
<center>
<div id="inner">Foo foo</div>
</center>
</div>

对不起,但是这个90年代的宝贝对我来说就是 成功了:

<div id="outer">
<center>Foo foo</center>
</div>

我会因此下地狱吗?

您可以使用链接 https://plnkr.co/edit/MQD5QHJe5oUVKEvHCz8p?p=preview

.outer{
display: table;
width: 100%;
height: 100%;
}
.inner {
vertical-align: middle;
}

请参阅 https://v4-alpha.getbootstrap.com/examples/cover/

您可以添加以下代码:

#inner {
width: 90%;
margin: 0 auto;
text-align:center;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>

将 div 放在 div 中的居中位置

.outer {
display: -webkit-flex;
display: flex;


//-webkit-justify-content: center;
//justify-content: center;
  

//align-items: center;


width: 100%;
height: 100px;
background-color: lightgrey;
}


.inner {
background-color: cornflowerblue;
padding: 2rem;
margin: auto;
  

//align-self: center;
}
<div class="outer">
<div class="inner">Foo foo</div>
</div>

我们可以使用下一个 CSS 类,它允许任何元素在垂直和水平方向上居中,对抗它的父元素:

.centerElement{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

用途:

<div id="parent">
<div class="child"></div>
</div>

风格:

#parent {
display: flex;
justify-content: center;
}

如果你想让它水平居中,你应该这样写:

#parent {
display: flex;
justify-content: center;
align-items: center;
}

您可以使用 calc 方法。这个用法是用于你正在居中的 div。如果你知道它的宽度,让我们假设它是1200像素,去:

.container {
width:1200px;
margin-left: calc(50% - 600px);
}

所以基本上它会增加50% 的左边距减去已知宽度的一半。

使用以下代码:

<div id="outer">
<div id="inner">Foo foo</div>
</div>


#inner {
width: 50%;
margin: 0 auto;
text-align: center;
}

用途:

<style>
#outer{
text-align: center;
width: 100%;
}
#inner{
text-align: center;
}
</style>

你可以用不同的方法来做,看下面的例子:

1. First Method
#outer {
text-align: center;
width: 100%;
}
#inner {
display: inline-block;
}




2. Second method
#outer {
position: relative;
overflow: hidden;
}
.centered {
position: absolute;
left: 50%;
}

这里有另一种使用 一个 href = “ https://en.wikipedia.org/wiki/CSS _ FlexBox _ Layout”rel = “ nofollow noReferrer”> Flexbox 水平居中的方法,不需要为内部容器指定任何宽度。这个想法是使用伪元素,它将从左侧和右侧推送内部内容。

在伪元素上使用 flex:1将使它们填充剩余的空间并获得相同的大小,而且内部容器将居中。

.container {
display: flex;
border: 1px solid;
}


.container:before,
.container:after {
content: "";
flex: 1;
}


.inner {
border: 1px solid red;
padding: 5px;
}
<div class="container">
<div class="inner">
Foo content
</div>
</div>

我们也可以考虑垂直对齐的相同情况,只需将 flex 的方向改为 column:

.container {
display: flex;
flex-direction: column;
border: 1px solid;
min-height: 200px;
}


.container:before,
.container:after {
content: "";
flex: 1;
}


.inner {
border: 1px solid red;
padding: 5px;
}
<div class="container">
<div class="inner">
Foo content
</div>
</div>

#inner {
display: table;
margin: 0 auto;
}
<div id="outer" style="width:100%">
<div id="inner">Foo foo</div>
</div>

根据要求,使 div 居中的主要属性是 margin: autowidth::

.DivCenter{
width: 50%;
margin: auto;
border: 3px solid #000;
padding: 10px;
}

这将使您的内部 div 水平和垂直集中:

#outer{
display: flex;
}
#inner{
margin: auto;
}

如果只是水平对齐,请更改

margin: 0 auto;

而垂直方向则是变化

margin: auto 0;

您可以使用 display: flex为您的外部 div 和水平中心,您必须添加 justify-content: center

#outer{
display: flex;
justify-content: center;
}

或者你可以访问 W3school-CSS flex Property了解更多的想法。

<!DOCTYPE html>
<html>
<head>
<title>Center</title>
<style>
.outer{
text-align: center;
}
.inner{
width: 500px;
margin: 0 auto;
background: brown;
color: red;
}


</style>


</head>


<body>


<div class="outer">
<div class="inner">This DIV is centered</div>
</div>


</body>
</html>

请尝试这个。它将工作没有 HTML 中心标记。

我在各个项目中使用过的最好的是

<div class="outer">
<div class="inner"></div>
</div>
.outer{
width: 500px;
height: 500px;
position: relative;
background: yellow;
}
.inner{
width: 100px;
height: 100px;
background:red;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}

小提琴连杆

#outer {
width: 160px;
padding: 5px;
border-style: solid;
border-width: thin;
display: block;
}


#inner {
margin: auto;
background-color: lightblue;
border-style: solid;
border-width: thin;
width: 80px;
padding: 10px;
text-align: center;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>

这将肯定中心你的 #inner既水平和垂直。这在所有浏览器中都是兼容的。我只是添加了额外的样式,以显示它是如何居中的。

#outer {
background: black;
position: relative;
width:150px;
height:150px;
}


#inner {
background:white;
position: absolute;
left:50%;
top: 50%;
transform: translate(-50%,-50%);
-webkit-transform: translate(-50%,-50%);
-moz-transform: translate(-50%,-50%);
-o-transform: translate(-50%,-50%);
} 
<div id="outer">
<div id="inner">Foo foo</div>
</div>

当然,如果你只想让它水平对齐,这可能会有所帮助。

#outer {
background: black;
position: relative;
width:150px;
height:150px;
}


#inner {
background:white;
position: absolute;
left:50%;
transform: translate(-50%,0);
-webkit-transform: translate(-50%,0);
-moz-transform: translate(-50%,0);
-o-transform: translate(-50%,0);
} 
<div id="outer">
<div id="inner">Foo foo</div>
</div>

最简单的方法之一就是使用 display: flex。外部的 div 只需要有显示伸缩,而内部需要 margin: 0 auto使其水平居中。

要垂直居中并在另一个 div 中居中一个 div,请查看。下面的内部阶级

.wrapper {
display: flex;
/* Adding whatever height & width we want */
height: 300px;
width: 300px;
/* Just so you can see it is centered */
background: peachpuff;
}


.inner {
/* center horizontally */
margin: 0 auto;
/* center vertically */
/* margin: auto 0; */
/* center */
/* margin: 0 auto; */
}
<div class="wrapper">
<div class="inner">
I am horizontally!
</div>
</div>

你可以通过使用 Flexbox来做到这一点,这在当今是一项很好的技术。

使用 Flexbox 时,应该将 display: flex;align-items: center;赋给父元素或 #outer div 元素。代码应该是这样的:

#outer {
display: flex;
align-items: center;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>

这应该使您的孩子或 #inner div 水平居中。但你实际上看不到任何变化。因为我们的 #outer div 没有高度,或者换句话说,它的高度被设置为 auto,所以它与它的所有子元素具有相同的高度。因此,经过一些视觉样式化之后,结果代码应该是这样的:

#outer {
height: 500px;
display: flex;
align-items: center;
background-color: blue;
}


#inner {
height: 100px;
background: yellow;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>

您可以看到 #inner div 现在居中。Flexbox 是一种使用 CSS 在水平或垂直堆栈中定位元素的新方法,它具有96% 的全球浏览器兼容性。所以你可以自由使用它,如果你想了解更多关于 Flexbox 的信息,请访问 CSS-技巧文章。在我看来,这是学习使用 Flexbox 的最佳地方。

div{
width: 100px;
height: 100px;
margin: 0 auto;
}

通常情况下,如果您以静态方式使用 div。

如果你想让一个 div 对于它的父类来说是绝对的,那么这里有一个例子:

.parentdiv{
position: relative;
height: 500px;
}


.child_div{
position: absolute;
height: 200px;
width: 500px;
left: 0;
right: 0;
margin: 0 auto;
}

这对我很有效:

#inner {
position: absolute;
margin: 0 auto;
left: 0;
width: 7%;
right: 0;
}

在此代码中,确定元素的宽度。

我发现类似的方式与 margin-left,但它也可以是 left

#inner {
width: 100%;
max-width: 65px; /* To adapt to screen width. It can be whatever you want. */
left: 65px; /* This has to be approximately the same as the max-width. */
}

横向中心的一个非常简单的跨浏览器答案是将这个规则应用于父元素:

.parentBox {
display: flex;
justify-content: center
}

.outer
{
background-color: rgb(230,230,255);
width: 100%;
height: 50px;
}
.inner
{
background-color: rgb(200,200,255);
width: 50%;
height: 50px;
margin: 0 auto;
}
<div class="outer">
<div class="inner">
margin 0 auto
</div>
</div>

简单点!

#outer {
display: flex;
justify-content: center;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>

你可以像这样简单地使用 Flexbox:

#outer {
display: flex;
justify-content: center
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>

为所有浏览器支持应用 Autoprefixer:

#outer {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
width: 100%;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center
}

否则

使用 变形:

#inner {
position: absolute;
left: 50%;
transform: translate(-50%)
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>

使用 Autoprefixer:

#inner {
position: absolute;
left: 50%;
-webkit-transform: translate(-50%);
-ms-transform:     translate(-50%);
transform:         translate(-50%)
}

对于水平居中的 DIV:

#outer {
width: 100%;
text-align: center;
}
#inner {
display: inline-block;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>
#inner {
width: 50%;
margin: 0 auto;
}

我们可以很容易地使用 一个 href = “ https://en.wikipedia.org/wiki/CSS _ FlexBox _ Layout”rel = “ noReferrer”> Flexbox 来实现这一点:

<div id="outer">
<div id="inner">Foo foo</div>
</div>

将一个 div 居中放在 div 水平方向:

#outer {
display: flex;
justify-content: center;
}

Enter image description here

将一个 div 居中放在 div 垂直的:

#outer {
display: flex;
align-items: center;
}

Enter image description here

而且,为了完全在水平和垂直方向上处于中间:

#outer{
display: flex;
justify-content: center;
align-items: center;
}

Enter image description here

您可以添加另一个与 # inner 大小相同的 div,然后将其向左移动50% (# inner 宽度的一半) ,并将 # inner 移动50% 。

#inner {
position: absolute;
left: 50%;
}


#inner > div {
position: relative;
left: -50%;
}
<div id="outer">
<div id="inner"><div>Foo foo</div></div>
</div>

最简单的方法之一。

<!DOCTYPE html>
<html>
<head>
<style>
#outer-div {
width: 100%;
text-align: center;
background-color: #000
}
#inner-div {
display: inline-block;
margin: 0 auto;
padding: 3px;
background-color: #888
}
</style>
</head>


<body>
<div id ="outer-div" width="100%">
<div id ="inner-div"> I am a easy horizontally centered div.</div>
<div>
</body>
</html>

这是将 a < div > 水平居中的最佳示例

#outer {
display: flex;
align-items: center;
justify-content: center;
}
<!DOCTYPE html>
<html>
<head>


</head>


<body>
<div id="outer">
<div id="inner">Foo foo</div>
</div>
</body>
</html>

如果你的父母有一定的身高,比如说,body{height: 200px} 或者像下面有高度为200px 的父 div # out,然后添加如下的 CSS 内容

HTML:

<div id="outer">
<div id="centered">Foo foo</div>
</div>

CSS:

#outer{
display: flex;
width: 100%;
height: 200px;
}
#centered {
margin: auto;
}

然后子内容,比如说以 div # 为中心的内容,将在垂直或水平方向处于中间位置,而不使用任何位置的 CSS。要删除垂直的中间行为,只需修改到下面的 CSS 代码:

#centered {
margin: 0px auto;
}

或者

#outer{
display: flex;
width: 100%;
height: 200px;
}
#centered {
margin: auto;
}


<div id="outer">
<div id="centered">Foo foo</div>
</div>

演示: https://jsfiddle.net/jinny/p3x5jb81/5/

仅添加边框以显示默认情况下内部 div 不是100% :

#outer{
display: flex;
width: 100%;
height: 200px;
border: 1px solid #000000;
}
#centered {
margin: auto;
border: 1px solid #000000;
}
<div id="outer">
<div id="centered">Foo foo</div>
</div>

演示: http://jsfiddle.net/jinny/p3x5jb81/9

只要将这个 CSS 内容添加到您的 CSS 文件中,它就会自动将内容居中。

在 CSS 中水平对齐到居中位置:

#outer {
display: flex;
justify-content: center;
}

对齐-垂直 + 水平到 CSS 中心:

#outer {
display: flex;
justify-content: center;
align-items: center;
}

使用 无礼(SCSS 语法) ,你可以使用 混音:

翻译

// Center horizontal mixin
@mixin center-horizontally {
position: absolute;
left: 50%;
transform: translate(-50%, -50%);
}


// Center horizontal class
.center-horizontally {
@include center-horizontally;
}

在 HTML 标记中:

<div class="center-horizontally">
I'm centered!
</div>

记住 position: relative;添加到父 HTML 元素。


用 Flexbox

使用 弯曲,您可以这样做:

@mixin center-horizontally {
display: flex;
justify-content: center;
}


// Center horizontal class
.center-horizontally {
@include center-horizontally;
}

在 HTML 标记中:

<div class="center-horizontally">
<div>I'm centered!</div>
</div>

试试 这个 CodePen

我用的是 Flexbox或者 CSS 网格

  1. Flexbox

    #outer{
    display: flex;
    justify-content: center;
    }

  2. CSS 网格

    #outer {
    display: inline-grid;
    grid-template-rows: 100px 100px 100px;
    grid-template-columns: 100px 100px 100px;
    grid-gap: 3px;
    }

你可以用很多方法来解决这个问题。

在前面的例子中,他们使用 margin: 0 autodisplay:table和其他答案使用“与转换和翻译”。

那只带个标签怎么样?每个人都知道有一个 <center>标签,只是不支持 HTML5。但是它在 HTML5中工作。比如,在我以前的项目里。

而且它是工作,但现在不仅 MDN 网络文档,但其他网站都建议不要再使用它。在 我可以使用 吗中,您可以看到来自 MDNWebDocs 的说明。但是不管怎样,总会有办法的。我只是想知道。总是被注意到是很有用的。

Enter image description here

对齐中间的 div 中的 div-

.outer{
width: 300px; /* For example */
height: 300px; /* For example */
background: red;
}
.inner{
position: relative;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 200px;
height: 200px;
background: yellow;
}
<body>
<div class='outer'>
<div class='inner'></div>
</div>
</body>

这将使内部 div 在中间对齐,包括垂直和水平对齐。

和网格一起

一个非常简单和现代的方法是使用 display: grid:

div {
border: 1px dotted grey;
}


#outer {
display: grid;
place-items: center;
height: 50px; /* not necessary */
}
<!DOCTYPE html>
<html>
<head>
</head>


<body>
<div id="outer">
<div>Foo foo</div>
</div>
</body>
</html>

属性

对齐的 Flexbox 项目在集装箱的中心:

#outer {
display: flex;
justify-content: center;
}

#outer
{
display: grid;
justify-content: center;


}
<div id="outer">
<div id="inner">hello</div>
</div>
enter code here

试试这个:

<div style="position: absolute;left: 50%;top: 50%;-webkit-transform: translate(-50%, -50%);transform: translate(-50%, -50%);"><div>Example</div></div>

在我的例子中,我需要(在屏幕上)将一个下拉菜单(使用 Flexbox 来显示它的项目)放在一个按钮下面,这个按钮可以垂直显示不同的位置。所有的建议都不起作用,直到我把立场从绝对改为固定,像这样:

#outer {
margin: auto;
left: 0;
right: 0;
position: fixed;
}
#inner {
text-align: center;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>

上面的代码使得下拉按钮总是位于屏幕的中心,无论设备的大小,无论下拉按钮位于垂直位置。

水平和垂直居中对齐一个元素

.wrapper {border: 1px solid #678596; max-width: 350px; margin: 30px auto;}
      

.parentClass { display: flex; justify-content: center; align-items: center; height: 300px;}
      

.parentClass div {margin: 5px; background: #678596; width: 50px; line-height: 50px; text-align: center; font-size: 30px; color: #fff;}
<h1>Flexbox Center Horizontally and Vertically Center Align an Element</h1>
<h2>justify-content: center; align-items: center;</h2>


<div class="wrapper">


<div class="parentClass">
<div>c</div>
</div>


</div>

用动态高度和宽度将不需要包装器/父元素的元素居中

没有副作用: 当在居中元素中使用 Flexbox 中的页边距时,它不会限制居中元素的宽度小于视窗宽度

position: fixed;
top: 0; left: 0;
transform: translate(calc(50vw - 50%));

水平 + 垂直中心,如果它的高度与宽度相同:

position: fixed;
top: 0; left: 0;
transform: translate(calc(50vw - 50%), calc(50vh - 50%));

要使一个元素水平居中,可以使用以下方法:

方法1: 使用页边距属性

如果元素是块级元素,那么可以使用页边距属性将元素居中。设置 margin-leftmargin-right为自动(速记 -margin: 0 auto)。

这将使元素与中心水平对齐。 如果该元素不是块级元素,则向其添加 display: block属性。

#outer {
background-color: silver;
}
#inner {
width: max-content;
margin: 0 auto;
background-color: #f07878;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>

方法2: 使用 CSS Flexbox

创建一个柔性盒容器,使用 justify-content属性并将其设置为 center。这将使所有元素水平对齐到网页的中心。

#outer {
display: flex;
justify-content: center;
background-color: silver;
}
#inner {
background-color: #f07878;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>

方法3: 采用位置绝对技术

这是使元素居中的经典方法。将 postion:relative设置为外部元素。将内部元素的位置设置为 Absol和 left: 50%。这将推动内部元素从外部元素的中心开始。现在使用转换属性并设置 transform: translateX(-50%),这将使元素水平居中。

#outer {
position: relative;
background-color: silver;
}
#inner {
position: absolute;
left: 50%;
transform: translateX(-50%);
background-color: #f07878;
}
<div id="outer">
<center>
<div id="inner">Foo foo</div>
</center>
</div>

button {
margin: 0 auto;
width: fit-content;
display: block;
}
// container should have set width (for example 100%)

照我说的做:

<div id="outer">
<div id="inner">Foo foo</div>
</div>

CSS

#outer{
display: grid;
place-items: center;
}


我看过很多很多答案,但都过时了。Google 已经实现了一个解决这个常见问题的方案,无论发生什么事情,都将对象放在中间,而且是响应的。因此,永远不要再手动执行 transform()position

。 HTML

...
<div class="parent">
<form> ... </form>
<div> ... </div>
</div>

。 CSS

.parent {
display: grid;
place-items: center;
}

这可以通过使用许多方法来实现。许多男生/女生给出的答案是正确的,而且工作正常。我再说一个不同的模式。

超文本标示语言文件中

<div id="outer">
<div id="inner">Foo foo</div>
</div>

CSS文件中

#outer{
width: 100%;
}


#inner{
margin: auto;
}

#outer {
display:grid;
place-items:center;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>

有几种方法可以实现它: 使用“弹性”,“定位”,“边距”等。假设问题中给出了 #outer#inner的 div:

我建议使用“ flex”

#outer {
display: flex;
justify-content: center;
align-items: center;  /* if you also need vertical center */
}

使用定位进行水平对齐

#outer {
position: relative;
}
#inner {
position: absolute;
left: 50%;
translate: transformX(-50%)
}

使用定位进行水平和垂直对齐

#outer {
position: relative;
}
#inner {
position: absolute;
left: 50%;
top: 50%;
translate: transform(-50%, -50%)
}

使用边距水平对齐

#inner {
width: fit-content;
margin: 0 auto;
}

我只是建议在容器显示为 flex 时使用 justify-content: center;。 当它是关于一个文本元素时,它是 text-align: center;

检查下面的代码,并根据要求进行修改。

#content_block {
border: 1px solid black;
padding: 10px;
width: 50%;
text-align: center;
}


#container {
border: 1px solid red;
width:100%;
padding: 20px;
display: flex;
justify-content: center;
}
<div id="container">
<div id="content_block">Foo foo check</div>
</div>

如何使用 CSS 在另一个 <div>中水平居中一个 <div>

下面是一个不完全的中心化方法列表,使用:

  • marginauto
  • margincalc()
  • paddingbox-sizingcalc()
  • position: absolute没有
  • position: absolute没有
  • display: inline-blocktext-align: center
  • display: tabledisplay: table-cell
  • display: flexjustify-content: center
  • display: gridjustify-items: center

1. 使用 auto将块级元素居中作为水平边距

.outer {
width: 300px;
height: 180px;
background-color: rgb(255, 0, 0);
}


.inner {
width: 150px;
height: 180px;
margin: 0 auto;
background-color: rgb(255, 255, 0);
}
<div class="outer">
<div class="inner"></div>
</div>

2. 使用带水平边距的 calc将块级元素居中

.outer {
width: 300px;
height: 180px;
background-color: rgb(255, 0, 0);
}


.inner {
width: 150px;
height: 180px;
margin: 0 calc((300px - 150px) / 2);
background-color: rgb(255, 255, 0);
}
<div class="outer">
<div class="inner"></div>
</div>

使用水平填充 + box-sizingcalc将块级元素居中

.outer {
width: 300px;
height: 180px;
padding: 0 calc((300px - 150px) / 2);
background-color: rgb(255, 0, 0);
box-sizing: border-box;
}


.inner {
width: 150px;
height: 180px;
background-color: rgb(255, 255, 0);
}
<div class="outer">
<div class="inner"></div>
</div>

4. 使用 position: absoluteleft: 50%以及 没有 margin-left将块级元素居中

.outer {
position: relative;
width: 300px;
height: 180px;
background-color: rgb(255, 0, 0);
}


.inner {
position: absolute;
left: 50%;
width: 150px;
height: 180px;
margin-left: -75px;
background-color: rgb(255, 255, 0);
}
<div class="outer">
<div class="inner"></div>
</div>

5. 使用 position: absoluteleft: 50%以及 没有transform: translateX()将块级元素居中

.outer {
position: relative;
width: 300px;
height: 180px;
background-color: rgb(255, 0, 0);
}


.inner {
position: absolute;
left: 50%;
width: 150px;
height: 180px;
background-color: rgb(255, 255, 0);
transform: translateX(-75px);
}
<div class="outer">
<div class="inner"></div>
</div>

使用 display: inline-blocktext-align: center将元素居中

.outer {
position: relative;
width: 300px;
height: 180px;
text-align: center;
background-color: rgb(255, 0, 0);
}


.inner {
display: inline-block;
width: 150px;
height: 180px;
background-color: rgb(255, 255, 0);
}
<div class="outer">
<div class="inner"></div>
</div>

7. 使用 display: tablepaddingbox-sizing将一个元素居中

.outer {
display: table;
width: 300px;
height: 180px;
padding: 0 75px;
background-color: rgb(255, 0, 0);
box-sizing: border-box;
}


.inner {
display: table-cell;
background-color: rgb(255, 255, 0);
}
<div class="outer">
<div class="inner"></div>
</div>

使用 display: flexjustify-content: center将元素居中

.outer {
display: flex;
justify-content: center;
width: 300px;
height: 180px;
background-color: rgb(255, 0, 0);
}


.inner {
flex: 0 0 150px;
background-color: rgb(255, 255, 0);
}
<div class="outer">
<div class="inner"></div>
</div>

使用 display: gridjustify-items: center将元素居中

.outer {
display: grid;
justify-items: center;
width: 300px;
height: 180px;
background-color: rgb(255, 0, 0);
}


.inner {
width: 150px;
background-color: rgb(255, 255, 0);
}
<div class="outer">
<div class="inner"></div>
</div>

#outer{
display: flex;
width: 100%;
height: 200px;
justify-content:center;
align-items:center;
}

<html>

*{
margin: 0;
padding: 0;
}
#outer{
background: red;
width: 100%;
height: 100vh;
display: flex;
/*center For  vertically*/
justify-content: center;
flex-direction: column;
/*center for horizontally*/
align-items: center;
}
#inner{
width: 80%;
height: 40px;
background: grey;
margin-top:5px;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>horizontally center an element</title>
</head>


<body>
<div id="outer">
<div id="inner">1</div>
<div id="inner" style="background: green;">2</div>
<div id="inner" style="background: yellow;">3</div>
</div>
</body>
</html>

<div class="container">
<div class="res-banner">
<img class="imgmelk"  src="~/File/opt_img.jpg" >
</div>
</div>

CSS 代码

.res-banner{
width:309px;
margin: auto;
height:309px;
}

2022年概览

这是一个非常古老的问题,所以我只是想报告今天的情况:

  • CSS 网格和柔性箱是最好的选择,你有中心,水平或垂直;
  • 页边距: 如果内部内容不是方框,auto 方法工作良好(内联块也可以) ;
  • 边缘50% 转换: 翻译 X (- 50%)是蛮力,但工程所有权利;
  • 同样的东西与绝对位置和平移 X/Y 也有利于水平和垂直居中,许多对话框使用,拉伸高度为100vh;
  • 好的旧文本对齐: 中心与行内块仍然工作
  • 被称为“中心标签”的古代恶魔仍然有效,实际上它是水平定心最简单的方法。许多人反对、恐惧和憎恨,但仍然如此;
  • 表(td 标签,实际上)可以漂亮地居中,水平和垂直,但他们也被称为旧帽子;
  • 如果你运气不好的话,最后两个也可以在电子邮件模板中使用(它们是 HTML4)。

这就是2022年的样子,我希望我们永远不会需要更多的网格和柔性箱。他们是我们1999年所有祈祷的回应。

通过在 CSS 中使用 text-align属性,可以在另一个 <div>内水平居中定位一个 <div>

text-align: center用于使外部 div 的文本水平居中。

text-align: right用于将文本向右对齐。

text-align: left用于将文本向左对齐。

text-align: justify用于拉伸直线,使每条直线具有相同的宽度。

div.a {
text-align: center;
}


div.b {
text-align: left;
}


div.c {
text-align: right;
}


div.d {
text-align: justify;
} 
<h1>The text-align Property</h1>


<div class="a">
<h2>text-align: center:</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam semper diam at erat pulvinar, at pulvinar felis blandit. Vestibulum volutpat tellus diam, consequat gravida libero rhoncus ut.</p>
</div>


<div class="b">
<h2>text-align: left:</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam semper diam at erat pulvinar, at pulvinar felis blandit. Vestibulum volutpat tellus diam, consequat gravida libero rhoncus ut.</p>
</div>


<div class="c">
<h2>text-align: right:</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam semper diam at erat pulvinar, at pulvinar felis blandit. Vestibulum volutpat tellus diam, consequat gravida libero rhoncus ut.</p>
</div>


<div class="d">
<h2>text-align: justify:</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam semper diam at erat pulvinar, at pulvinar felis blandit. Vestibulum volutpat tellus diam, consequat gravida libero rhoncus ut.</p>
</div>

<div id="outer">
<div id="inner">Foo foo</div>
</div>






#outer{
display:flex;
align-items:center;
}

您可以使用以下方法水平对齐任何元素:

<div align=center>
(code goes here)
</div>

或者:

<!-- css here -->
.center-me {
margin: 0 auto;
}


<!-- html here -->
<div class="center-me">
(code goes here)
</div>

我认为这将是一个解决方案:

#outer {
position: absolute;
left: 50%;
}


#inner {
position: relative;
left: -50%;
}

两个元素的宽度必须相同才能单独运行。

可以使用一个方便的中心标签

   <div id="outer">
<center>
<div id="inner">Foo foo</div>
</center>
</div>