¿Cómo puedo centrar horizontalmente un elemento posicionado absoluto dentro de un div de ancho 100%? [duplicar]
Esta pregunta ya tiene una respuesta aquí:
- Cómo centrar elemento absolutamente posicionado en div? 26 respuestas
En el siguiente ejemplo, #logo
está posicionado absolutamente y necesito que esté centrado horizontalmente dentro de #header
. Normalmente, haría un margin:0 auto
para elementos relativamente posicionados, pero estoy atrapado aquí. ¿Puede alguien mostrarme el ¿camino?
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
}
6 answers
Si desea alinear el centro en el atributo izquierdo.
Lo mismo es para la alineación superior, puede usar margin-top: (ancho / 2 de su div), el concepto es el mismo del atributo left.
Es importante establecer el elemento header en position: relative.
prueba esto:
#logo {
background:red;
height:50px;
position:absolute;
width:50px;
left:50%;
margin-left:-25px;
}
DEMO
Si no desea utilizar cálculos puede hacer esto:
#logo {
background:red;
width:50px;
height:50px;
position:absolute;
left: 0;
right: 0;
margin: 0 auto;
}
DEMO2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-31 10:25:42
Tendrá que asignar tanto left
como right
propiedad 0
valor para margin: auto
para centrar el logotipo.
Así que en este caso:
#logo {
background:red;
height:50px;
position:absolute;
width:50px;
left: 0;
right: 0;
margin: 0 auto;
}
Es posible que también desee establecer position: relative
para #header
.
Esto funciona porque, al establecer left
y right
a cero, se estirará horizontalmente el elemento absolutamente posicionado. Ahora la magia sucede cuando margin
se establece en auto
. margin
ocupa todo el espacio extra(igualmente en cada lado) dejando el contenido a su width
especificado. Esto resulta en contenido alineándose al centro.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-30 07:35:45
Faltaba el uso de calc
en las respuestas, que es una solución más limpia.
#logo {
position: absolute;
left: calc(50% - 25px);
height: 50px;
width: 50px;
background: red;
}
Funciona en la mayoría de los navegadores modernos: http://caniuse.com/calc
Tal vez sea demasiado pronto para usarlo sin un respaldo, pero pensé que tal vez para los futuros visitantes sería útil.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-30 14:11:00
En mi experiencia, la mejor manera es right:0;
, left:0;
y margin:0 auto
. De esta manera, si el div es ancho, entonces no se ve obstaculizado por el left: 50%;
que compensará su div que resulta en la adición de márgenes negativos, etc.
DEMO http://jsfiddle.net/kevinPHPkevin/DeTJH/4 /
#logo {
background:red;
height:50px;
position:absolute;
width:50px;
margin:0 auto;
right:0;
left:0;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-26 10:16:30
Aquí está el método mejor practicado para centrar una div como posición absoluta
VIOLÍN DE DEMOSTRACIÓN
Código -
#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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-26 10:18:02
Es fácil, simplemente envuélvalo en una caja relativa como esta:
<div class="relative">
<div class="absolute">LOGO</div>
</div>
El cuadro relativo tiene un margen: 0 Auto; y, importante, una anchura...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-17 13:37:08