首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在一个100%宽度的div中水平居中一个绝对定位的元素?

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

Stack Overflow用户
提问于 2013-05-26 17:57:01
回答 4查看 189.1K关注 0票数 161

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

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

HTML

代码语言:javascript
复制
<div id="header">
    <div id="logo"></div>
</div>

CSS

代码语言:javascript
复制
#header {
    background:black;
    height:50px;
    width:100%;
}

#logo {
    background:red;
    height:50px;
    position:absolute;
    width:50px
}
EN

回答 4

Stack Overflow用户

发布于 2013-05-26 18:09:19

您必须为margin: auto指定leftright属性0值以使徽标居中。

因此,在这种情况下:

代码语言:javascript
复制
#logo {
  background:red;
  height:50px;
  position:absolute;
  width:50px;
  left: 0;
  right: 0;
  margin: 0 auto;
}

您可能还想为#header设置position: relative

这是因为,将leftright设置为零将水平拉伸绝对定位的元素。现在,当margin被设置为auto时,魔术就会发生。margin占用了所有额外的空间(两边相等),将内容保留给它指定的width。这会导致内容居中对齐。

票数 134
EN

Stack Overflow用户

发布于 2013-05-26 19:04:08

答案中没有使用calc,这是一个更干净的解决方案。

代码语言:javascript
复制
#logo {
  position: absolute;
  left: calc(50% - 25px);
  height: 50px;
  width: 50px;
  background: red;
}

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

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

票数 19
EN

Stack Overflow用户

发布于 2013-05-26 18:16:31

根据我的经验,最好的方式是right:0;left:0;margin:0 auto。这样,如果div很宽,那么您就不会受到left: 50%;的阻碍,因为它会抵消div,从而导致添加负边距等。

演示http://jsfiddle.net/kevinPHPkevin/DeTJH/4/

代码语言:javascript
复制
#logo {
    background:red;
    height:50px;
    position:absolute;
    width:50px;
    margin:0 auto;
    right:0;
    left:0;
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16758102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档