1. Web Design
  2. HTML/CSS

9 errores de IE más comunes y cómo solucionarlos

Scroll to top
10 min read

Spanish (Español) translation by Steven (you can also view the original English article)

Internet Explorer: La pesadilla de la mayoría de los desarrolladores web. Hasta el 60% de tu desarrollo puede desperdiciarse simplemente tratando de eliminar errores específicos de IE, lo que no es realmente un uso productivo de tu tiempo. En este tutorial, aprenderás sobre los errores de IE más comunes y las disparidades de representación y cómo eliminarlos o tratarlos fácilmente.

Por cierto, si no deseas pasar por este proceso tú mismo, o si tienes problemas para solucionar un error de IE en particular, prueba el servicio de corrección de problemas del navegador IE en Envato Studio.

IE Browser Issue Correction service on Envato StudioIE Browser Issue Correction service on Envato StudioIE Browser Issue Correction service on Envato Studio
Servicio de corrección de problemas del navegador IE en Envato Studio

Alternativamente, puedes encontrar útil este artículo de Envato Market: Detección de navegador fácil y rápida. Te permite determinar rápidamente qué navegador se está utilizando y mostrar notificaciones o realizar otras acciones en función de eso.

Easy Quick Browser DetectionEasy Quick Browser DetectionEasy Quick Browser Detection
Detección de navegador fácil y rápida

1. Centrando un diseño

Centrar un elemento es probablemente algo que todo desarrollador web tiene que hacer al crear un diseño. La forma más fácil y versátil de centrar un elemento es simplemente agregar margin: auto; al elemento relevante. El método anterior se encargará de centrar el elemento independientemente de la resolución y/o el ancho del navegador. IE 6 en modo peculiar, sin embargo, decide manejar esto de la manera más desafortunada posible: no manejándolo en absoluto.

Considera el siguiente código:

1
#container{
2
	border: solid 1px #000;
3
	background: #777;
4
	width: 400px;
5
	height: 160px;
6
	margin: 30px 0 0 30px;
7
}
8
9
#element{
10
	background: #95CFEF;
11
	border: solid 1px #36F;
12
	width: 300px;
13
	height: 100px;
14
	margin: 30px auto;
15
	
16
}

El resultado que esperarías:

Tutorial ImageTutorial ImageTutorial Image

Pero lo que IE realmente te ofrece:

Tutorial ImageTutorial ImageTutorial Image

Esto se debe principalmente a que IE6 en modo peculiar y a continuación no reconoce el valor auto que establecimos en la propiedad margin. Afortunadamente, esto se soluciona fácilmente.

La solución

La forma más fácil y confiable de centrar el contenido para IE6 y a continuación es aplicar text-align: center al elemento principal y luego aplicar text-align: left al elemento que se va a centrar para asegurarte de que el texto dentro de él esté alineado correctamente.

1
#container{
2
	border: solid 1px #000;
3
	background: #777;
4
	width: 400px;
5
	height: 160px;
6
	margin: 30px 0 0 30px;
7
	text-align: center;
8
}
9
10
#element{
11
	background: #95CFEF;
12
	border: solid 1px #36F;
13
	width: 300px;
14
	height: 100px;
15
	margin: 30px 0;
16
    	text-align: left;
17
	
18
}

2. Efecto escalera

Casi todos los desarrolladores web utilizan listas para crear su navegación. Por lo general, el desarrollador crea el elemento contenedor, crea algunos enlaces en el interior y luego hace flotar los anclajes en la dirección que él quiere y termina. Por lo general. IE, sin embargo, decide hacerlo mucho más complicado. Examina el siguiente código:

1
    <ul>
2
        <li><a href="#"></a></li>
3
        <li><a href="#"></a></li>
4
        <li><a href="#"></a></li>
5
    </ul>
1
ul {
2
    list-style: none;
3
}
4
5
ul li a {
6
   	display: block;
7
   	width: 130px;
8
	height: 30px;
9
   	text-align: center;
10
   	color: #fff;
11
   	float: left;
12
	background: #95CFEF;
13
	border: solid 1px #36F;
14
	margin: 30px 5px;
15
}

Un navegador compatible con el estándar lo muestra así:

Tutorial ImageTutorial ImageTutorial Image

Y la captura de pantalla de IE:

Tutorial ImageTutorial ImageTutorial Image

No es una navegación particularmente agradable si me preguntas. Afortunadamente, hay 2 soluciones que puedes probar.

Solución #1

La forma más fácil de combatir esto es hacer flotar los elementos li en lugar de los elementos de anclaje. Solo agrega esto y ya habrás terminado.

1
ul li {
2
	float: left;
3
}

Solución #2

La segunda forma es aplicar display: inline al elemento li circundante. Además de corregir este error, también corrige el error de doble margen que se menciona a continuación. Sin embargo, a los puristas puede que no les guste colocar elementos de bloque dentro de elementos en línea.

1
ul li {
2
	display: inline
3
}

3. Margen doble en elementos flotantes

Este error es probablemente uno de los primeros con los que se encontrará un desarrollador web principiante y es específico de Internet Explorer 6 y versiones anteriores. Solucionarlo es tan simple como hacer flotar un elemento y luego aplicar un margen en la dirección en que se ha flotado. ¡Y voilá! El margen se duplicará en la salida renderizada. Realmente no es algo que esperarías al crear un diseño perfecto de píxeles.

Considera este código:

1
#element{
2
	background: #95CFEF;
3
	width: 300px;
4
	height: 100px;
5
	float: left;
6
	margin: 30px 0 0 30px;
7
	border: solid 1px #36F;
8
}

En los navegadores que cumplen con los estándares, así es como se ve:

Tutorial ImageTutorial ImageTutorial Image

Pero así es como IE 6 decide renderizarlo:

Tutorial ImageTutorial ImageTutorial Image

La solución

La solución para este error específico es aplicar display: inline al elemento flotante y todo funciona como se supone que debe hacerlo. Nuestro código anterior ahora cambia a:

1
#element{
2
	background: #95CFEF;
3
	width: 300px;
4
	height: 100px;
5
	float: left;
6
	margin: 30px 0 0 30px;
7
	border: solid 1px #36F;
8
   	display: inline;
9
}

4. Incapacidad para tener elementos con alturas pequeñas

Como parte de la creación de un diseño, es posible que debas crear elementos con alturas muy pequeñas como bordes personalizados para elementos. Por lo general, solo tendrás que agregar height: XXpx a las declaraciones del estilo y deberías haber terminado. O eso pensaba. Revisa la página en IE y probablemente harás una doble toma.

Como ejemplo, observa el siguiente código:

1
#element{
2
	background: #95CFEF;
3
	border: solid 1px #36F;
4
	width: 300px;
5
	height: 2px;	
6
	margin: 30px 0;
7
}

Y el resultado es el esperado: un elemento de 2px con un borde de 1px.

Tutorial Image

Y en IE:

Tutorial Image

Solución #1

La causa de este error es bastante simple: IE simplemente se niega a dimensionar un elemento más pequeño que el tamaño de fuente establecido. Simplemente establecer el tamaño de fuente en 0 te permite tener un elemento tan pequeño y corto como desees.

1
#element{
2
	background: #95CFEF;
3
	border: solid 1px #36F;
4
	width: 300px;
5
	height: 2px;	
6
	margin: 30px 0;
7
    	font-size: 0;
8
}

Solución #2

La siguiente mejor manera de lidiar con este error es aplicar overflow: hidden al elemento para que colapse a la altura deseada.

1
#element{
2
	background: #95CFEF;
3
	border: solid 1px #36F;
4
	width: 300px;
5
	height: 2px;	
6
	margin: 30px 0;
7
    	overflow: hidden
8
}

5. Desbordamiento automático y elementos en posición relativa

Este error asoma su fea cabeza cuando en un diseño estableces la propiedad overflow del contenedor principal en auto y colocas un elemento relativamente posicionado dentro de él. El elemento relativamente posicionado viola los límites de su elemento padre y se desborda hacia el exterior. Déjame demostrarte. Mira el siguiente código:

1
<div id="element"><div id="anotherelement"></div></div>
1
#element{
2
	background: #95CFEF;
3
	border: solid 1px #36F;
4
	width: 300px;
5
	height: 150px;	
6
	margin: 30px 0;
7
	overflow: auto;
8
}
9
10
#anotherelement{
11
	background: #555;
12
	width: 150px;
13
	height: 175px;	
14
	position: relative;
15
	margin: 30px;
16
}

Y el resultado esperado:

Tutorial ImageTutorial ImageTutorial Image

Y el resultado de IE:

Tutorial ImageTutorial ImageTutorial Image

La solución

La forma más fácil de solucionar este molesto error es colocar el elemento padre de manera relativa.

1
#element{
2
	background: #95CFEF;
3
	border: solid 1px #36F;
4
	width: 300px;
5
	height: 150px;	
6
	margin: 30px 0;
7
	overflow: auto;
8
    	position: relative;
9
}

6. Reparación del modelo de caja rota

La mala interpretación de Internet Explorer del modelo de caja es quizás su error imperdonable. IE 6 en el modo semi-compatible con los estándares evita esto, pero este problema aún puede desencadenarse por el modo peculiar.

Dos elementos div. Uno con el arreglo aplicado y otro sin él. La diferencia de ancho y alto es la suma del relleno aplicado en cada lado.

Tutorial ImageTutorial ImageTutorial Image

La solución

Estoy seguro de que el dilema con el modelo de caja no necesita explicación ni demostración, así que solo te daré la solución.

El truco consiste en establecer el ancho normalmente para todos los navegadores que cumplen con los estándares, apuntar solo a IE5/6 y luego alimentarlo con el ancho corregido. Así es como normalmente se hace:

1
#element{
2
	width: 400px;
3
    	height: 150px;	
4
	padding: 50px;
5
}

Esto ahora cambia a:

1
#element {
2
    width: 400px;
3
    height: 150px;	
4
   \height: 250px; 
5
   \width: 500px
6
}

Esencialmente, agrega el relleno al ancho original y lo alimenta a IE 6. La corrección apunta a IE 6 solo en modo peculiar, por lo que no debes preocuparte de que IE 6 en modo normal estropee las cosas.


7. Establecer un ancho y un alto mínimos

Establecer una altura mínima para un elemento es absolutamente imperativo cuando se trata de convertir un hermoso diseño en un diseño perfecto en píxeles. Desafortunadamente, IE ignora por completo la propiedad min-height en lugar de tomar la altura declarada como la altura mínima.

Solución #1

La solución es un truco creado por Dustin Diaz. Utiliza la declaración !important para que funcione. El fragmento se ve así:

1
#element {
2
  min-height:150px;
3
  height:auto !important;
4
  height:150px;
5
}

Solución #2

La segunda forma es aprovechar el hecho de que IE no puede analizar los selectores secundarios.

1
#element {
2
    min-height: 150px; 
3
    height: 150px;
4
}
5
   
6
html>body #element { 
7
	height: auto;
8
}

8. Mal comportamiento del diseño flotante

Uno de los conceptos importantes de la creación de diseños sin tablas utilizando CSS son los elementos flotantes. En la mayoría de los casos, IE6 maneja esto con aplomo pero en ciertos casos falla. Cuando te enfrentas a contenido irrompible o elementos cuyo ancho excede el ancho de su padre, causas estragos en los diseños. Deja que te enseñe.

Considera este fragmento de código:

1
<div id="container">
2
	<div id="element">http://net.tutsplus.com/</div>
3
	<div id="anotherelement"></div>
4
</div>
1
#element, #anotherelement{
2
	background: #95CFEF;
3
	border: solid 1px #36F;
4
	width: 100px;
5
	height: 150px;	
6
	margin: 30px;
7
	padding: 10px;
8
	float: left;
9
}
10
11
#container{
12
	background: #C2DFEF;
13
	border: solid 1px #36F;
14
	width: 365px;	
15
	margin: 30px;
16
	padding: 5px;
17
	overflow: auto;
18
}

El resultado esperado como se ve en un navegador compatible con los estándares:

Tutorial ImageTutorial ImageTutorial Image

En IE:

Tutorial ImageTutorial ImageTutorial Image

Como puedes ver, el primer div se expande para adaptarse al contenido, lo que finalmente rompe el diseño.

La solución

No existe una solución elegante para este error. La única forma de guardar el diseño es aplicar overflow: hidden al elemento pero a costa de recortar el contenido irrompible. El diseño se guardará, pero el contenido adicional no.

1
#element{
2
	background: #C2DFEF;
3
	border: solid 1px #36F;
4
	width: 365px;	
5
	margin: 30px;
6
	padding: 5px;
7
	overflow: hidden;
8
}

9. Espaciado entre elementos de la lista

IE 6 agrega espaciado vertical e incluso no se especifica ninguno en casos específicos. Primero veamos el código.

1
<ul>
2
 <li><a href="#">Link 1</a></li>
3
 <li><a href="#">Link 2</a></li>
4
 <li><a href="#">Link 3</a></li>
5
</ul>
1
ul {
2
	margin:0; 
3
	padding:0; 
4
	list-style:none;
5
}
6
7
li a {
8
	background: #95CFEF;
9
	display: block;
10
}

Cómo debería verse:

Tutorial ImageTutorial ImageTutorial Image

Lo que nos da IE:

Tutorial ImageTutorial ImageTutorial Image

Afortunadamente, hay una gran cantidad de soluciones que puedes probar.

Solución #1

La forma más fácil de salir es simplemente definir un ancho para las etiquetas de anclaje y ¡listo! todo funciona como debería. Declarar un ancho activa la propiedad hasLayout específica de IE del elemento. En su lugar, podrías definir una altura si lo deseas.

1
li a {
2
	background: #95CFEF;
3
	display: block;
4
    	width: 200px;
5
}

Solución #2

El siguiente método es simplemente hacer flotar el ancla a la izquierda y luego limpiarla.

1
li a {
2
	background: #95CFEF;
3
	float: left;
4
    	clear: left;
5
}

Solución #3

El tercer método es agregar display: inline al elemento li adjunto. Esto también corrige el error de doble margen como se indicó anteriormente.

1
li {
2
	display: inline;
3
}

Conclusión

Y ahí lo tienes: los nueve errores de renderizado de IE más comunes y cómo solucionarlos. Con suerte, esto te ha ahorrado algo de sangre, sudor y lágrimas mientras depurabas tu próxima creación. Estaré viendo la sección de comentarios con frecuencia; así que déjame uno si tienes dificultades para implementar las correcciones indicadas previamente.

¿Preguntas?, ¿cosas bonitas que decir?, ¿críticas? Presiona en la sección de comentarios y déjame un comentario. ¡Feliz codificación!

  • Síguenos en Twitter o suscríbete al feed RSS de Tuts+ para obtener los mejores tutoriales de desarrollo web en la web.

Recursos adicionales

Si estás cansado de arrancarte los pelos debido a errores confusos, consulta Envato Studio, donde puedes pedir ayuda a desarrolladores seleccionados que aman eliminar errores y hacer correcciones.