2013-05-26 257 views
124

在下面的例子中,#logo被绝对定位,我需要它在#header内水平居中。通常情况下,我会为margin:0 auto做相对定位的元素,但我在这里卡住了。有人能告诉我方式吗?如何将100%宽度div内的绝对定位元素水平居中?

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

HTML

<div id="header"> 
    <div id="logo"></div> 
</div> 

CSS

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

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

好问题......发生什么事情align:center;)...不要尝试,因为它不会工作;) – craig1231

+1

嘿,你意识到,用CSS像那样,你将标识放置在窗口中,而不是在标题中? –

+0

@Desi利润自动工作,你需要正确使用它看到我的例子 –

回答

247

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

#logo { 
    background:red; 
    height:50px; 
    position:absolute; 
    width:50px; 
    left:50%; 
    margin-left:-25px; 
} 

DEMO

如果您想不使用的计算,你可以这样做:

#logo { 
    background:red; 
    width:50px; 
    height:50px; 
    position:absolute; 
    left: 0; 
    right: 0; 
    margin: 0 auto; 
} 

DEMO2

+3

我不断来这个答案偶尔从谷歌。 :D –

104

你将不得不同时将与leftright财产0值为margin: auto居中标志。

因此,在这种情况下:

#logo { 
    background:red; 
    height:50px; 
    position:absolute; 
    width:50px; 
    left: 0; 
    right: 0; 
    margin: 0 auto; 
} 

你也可能需要设置为position: relative#header

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

+7

我喜欢这个比利用边距补偿更好,因为它适用于动态宽度。 – davidmdem

+0

你能解释一下,为什么这个工程? –

+7

将'left'和'right'设置为零将水平拉伸绝对定位的元素。现在,当'margin'设置为'auto'时,魔术就会发生。 'margin'占据了所有额外的空间(同样在每一边),将内容留给它指定的“宽度”。这导致内容成为中心对齐。 – Arjun

4

根据我的经验,最好的方法是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; 
} 
+0

是的,我说过这里回到同一时间http://stackoverflow.com/a/16758185/1571437:D – Arjun

+0

谢谢,我更喜欢这种方法,因为可以让你有动态物品的大小,问候! – Alexis

4

这里是最好的实践方法,以中心一个div绝对位置

DEMO FIDDLE

码 -

#header { 
background:black; 
height:90px; 
width:100%; 
position:relative; // you forgot this, this is very important 
} 

#logo { 
background:red; 
height:50px; 
position:absolute; 
width:50px; 
margin: auto; // margin auto works just you need to put top left bottom right as 0 
top:0; 
bottom:0; 
left:0; 
right:0; 
} 
12

失踪使用calc中答案,这是一个更清洁的解决方案。

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

jsFiddle

作品中最现代的浏览器:http://caniuse.com/calc

也许是太早使用没有回退,但我想,也许为未来的游客将是有益的。

+0

我认为Clac函数中的公式似乎与margin-left相同:-50px; –

+1

差异是错误的:您必须减去元素宽度的半角...在这种情况下, left:calc(50% - 25px); –

+0

你说得对。谢谢!现在更新了。 – pzin

1

它很容易,只要把它包在像这样相对框:

<div class="relative"> 
<div class="absolute">LOGO</div> 
</div> 

相对盒具有保证金:0汽车; ,重要的是,一个宽度... ...

+0

哇,太棒了!我们不能相信有很多方法可以实现绝对定位div的居中,但是这样做绝对会更好,然后设置负边距并且可以适用于任何宽度! – YemSalat