Как горизонтально центрировать абсолютный позиционированный элемент внутри div ширины 100%?

В приведенном ниже примере #logo позиционируется абсолютно, и мне нужно, чтобы он был расположен по горизонтали в пределах #header. Обычно я делал margin:0 auto для относительно позиционированных элементов, но я застрял здесь. Может ли кто-нибудь показать мне путь?

JS Fiddle: 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
}

Ответ 1

Если вы хотите выровнять центр по левому атрибуту.
То же самое для верхнего выравнивания, вы можете использовать margin-top: (width/2 вашего div), концепция одинаков с левым атрибутом.
Важно установить элемент заголовка в положение: 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

Ответ 2

Вам необходимо назначить значения left и right свойства 0 для margin: auto для центровки логотипа.

Итак, в этом случае:

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

Вы также можете установить position: relative для #header.

Это работает, потому что при установке left и right в ноль будет горизонтально растягиваться абсолютно позиционированный элемент. Теперь магия происходит, когда margin установлен на auto. margin занимает все дополнительное пространство (одинаково с каждой стороны), оставляя содержимое до указанного width. Это приводит к выравниванию по центру.

Ответ 3

Не удалось использовать calc в ответах, что является более чистым решением.

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

jsFiddle

Работает в большинстве современных браузеров: http://caniuse.com/calc

Возможно, это слишком рано, чтобы использовать его без резервного копирования, но я подумал, что, возможно, будущим посетителям было бы полезно.

Ответ 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;
}

Ответ 5

вот лучший практический метод, чтобы центрировать div как абсолютную позицию

DEMO FIDDLE

code -

#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;
}

Ответ 6

Легко, просто оберните его в соответствующую коробку:

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

Относительное поле имеет запас: 0 Авто; и, что важно, ширина...