2011-09-29 18 views
45

Tengo un elemento de ancho inicialmente desconocido, específicamente una ecuación MathJax proporcionada por el usuario. Tengo el elemento configurado como bloque en línea para garantizar que el ancho del elemento se ajuste a su contenido y para que tenga un ancho definido. Sin embargo, esto evita los métodos tradicionales de centrado. Es decir, el siguiente no funciona:¿Es posible centrar un elemento de bloque en línea y, de ser así, cómo?

.equationElement 
{ 
    display: inline-block; 
    margin-left: auto; 
    margin-right: auto; 
} 

Y la solución no puede ser:

.equationElement 
{ 
    display: block; 
    width: 100px; 
    margin-left: auto; 
    margin-right: auto; 
} 

Porque no tengo idea de lo que el ancho en realidad debería ser de antemano y si el usuario hace clic en la ecuación, Necesito toda la ecuación resaltada, por lo que no puedo establecer el ancho en 0. ¿Alguien tiene una solución para centrar esta ecuación?

+0

por cierto, el registro parece brok es con Chrome en esa página. No ocurre nada si hago clic en el botón Registrar, con y sin JavaScript. – phihag

+0

¡Fascinante! Estoy usando Chrome y funciona bien para mí. ¿Qué tipo de cuenta estás usando? Google, Facebook, Twitter? –

+1

myopenid. Estoy 100% no funcionará en google chrome si JavaScript está desactivado. El botón no tiene ni siquiera un formulario, y no es un botón de envío de todos modos. – phihag

Respuesta

92

Simplemente configure text-align: center; en el contenedor.

Here's a demo.

+0

Esta es una gran idea y funciona si configuro 'display: block' pero luego el elemento toma el ancho de su contenedor o tendría que establecer el ancho manualmente pero no sé cuál será el ancho . No funciona si el elemento está configurado como 'inline-block'. La razón por la cual necesita ser 'inline-block' es para que su ancho sea dinámico a su contenido. Gracias por la gran idea sin embargo. Si puede modificarlo de modo que funcione para 'inline-block' que sería perfecto. –

+1

@Vivek Viswanathan ¿Podría explicar por qué "no funciona si el elemento está configurado como bloque en línea"? Se agregó un [enlace] (http://phihag.de/2011/so/inline-block-center.html) a una página de demostración. – phihag

+1

Parece que funciona porque 'text-align: center' se establece en el elemento primario. Sin embargo, no puedo hacer eso en mi código porque el elemento 'inline-block' tiene hermanos que no pueden estar centrados. Gracias de nuevo por su ayuda en esto. –

19

Otra manera de hacer esto (obras para el elemento de bloque también):

.center-horizontal { 
    position: absolute; 
    left: 50%; 
    transform: translateX(-50%); 
} 

Explicación: izquierda: 50% posicionará el elemento partir del centro de contener los padres, por lo que desea tirar de ella por medio de su anchura con transformar: translateX (-50%)

Nota 1: Asegúrese de ajustar la posición de la que contiene los padres a la posición: relative; Si el padre está posicionado absolutamente puso un 100% de ancho y altura, 0 relleno y div margen interior y darle position: relative

Nota 2: también se pueden modificar para el centrado vertical con

top:50%; 
transform: translateY(-50%); 
+0

¡este es asombroso! – metahamza

+4

No necesita el posicionamiento 'absoluto' y puede usar' margin: 50%; ' – Kevin

+1

No necesita absoluto, pero left/right no funcionará si la posición es' static' (posicionamiento predeterminado de los elementos). Si 'absolute' no es una necesidad específica, debe usar' relative' –

2

Un poco tarde, pero similar a la respuesta de Ivek, se puede evitar el uso de la declaración position utilizando margin-left en lugar de left, por lo que:

margin-left: 50%; transform: translateX(-50%);

Cuestiones relacionadas