如何将绝对定位元素水平居中在100%宽度的div中?

J82*_*J82 148 html css

在下面的例子中,#logo绝对定位,我需要它水平居中#header.通常情况下,我会margin:0 auto为相对定位的元素做一个但我被困在这里.有人能给我指路吗?

JS小提琴:http://jsfiddle.net/DeTJH/

HTML

<div id="header">
    <div id="logo"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

#header {
    background:black;
    height:50px;
    width:100%;
}

#logo {
    background:red;
    height:50px;
    position:absolute;
    width:50px
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*eri 287

如果要对齐左侧属性中心.
同样的事情是顶部对齐,你可以使用margin-top :( div的宽度/ 2),概念与left属性相同.
将header元素设置为position:relative是很重要的.
试试这个:

#logo {
    background:red;
    height:50px;
    position:absolute;
    width:50px;
    left:50%;
    margin-left:-25px;
}
Run Code Online (Sandbox Code Playgroud)

DEMO

如果您不想使用计算,可以执行以下操作:

#logo {
  background:red;
  width:50px;
  height:50px;
  position:absolute;
  left: 0;
  right: 0;
  margin: 0 auto;
}
Run Code Online (Sandbox Code Playgroud)

DEMO2

  • 左:0;对:0; 为我做了把戏。谢谢@Alessandro (3认同)
  • 重要提示,这很容易忘记,因此必须设置宽度才能使用 (3认同)

Arj*_*jun 123

您必须分配两者leftright属性0margin: auto才能使徽标居中.

所以在这种情况下:

#logo {
  background:red;
  height:50px;
  position:absolute;
  width:50px;
  left: 0;
  right: 0;
  margin: 0 auto;
}
Run Code Online (Sandbox Code Playgroud)

您可能还需要设置position: relative#header.

这是有效的,因为设置leftright零将水平拉伸绝对定位的元素.现在魔法发生时margin,设置为auto.margin占用所有额外空间(同样在每一侧),将内容留给指定的内容width.这导致内容变得中心对齐.

  • 我比使用边距抵消要好得多,因为它适用于动态宽度. (7认同)
  • 将`left`和`right`设置为零将水平拉伸绝对定位的元素.现在当`margin`设置为`auto`时会发生魔术.`margin`占用了所有额外空间(同样在每一侧),将内容留给它指定的`width`.这导致内容变得中心对齐. (7认同)

pzi*_*zin 19

calc在答案中缺少使用,这是一个更清洁的解决方案.

#logo {
  position: absolute;
  left: calc(50% - 25px);
  height: 50px;
  width: 50px;
  background: red;
}
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

适用于大多数现代浏览器:http://caniuse.com/calc

也许在没有后备的情况下使用它可能还为时过早,但我想也许对未来的访问者来说它会有所帮助.

  • 差异是错误的:你必须减去元素宽度的HALF ......在这种情况下,左:calc(50% - 25px); (2认同)

Kev*_*nch 7

根据我的经验,最好的方法是right:0;,left:0;margin:0 auto.这样,如果div很宽,那么你不会受到阻碍left: 50%;你的div的阻碍,这会导致增加负边距等.

DEMO http://jsfiddle.net/kevinPHPkevin/DeTJH/4/

#logo {
    background:red;
    height:50px;
    position:absolute;
    width:50px;
    margin:0 auto;
    right:0;
    left:0;
}
Run Code Online (Sandbox Code Playgroud)