2011-08-31 9 views
9

He encontrado un problema al usar contenido absolutamente posicionado dentro de un elemento td. El elemento td no se reconoce como un elemento posicionado, por lo que el contenido se posiciona con relación al body. Este problema solo está en Firefox y el diseño esperado está visible en otros navegadores: jsfiddle.Problema de Firefox con pantalla: absoluto en una celda de tabla

Haciendo un poco de investigación parece que el problema está relacionado con FireFox usando display:table-cell como el tipo de pantalla predeterminado para las celdas de la tabla. Puedo resolver el problema cambiando la pantalla a block o agregando un contenedor div para actuar como un contenedor posicionado al contenido.

¿Hay alguna razón para evitar cambiar el tipo de pantalla de la celda a block? Preferiría usar este método en lugar de agregar elementos adicionales para corregir un problema en un navegador.

Este no es el mismo problema descrito en div style absolute in a table cell o Why "display: table-cell" is broken when "position: absolute".

+0

+1 tuve el mismo problema hace unos días, me vi obligado a cambiar lo que estaba tratando de hacer. –

+0

@ric_bfa - Es más una molestia que cualquier otra cosa ahora que sé lo que la desencadena. Pensé que el mundo estaba llegando a su fin cuando incluso IE7 se comportó como se esperaba y Firefox no. – detaylor

+0

mismo aquí, IE = trabajo, otros lo harán mejor, pero en ese caso, fue una gran sorpresa. –

Respuesta

11

Si configura la pantalla de la celda en block, se envolverá en una celda de tabla anónima. El árbol de cuadro de CSS resultante es el mismo que si creó un <div> dentro de la celda y establece todos los estilos y atributos de la celda en ese bloque.

Esto podría estar bien para muchos propósitos. Se romperá si la celda tiene un rowspan o colspan (porque esos no significan nada en los bloques) o si la celda tiene estilos de borde que espera que formen parte del colapso de borde o si tiene dos de esas celdas una al lado de la otra (porque entonces los dos bloques se envolverán en una sola celda de tabla , no en dos celdas de tabla separadas). Probablemente haya otras situaciones en las que el comportamiento será inesperado. Pero si tiene suficiente control sobre los estilos y el contenido y no está aplicando demasiado estilo a la celda, esto funcionará.

+0

Gracias, gran respuesta. Noté que si otras celdas se ajustaban a dos líneas, la celda con 'display: block' no se expandía como se esperaba, lo que se explicaría por lo que explicaste. – detaylor

+0

@Boris Zbarsky: ¿problema con el uso de rowspan y colspan para solucionarlo? – krish

+0

No es que yo sepa, salvo poner un bloque real dentro de su celda y poner el estilo 'position: relative' sobre eso. O Firefox arreglando el error involucrado, por supuesto. –

-2

¿Intentó establecer explícitamente la posición del TD como relativa?

Esto debería restablecer el posicionamiento. En realidad, es un comportamiento correcto lo que está obteniendo, y no debería estar relacionado solo con TD, pero ya sabe, los navegadores son divertidos.

Para más detalles acerca de por qué es necesario establecer explícitamente, comprobar:
http://css-tricks.com/791-absolute-positioning-inside-relative-positioning/

..

Actualización:

Esta respuesta sugiere tratando una opción. Está escrito antes que la respuesta aceptada, y no se elimina solo por razones de archivo y ya que es otra posibilidad relacionada para los que vienen desde los motores de búsqueda para un problema similar pero no el mismo. Aprecio tu comprensión.

+1

sí, la posición de 'td' está explícitamente establecida en' relativa'. Todos los navegadores excepto Firefox posicionan el contenido relativo a 'td', posiciones FF relativas a' cuerpo'. 'position: table-cell' parece detener el' td' de ser un padre desplazado. – detaylor

+2

Tengo exactamente el mismo problema. Todos los navegadores excepto firefox ponen la "posición: absoluta"; contenido relacionado con la "posición: relativa" más cercana; padre, pero si el objeto tiene "display: table-cell;" firefox lo ignora y establece el contenido absoluto relacionado con el cuerpo. Molesto. –

Cuestiones relacionadas