2008-10-30 9 views
32

Así que me encanta cuando mi aplicación funciona muy bien en Firefox, pero luego la abro en IE y ... No, por favor, inténtelo de nuevo.IE7 y la propiedad CSS de celda de tabla

El problema que estoy teniendo es que estoy configurando una propiedad de pantalla CSS para none o table-cell con JavaScript.

Al principio estaba usando display: block, pero Firefox lo estaba haciendo raro sin la propiedad table-cell.

Me encantaría hacer esto sin agregar un truco en el JavaScript para probar IE. ¿Alguna sugerencia?

Gracias.

+5

graciosamente, se utiliza un corte para Firefox a continuación, busque un IE truco ..;) – NibblyPig

Respuesta

31

Una buena manera de resolver este ajuste, el valor display a '':

<script type="text/javascript"> 
<!-- 
function toggle(elemntId) { 
    if (document.getElementById(elemntId).style.display != 'none') { 
     document.getElementById(elemntId).style.display = 'none'; 
    } else { 
     document.getElementById(elemntId).style.display = ''; 
    } 
    return true; 
} 
//--> 
</script> 

El valor vacío hace que el estilo para volver de nuevo a su valor por defecto. Esta solución funciona en todos los principales navegadores.

+0

En Chrome, puede establecerlo en 'initial'. :) – Shaz

+6

la palabra clave 'initial' se agrega en CSS3 y se comporta exactamente como lo hace anteriormente, de acuerdo con las especificaciones. – Jacco

+0

Me encantan estos tipos de hacks :) – Tarik

4

Bueno, IE7 does not have display: table(-cell/-row) por lo que tendrá que averiguar algo más o hacer la orientación del navegador (que estoy de acuerdo, es un hack malo). Como una solución rápida (no sé lo que estás tratando de lograr, en cuanto a la apariencia) puedes probar display: inline-block y ver qué aspecto tiene.

¿Quizás encuentre una manera de hacer display: block y resuelva el problema de "Firefox render it weird" en su lugar? ¿Puedes describir exactamente lo que quieres decir con la representación extraña?

+0

Al configurar para bloquear en Firefox, que hace que las celdas de la tabla en la parte superior de cada otro en lugar de uno al lado del otro. Reescribiría todo para usar DIVs en su lugar, pero estoy muy flojo para eso, así que simplemente escribí el código de hackeo sh ** ty. –

+0

Genial, ¿cómo se ve el marcado? – joelhardi

+0

Si está haciendo elementos de nivel de bloque, puede configurarlos para que floten "float: left", por lo que en Firefox se apilarán uno al lado del otro en lugar de en filas. O "display: inline-block" podría funcionar aquí, pero en IE7 solo se puede usar en elementos que normalmente estarían en línea, como a o em. – joelhardi

3

He usado CSS durante más de una década y nunca he tenido ocasión de usar display: table-cell, y las únicas veces que uso comentarios condicionales son para ocultar los efectos avanzados de IE6.

Sospecho que un enfoque diferente resolvería su problema de una manera intrínsecamente cruzada. ¿Puedes abrir una pregunta por separado que describa el efecto que intentas lograr y publicar el HTML y el CSS que funcionan actualmente en Firefox?

9

que tenían el mismo problema y se utiliza

*float: left; 

"*" indica IE sólo

+1

¿De verdad? Ese es un truco genial. –

+3

Para ser precisos, el '' '(asterisco) piratea direcciones IE 7 y siguientes. –

+0

Star and underscore hacks: http://www.ejeliot.com/blog/63 –

48

He resuelto esto utilizando jQuery:

$(document).ready(function(){ 
    if ($.browser.msie && $.browser.version == 7) 
    { 
    $(".tablecell").wrap("<td />"); 
    $(".tablerow").wrap("<tr />"); 
    $(".table").wrapInner("<table />"); 
    } 
}); 

el guión anterior se supone que tiene divs con estilo como:

<style> 
.table  { display: table; } 
.tablerow { display: table-row; } 
.tablecell { display: table-cell; } 
</style> 
+2

+1 brillante solución, me encanta :-) – kamui

+0

@andy magoon, ¿Hay una solución como esta sin la propiedad .browser, ahora que está obsoleto por jQuery? ¿O simplemente crear nuestro propio código de detección del navegador es la única solución? – raphie

+0

@raphie Haga un .js separado y use comentarios condicionales =/ – RaphaelDDL

4

Usar el bloque en línea funciona bien para este tipo de cosas.No, IE 6 e IE 7 técnicamente no tienen display: inline-block, pero se puede replicar el comportamiento con los siguientes estilos:

div.show-ib { 
    display: inline-block; 
    *zoom: 1; 
    *display: inline; 
} 

La clave para esto es 'zoom: 1' alterna el 'hasLayout' propiedad en el elemento que cambia la forma en que el navegador representa un elemento de nivel de bloque. El único problema con el bloque en línea es que no puedes tener un margen de menos de 4px.

+0

+100 Muy buena respuesta.¡Funciona mucho mejor que cualquier otra solución que he encontrado! – KristianB

1

Un ejemplo de código fot los comentarios condicionales que eyelidlessness usuario, amablemente publicó

"[si lt IE 8]" sólo funciona si el navegador IE es menor que IE8 IE8 porque lo hace bien. Con los comentarios condicionales IE7 organiza los DIVs muy bien en horizontal ... HTML:

<div class="container"> 
    <!--[if lt IE 8 ]><table><tr><![endif]--> 
    <!--[if lt IE 8 ]><td><![endif]--> 
    <div class="link"><a href="en.html">English</a></div> 
    <!--[if lt IE 8 ]></td><![endif]--> 
    <!--[if lt IE 8 ]><td><![endif]--> 
    <div tabindex="0" class="thumb"><img src="pictures\pic.jpg" /></div> 
    <!--[if lt IE 8 ]></td><![endif]--> 
    <!--[if lt IE 8 ]><td><![endif]--> 
    <div class="link"><a href="de.html">Deutsch</a></div> 
    <!--[if lt IE 8 ]></td><![endif]--> 
    <!--[if lt IE 8 ]></tr></table><![endif]--> 
</div> 

Mi CSS

.link { 
display:table-cell; 
vertical-align:middle; 
} 
div.container { 
margin: 0 auto; 
display:table; 
} 
.thumb { 
display:table-cell; 
float: left; 
text-align: center; 
} 

IE 8 y 9 Trabajar con el CSS como lo hace Firefox. IE7 se ve ahora igual utilizando las etiquetas TR de Table y TD &. En algunas páginas, IE 8 solo funcionaba el 20% del tiempo, así que utilicé [if lt IE 9]

Esto también ayuda a suavizar problemas de alineación vertical que IE7 no puede manejar.

0

Intenté todo y la única forma en que encontré que todo era cross browser fue utilizar Javascript/Jquery. Esta es una solución limpia y liviana: click here

0

IE7 no admite display:inline-block; tampoco. Un truco es evidente zoom: 1; *display: inline; después de su CSS para display:table-cell;

Cuestiones relacionadas