2011-07-26 5 views
8

Los navegadores IE y WebKit parecen coincidir en que "position: absolute" cuando se aplica a "display: inline-block" (o, en el caso de IE7, elementos simples "inline" con "hasLayout") debería dar como resultado bloques posicionado en línea Es decir, con:Combinando "pantalla: bloque en línea" con "posición: absoluta": ¿qué debería pasar?

Hello there <label style='position: absolute; display: inline-block'>sir</label> 

los navegadores mostrarán:

Hello theresir 

o

Hello there sir 

Sin embargo, Firefox (3 y hasta, creo) darán esto:

Hello there 
sir 

Es decir, hacen el "bloque en línea" e comienzo de lement en una nueva línea. Ahora, eso claramente no es lo que "inline-block" hace sin combinado con "position: absolute", ni es lo que "position: absolute" hace sin "display: inline-block". ¿Es esto un error, o simplemente una especificación mala (ambigua)?

Here es un jsfiddle muy simple.

(edición — tal vez eso es lo hace con Firefox "position: absolute" y no "pantalla" Configuración ...)

+2

'position: absolute' should force' display: block'. Vea el número 2 [aquí] (http://www.w3.org/TR/CSS21/visuren.html#dis-pos-flo). No estoy seguro de lo que está pasando aquí ... – thirtydot

+0

Hmm ... eso sugiere que Firefox tiene razón y todos los demás están equivocados ... – Pointy

+0

Opera se comporta de la misma manera que Firefox, por lo que me inclino a estar de acuerdo contigo. ¿Un error de WebKit y un error de IE? – thirtydot

Respuesta

4

El comportamiento aquí en realidad no se define en la especificación. La posición vertical debería ser "como si la posición no fuera absoluta, más o menos", básicamente. Más precisamente, esta parte de http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-height es relevante:

Pero en lugar de realmente calcular las dimensiones de ese cuadro hipotético, los agentes de usuario son libres de hacer una conjetura en su probable posición.

Dicho esto, el código Gecko que implementa esto es anterior a la implementación de bloque en línea de Gecko, por lo que solo comprueba si la visualización original está "en línea". Archivé https://bugzilla.mozilla.org/show_bug.cgi?id=674435 para ver cómo cambiar esto en Gecko.

+0

guau pareces saber cosas, y eso es genial :-) – Pointy

+0

también lo que dijiste sobre la implementación coincide con mi sospecha :-) – Pointy

+0

@Pointy Saber esto es como mi trabajo diario. ;) –

Cuestiones relacionadas