2009-08-05 15 views
52

¿Cómo centrar horizontalmente un elemento flotante de ancho variable?¿Cómo centrar horizontalmente un elemento flotante de ancho variable?

Editar: Ya tiene este trabajo usando una que contiene div para el elemento flotante y la especificación de un width para el recipiente (a continuación, utilizar margin: 0 auto; para el recipiente). Solo quería saber si se puede hacer sin usar un elemento contenedor o al menos sin tener que especificar width para el elemento contenedor.

+6

Si va a centrar, ¿por qué está flotando? – You

+0

es una larga historia, la estoy flotando por otras razones –

+1

posible duplicado de [** ¿Cómo centrar elementos flotantes? **] (http://stackoverflow.com/questions/4767971/how-to-center-float -elementos) – arnaud576875

Respuesta

4

Digamos que tienes una DIV que desea centrado horizontalmente:

<div id="foo">Lorem ipsum</div> 

En el CSS que le diseñarlo con esto:

#foo 
{ 
    margin:0 auto; 
    width:30%; 
} 

que establece que usted tiene un margen superior e inferior de cero píxeles, ya sea a la izquierda o a la derecha, calcula automáticamente cuánto se necesita para estar a la par.

No importa lo que ingrese para el ancho, siempre y cuando esté allí y no sea 100%. De lo contrario, no estarías poniendo el centro en nada.

Pero si lo hace flotar, hacia la izquierda o hacia la derecha, entonces las apuestas están desactivadas ya que eso lo saca del flujo normal de elementos en la página y la configuración de margen automático no funcionará.

+1

El único problema aquí es que tiene que establecer explícitamente el ancho; 'width: auto;' no funciona (AFAIK). – You

+0

Correcto, tienes que establecer algo como el ancho. Pero la pregunta era sobre el ancho variable, espero que no sea otra palabra para auto y en cambio algún valor fluctuante o cantidad relativa, como em o% – random

+0

Gracias por su respuesta, en realidad no tengo problemas con los elementos de centrado, lo que hago ' Lo que intento hacer es centrar un "elemento flotante". Sé que esto no es posible en CSS, pero esperaba que alguien pudiera tener un truco que pudiera funcionar para esto, incluso traté de usar una tabla, pero eso tampoco funcionó. Lamentablemente, en mi caso, no hay forma de que el elemento no flote, lo necesito por razones específicas. –

87

Suponiendo que el elemento que está flotando y se centra es una div con un id="content" ...

<body> 
<div id="wrap"> 
    <div id="content"> 
    This will be centered 
    </div> 
</div> 
</body> 

y aplicar los siguientes CSS:

#wrap { 
    float: left; 
    position: relative; 
    left: 50%; 
} 

#content { 
    float: left; 
    position: relative; 
    left: -50%; 
} 

Aquí es un buen reference con respecto a eso.

+1

Gracias, echaré un vistazo a este –

+0

También puedes probar 'margin-left' en lugar de' left' y 'position: relative'. Margin-left funcionó para mí en el elemento -50%. – Muhd

+0

sí, pero ¿cuál es el valor agregado @muhd? – marcusklaas

0

¿No puedes simplemente usar display: inline block y align en center?

Example.

+3

nada en su violín está flotando ... – Muhd

65
.center { 
    display: table; 
    margin: auto; 
} 
+4

esto funcionó mucho mejor para mí que la respuesta aceptada, ¡pruebe ambos! –

+1

Prefiero este método también mejor, pero funciona en IE8 +, por lo que si necesita IE7 debe usar la respuesta aceptada. – isapir

+0

Gracias - ahorré mi tiempo, de verdad! – Rossitten

4

Puede utilizar fit-content valor de width.

#wrap { 
    width: -moz-fit-content; 
    width: -webkit-fit-content; 
    width: fit-content; 
    margin: auto; 
} 

Nota: Solo funciona en los últimos navegadores.

4

La respuesta popular aquí sí funciona a veces, pero otras veces crea barras de desplazamiento horizontales que son difíciles de manejar, especialmente cuando se trata de navegaciones horizontales amplias y grandes menús desplegables. Aquí es una versión aún más ligero que ayuda a evitar esos casos extremos:

#wrap { 
    float: right; 
    position: relative; 
    left: -50%; 
} 
#content { 
    left: 50%; 
    position: relative; 
} 

Proof that it is working!

Para responder más específicamente a su pregunta, es probable que no es posible hacerlo sin necesidad de crear algún elemento que contiene, sin embargo, es muy posible hacerlo sin especificar un valor de ancho. Espero que salve a alguien por ahí algunos dolores de cabeza!

1

Esto funciona mejor cuando el id = contenedor (que es el div externo) y id = contenido (que es el div interno). El problema con la solución altamente recomendada a continuación es que, en algunos casos, se convierte en una barra de desplazamiento horizontal cuando el navegador intenta abastecer el atributo izquierdo: -50%. There is a good reference para esta solución

 #container { 
      text-align: center; 
     } 
     #contained { 
      text-align: left; 
      display: inline-block; 
     } 
Cuestiones relacionadas