CSS:<div>元素内的中心元素


173

要居中HTML元素,我可以使用CSS left: 50%;。但是,这使元素相对于整个窗口居中。

我有一个元素,它是元素的子<div>元素,并且我想相对于此父元素而<div>不是整个窗口居中显示该子元素。

我不想容器<div>所有的内容为中心,只是一个特定的孩子。

Answers:


261

设置text-align:center;为父div和margin:auto;子div。

#parent {
    text-align:center;
    background-color:blue;
    height:400px;
    width:600px;
}
.block {
    height:100px;
    width:200px;
    text-align:left;
}
.center {
    margin:auto;
    background-color:green;
}
.left {
    margin:auto auto auto 0;
    background-color:red;
}
.right {
    margin:auto 0 auto auto;
    background-color:yellow;
}
<div id="parent">
    <div id="child1" class="block center">
        a block to align center and with text aligned left
    </div>
    <div id="child2" class="block left">
        a block to align left and with text aligned left
    </div>
    <div id="child3" class="block right">
        a block to align right and with text aligned left
    </div>
</div>

这是集中所有内容的好资源。
http://howtocenterincss.com/


3
嗯...我不希望整个父div的文字居中。尽管这可以解决问题,但会带来另一个问题!
Randomblue 2011年

3
您可以设置text-align:left; 子元素,以使文本正确对齐。
pasine

@pasine text-align似乎不适用于某个<i>元素。给它上一堂课..
nclsvh

有没有办法使此元素在垂直和水平方向上居中?
Gman Smith

您可以使用@GmanSmith display: table-cellflexbox为此。看看我添加的链接。
pasine

57

实际上,使用CSS3 flex box非常简单。

.flex-container{
  display: -webkit-box;  /* OLD - iOS 6-, Safari 3.1-6, BB7 */
  display: -ms-flexbox;  /* TWEENER - IE 10 */
  display: -webkit-flex; /* NEW - Safari 6.1+. iOS 7.1+, BB10 */
  display: flex;         /* NEW, Spec - Firefox, Chrome, Opera */
  
  justify-content: center;
  align-items: center;
  
  width: 400px;
  height: 200px;
  background-color: #3498db;
}

.inner-element{
  width: 100px;
  height: 100px;
  background-color: #f1c40f;
}
<div class="flex-container">
  <div class="inner-element"></div>
</div>

更新:

撰写此答案时,似乎没有阅读OP编辑。上面的代码将所有内部元素居中(它们之间没有重叠),但是OP只希望将特定元素居中,而不是其他内部元素。因此,@Warface回答第二种方法更合适,但是它仍然需要垂直居中:

.flex-container{
  position: relative;
  
  /* Other styling stuff */
  width: 400px;
  height: 200px;
  background-color: #3498db;
}

.inner-element{
  position: absolute;
  left: 50%;
  top: 50%;
  
  transform: translate(-50%,-50%);
  /* or 3d alternative if you will add animations (smoother transitions) */
  transform: translate3d(-50%,-50%,0);

  /* Other styling stuff */
  width: 100px;
  height: 100px;
  background-color: #f1c40f;
}
<div class="flex-container">
  <p>Other inner elements like this follows the normal flow.</p>
  <div class="inner-element"></div>
</div>


11

的CSS

  body{
    text-align:center;
    }
    .divWrapper{
    width:960px //Change it the to width of the parent you want
    margin: 0 auto;
    text-align:left;
    }

的HTML

<div class="divWrapper">Tada!!</div>

这应该将div居中

2016-HTML5 + CSS3方法

的CSS

div#relative{
  position:relative;
}

div#thisDiv{
  position:absolute;
  left:50%;
  transform: translateX(-50%);
  -webkit-transform: translateX(-50%);
}

的HTML

<div id="relative">
  <div id="thisDiv">Bla bla bla</div>
</div>

小提琴

https://jsfiddle.net/1z7m83dx/


但这也使整个身体居中,不是吗?
Randomblue 2011年

好吧,divWrapper中的内容将居中,但是您可以在Div之外放一些东西,如果需要的话,也不会居中。
Warface

确切的宽度(960px)在大多数情况下都不适合。
QMaster

@QMaster我知道此帖子已过时,我应该使用HTML5功能对其进行更新
Warface

这里有一个很好的解释: w3.org/Style/Examples/007/center.en.html
Purplejacket

5

text-align:center; 在父div上应该可以解决问题


2
这不是我要对齐的文本,而是整个元素(例如按钮)。
Randomblue

1
如果它在div中,则它应该居中对齐,对于块元素来说可能有点棘手。
Kevin Bowersox

3

仅使特定孩子居中:

.parent {
  height: 100px;
  background-color: gray;
  position: relative;
}

.child {
  background-color: white;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  width: 20px;
  height:20px;
  margin: auto;

}
<div class="parent">
   <span class="child">hi</span>
</div>  

或者,您也可以使用flex,但这会使所有子项居中

.parent {
  height: 100px;
  background-color: gray;
  display: flex;
  justify-content: center;
  align-items: center;
}

.child {
  background-color: white;  
}
<div class="parent">
   <span class="child">hi</span>
</div>


3

您可以像这样使用bootstrap flex类名:

<div class="d-flex justify-content-center">
    // the elements you want to center
</div>

即使其中包含许多元素,这也将起作用。


2

div是固定宽度还是流体宽度?无论哪种方式,对于流体宽度,您都可以使用:

#element { /* this is the child div */
margin-left:auto;
margin-right:auto;
/* Add remaining styling here */
}

或者,您可以将父div设置为text-align:center;,子div设置为text-align:left;

left:50%;当div设置为时,仅根据整个页面居中position:absolute;。如果您将div设置为left:50%;它,则应相对于父div的宽度进行设置。对于固定宽度,请执行以下操作:

#parent {
width:500px;
}

#child {
left:50%;
margin-left:-100px;
width:200px;
}


1

如果要使用CSS3:

position:absolute;
left:calc(50% - PutTheSizeOfTheHalfOfYourElementpx);

您可能需要进行进一步的搜索,以找出如何获取百分比以适合元素的宽度。


0

首先,您可以使用left:50%使其相对于父div居中,但是为此您需要学习CSS定位。

许多人可能采取的一种解决方案是做类似的事情

    div.parent { text-align:center; }    //will center align every thing in this div as well as in the children element
    div.parent div { text-align:left;}   //to restore so every thing would start from left

如果将要居中的div相对放置,则可以

    .mydiv { position:relative; margin:0 auto; } 

我不希望整个父div都拥有text-align:center;
Randomblue

为什么你不想要?无论如何,您可以使用第二种方法。
Ehtesham

0

左:50%会分配给最近的父对象并分配静态宽度。尝试width:500px或父div上的某个值。或者,将所需的内容居中显示:阻止并将左右页边距设置为自动。


0

如果子元素是内联的(例如,不是a divtable等等),我会将其包装在a div或a内p,并使包装器的文本将css属性对齐为center。

    <div id="container">
        This text is aligned to the left.<br>
        So is this text.<br>
        <div style="text-align: center">
            This <button>button</button> is centered.
        </div>
        This text is still aligned left.
    </div>

否则,如果该元素是具有固定宽度的块(display: block例如a div或a p),则将其左边距和右边距css属性设置为auto。

    <div id="container">
        This text is aligned to the left.<br>
        So is this text.<br>
        <div style="margin: 0 auto; width: 200px; background: red; color: white;">
            My parent is centered.
        </div>
        This text is still aligned left.
    </div>

您当然text-align: center可以在wrapper元素中添加一个使其内容居中。

我不会打扰定位,因为恕我直言,这不是解决OP问题的方法,但请务必检查一下此链接,非常有帮助。


0

为您的元素居中创建一个新的div元素,然后添加一个专门用于使该元素居中的类

<div id="myNewElement">
    <div class="centered">
        <input type="button" value="My Centered Button"/>
    </div>
</div>

的CSS

.centered{
    text-align:center;
}

0

我找到了另一种解决方案

<style type="text/css">
    .container {
        width:600px; //set how much you want
        overflow: hidden; 
        position: relative;
     }
     .containerSecond{
        position: absolute; 
        top:0px; 
        left:-500%; 
        width:1100%;
     }
     .content{
        width: 800px; //your content size 
        margin:0 auto;
     }           
</style>

并且在身体上

<div class="container">
   <div class="containerSecond">
       <div class="content"></div>
   </div>
</div>

每当容器变大或变小时,这将使内容div居中。在这种情况下,您的内容应该大于容器的1100%以不居中,但是在这种情况下,您可以使containerSecond更大,这样就可以了



0

例如,我在主要内容div内有一个文章div。在文章内有一个图像,该图像下方是一个按钮,其样式如下:

.article {

width: whatever;
text-align: center; 
float: whatever (in case you got more articles in a row); 
margin: give it whatever margin you want;

} .article {

}

/ *在文章中,我希望图像居中* /

.article img {

float: none;
margin: 0 auto;
padding: give it a padded ridge if you want;

}

/ *现在,在同一article元素中的该图像下,应该有一个类似于read more的按钮。当然,在响应式设计中,您需要使用em或%* /

.button {

background: #whatever color:
padding: 4.3567%; /*Instead of fixed width*/
text-align: cente;
font: whatever;
max-width: 41.4166%;
float: none;
margin: 0 auto; /* You could make the zero into any margin you want on the top and bottom of this button.. Just notice the float: none property.. this wil solve most your issues, also check if maybe position and displaay might mess up your code..*/

}

祝好运


0

如果要在div中将元素居中并且不关心分区大小,可以使用Flex功能。我更喜欢使用flex并且不为元素使用确切的大小。

<div class="outer flex">
    <div class="inner">
        This is the inner Content
    </div>
</div>

如您所见,Outer div是Flex容器,Inner必须是指定了Flex的项,flex: 1 1 auto;以便更好地理解,您可以看到此简单示例。http://jsfiddle.net/QMaster/hC223/

希望能有所帮助。


0

我想要魔术。

html, body {
 height: 100%;
}

.flex-container{
  display: -ms-flexbox;
  display: -webkit-box;
  display: flex;
  -ms-flex-align: center;
  -ms-flex-pack: center;
  -webkit-box-align: center;
  align-items: center;
  -webkit-box-pack: center;
  justify-content: center;
}


<div class="flex-container">
  <div>Content</div>
</div>

0
<html>
<head>
</head>
<style>
  .out{
    width:200px;
    height:200px;
    background-color:yellow;
  }
   .in{
    width:100px;
    height:100px;
    background-color:green;
    margin-top:50%;
    margin-left:50%;
    transform:translate(-50%,50%);
  }
</style>
  <body>
     <div class="out">
     <div class="in">

     </div>
     </div> 
  </body>
</html>

代码始终是好的,但是它也有助于在此如何解决原始问题的过程中添加一些注释/上下文。
craigcaulfield
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.