如何使用CSS将div水平居中?


Answers:


407

您需要设置left: 0right: 0

这指定了从窗口侧面偏移边缘边缘的距离。

类似于“ top”,但指定框的右边距边缘与框的包含块的[right / left]边缘的[left / right]偏移多远。

资料来源: http : //www.w3.org/TR/CSS2/visuren.html#position-props

注意:元素的宽度必须小于窗口的宽度,否则它将占用窗口的整个宽度。

如果可以使用媒体查询来指定最小边距,然后过渡到auto更大的屏幕尺寸。


.container {
  left:0;
  right:0;

  margin-left: auto;
  margin-right: auto;

  position: absolute;
  width: 40%;

  outline: 1px solid black;
  background: white;
}
<div class="container">
  Donec ullamcorper nulla non metus auctor fringilla.
  Maecenas faucibus mollis interdum.
  Sed posuere consectetur est at lobortis.
  Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.
  Sed posuere consectetur est at lobortis.
</div>


38
注意:width是必须的!
Ijas Ameenudeen 2014年

2
是的 这是正确的...使用“ text-align:center;” 和“左:0;右:0;” 将允许您在保持div水平居中的同时对div进行绝对定位。
Sterling Bourne 2014年

3
@AlexG我刚刚在IE11中加载了小提琴,它起作用了。你能澄清一下吗?
Brian Webster

1
@AlexG在IE11中可以使用,但是,如果不声明width它将无法使用。我有同样的问题。您必须使用示例中所示的宽度。
巴拿马杰克

1
margin: auto在我们的案例中也需要它才能工作
Crashalot 2015年

123

这在IE8中不起作用,但可以考虑考虑。如果您不想指定宽度,则它主要有用。

.element
{
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

那可能取决于他项目的要求。
克里斯·塞尔贝克

3
此时,还需要有一个带有-webkit-前缀的规则,它才能在Safari中工作。
Shikkediel'3

不幸的是它在某种程度上适用周围div的透明度也将文本里面..
dnl.re

1
这绝对是答案。对我来说,专门设置宽度绝对是不行的。
Mike

14

尽管以上答案是正确的,但为了使新手更简单,您所需要做的就是左右设置边距。如果设置了宽度并且位置是绝对的,以下代码将执行此操作:

margin: 0 auto;
left: 0;
right: 0;

演示:

.centeredBox {
    margin: 0 auto;
    left: 0;
    right: 0;
   
   
   /** Position should be absolute */
    position: absolute;
    /** And box must have a width, any width */
    width: 40%;
    background: #faebd7;
   
   }
<div class="centeredBox">Centered Box</div>


1
这非常适合连续引导列中的绝对图像
ZachNag

5

Flexbox?您可以使用flexbox。

.box {
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  
  -webkit-justify-content: center;
  justify-content: center;

}

.box div {
  border:1px solid grey;
  flex: 0 1 auto;
  align-self: auto;
  background: grey;
}
<div class="box">
  <div class="A">I'm horizontally centered.</div>
</div>


对于我的独特案例,这实际上效果很好。left: 0; right: 0;扩展到100%,这不是一个选择,因为子元素具有背景色,并且left: 50%; transform: translateY(-50%);不起作用,因为这将子元素的宽度限制为50%。这是唯一保留子级尺寸灵活的解决方案(仅限于浏览器支持)。谢谢!
本·代尔

3
.centerDiv {
    position: absolute;
    left: 0;
    right: 0;
    margin: 0 auto;
    text-align:center;
}


0

这是一个链接,如果位置是绝对的,请使用它使div居中。

HTML:

<div class="bar"></div>

CSS:

.bar{
  width:200px;
  border-top:4px solid red;
  position:absolute;
  margin-left:auto;
  margin-right:auto;
  left:0;
  right:0;
}

jsfiddle示例


-1

您不能margin:auto;position:absolute;元素上使用,如果不需要,可以将其删除,但是,如果需要,可以使用left:30%;((100%-40%)/ 2)和媒体查询作为最大值和最小值:

.container {
    position: absolute;
    top: 15px;
    left: 30%;
    z-index: 2;
    width:40%;
    height: 60px;
    overflow: hidden;
    background: #fff;
}

@media all and (min-width:960px) {

    .container {
        left: 50%;
        margin-left:-480px;
        width: 960px;
    }

}

@media all and (max-width:600px) {

    .container {
        left: 50%;
        margin-left:-300px;
        width: 600px;
    }

}
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.