2009-08-21 17 views
23

Por favor, ayúdenme en esto. Necesito crear un diseño usando anchos de porcentaje. Tengo un envoltorio que es 100% ancho.¿Cómo reparar el error de Internet Explorer 7 cuando se usa el ancho de porcentaje para el diseño?

ahora tengo un DIV (la envoltura principal .. Quiero mantenerlo a 94% el porcentaje de anchura .. 94% del cuerpo 100%) .. bien fina

Así que para hacer este sencillo.

- anchura> BODY 100% fijado

-> CONTAINER 94% anchura

---> primer hijo DIV 70% de flotante a la izquierda (70% del contenedor)

- -> segundo hijo DIV 30% derecho flotador (30% del contenedor)

Pero tengo 2 columnas iguales bajo primer hijo DIV

-----> 50% y 50% anchura porcentaje

El error es: En ie7 ... la última columna se muestra en la parte inferior ... no está flotando correctamente ... Si reduzco el ancho al 29.9% !!! funciona ... creo que ie7 tiene errores al tratar anchos de porcentaje o algo así. Por favor aclare esto. Espero que usted consiga el problema porque el css/html es demasiado largo .. sólo espero que es un problema común .. :(

Aquí es el CSS para el DIV .. Espero que ayude :)

body { 
width: 100%; 
background: #fff; 
text-align: center; 
font-size: 12px; 
} 

#wide-primary { 
background: #fff url(img/shadow1.png) repeat-x top; 
position: relative; 
top: -1px; 
} 

#primary { 
width: 94%; 
margin: 0 auto 0 auto; 
text-align: left; 
} 

#features { 
float: left; 
width: 70%; 
padding: 2% 0 0 0; 
} 

.featurebox { 
float: left; 
width: 48%; 
padding: 0 2% 3% 0; 
} 

#lastnews { 
float: right; 
width: 30%; 
padding: 2% 0 2% 0; 
} 
+0

Podría ser útil si puede publicar su CSS. – JasCav

+0

Ok, agréguelo según su solicitud –

Respuesta

46

El problema es el redondeo subpíxel. Cuando diseñe con porcentajes, habrá ocasiones en que las matemáticas no darán como resultado píxeles completos (70% de 721px es 504.7px). 721 es arbitrario, pero usando porcentajes te encontrarás con números arbitrarios. No hay forma de evitar eso. La mayoría de los navegadores encuentran una solución de redondeo para usted que no rompe el diseño. IE7 (y más viejo) simplemente redondea. Al redondear, el ancho de su contenedor a 721px incluirá una caja a 505px y otra a 217px para un total de 722px, más del 100%. En ese momento IE decide que la segunda casilla no cabe y la coloca debajo.

Existen varias soluciones según su situación. Nicole Sullivan tiene una solución interesante basada en el uso de 'overflow: hidden;' en su última columna en lugar de una combinación de flotante/ancho. Lo uso cuando puedo Échale un vistazo aquí:

http://www.stubbornella.org/content/2009/07/23/overflow-a-secret-benefit/

La otra solución que he encontrado cuando 'desbordamiento' apenas no lo corte es añadir un pequeño margen negativo al último elemento en una fila. Si está flotando hacia la izquierda, agregue un margen negativo de varios píxeles a la derecha. Flotando a la derecha, agrégalo a la izquierda. No me he encontrado con ningún efecto negativo (aunque me gustaría saber si otros lo hacen).

Espero que ayude. Aclamaciones.

+0

Ayuda mucho. Hice mucha confusión clara ... pero una pregunta permanece en mi mente ahora. En tu opinión; ¿Cuántos márgenes de píxeles negativos es seguro agregar? (y me refiero a la compatibilidad entre navegadores) –

+0

Lamento decir que todavía estoy explorando eso. En mi experiencia, nunca necesitas más de unos pocos píxeles para limpiar IE (dependiendo del número de columnas), y ¿por qué ir por la borda? Todavía no he visto ningún problema entre navegadores, pero también prefiero esconderlo de los navegadores que no lo necesitan, por seguridad. Puede hacerlo en una hoja de estilo específica de IE llamada con comentarios condicionales, o agregando un hash al comienzo de la declaración (si prefiere hacks, no lo hago): # margin-right: -3px; –

8

Aquí está la solución simple para esto:

div { 
*min-width: 100%; 
} 

probado en IE7.

+0

Lo usé en una hoja de estilo condicional para IE7 con la notación normal de "min-width" (sin el asterisco). Funcionó muy bien, gracias. – Weboide

+0

Realmente ayuda lleno. muchas gracias – Muhammed

+0

No se recomienda usar * en una regla de CSS porque -> http://stackoverflow.com/questions/4563651/what-does-an-asterisk-do-in-a-css-property-name En su lugar, debe utilizar condicionales de IE para agregar una clase específica para la versión de IE que desea modificar. – Mido

0

Esto es lo que estoy usando para solucionar ese problema en IE 7.

<!--[if IE 7]> 
    <style> 
     body { 
     padding:0 1% 0 0; 
     width:101%; 
     } 
    </style> 
<![endif]--> 
0

intente lo siguiente:

div { 
    width: 100%; 
    *overflow: auto; 
} 

funciona bien en IE7.

Cuestiones relacionadas