PNG y sus transparencias en IE
De muchos es sabido que el IE no trabaja bien las transparencias de los archivos PNG que las contengan, esta es una de las tantas fallas del IE, pero pues todo tiene solucion y esta es algo facil de implementar y corregir, existen PNG's que podemos usar como imagenes dentro de la pagina o bien como fondos, para ambos casos tenemos las mismas opciones
Para la segunda pues que mas quisieramos los diseñadores que pudiera tomarse como una opcion, en realidad hay mucha gente que usa el navegador que viene con su sistema operativo y no le interesa probar algun otro por mejor que pueda ser, asi que por lo pronto optaremos por la tercera opcion.
Este script lo que hace es que si el navegador es el IE aplique a los PNG automaticamente un filtro Alpha para las transparencias, como comento arriba, no hay mas que hacer mas que pegar esto, el script lo hace todo solo :-D
<!--[if gte IE 5.5000]>
<script language="JavaScript">
function correctPNG() // correctly handle PNG transparency in Win IE 5.5 or higher.
{
for(var i=0; i<document.images.length; i++)
{
var img = document.images[i]
var imgName = img.src.toUpperCase()
if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
{
var imgID = (img.id) ? "id='" + img.id + "' " : ""
var imgClass = (img.className) ? "class='" + img.className + "' " : ""
var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
var imgStyle = "display:inline-block;" + img.style.cssText
if (img.align == "left") imgStyle = "float:left;" + imgStyle
if (img.align == "right") imgStyle = "float:right;" + imgStyle
if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
var strNewHTML = "<span " + imgID + imgClass + imgTitle
+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ "(src=\'" + img.src + "\');\"></span>"
img.outerHTML = strNewHTML
i = i-1
}
}
}
window.attachEvent("onload", correctPNG);
</script>
<![endif]-->
Otra de las opciones de uso de un PNG es para fondos, esto se puede solucionar con lo siguiente entre las etiquetas head:
<style type="text/css">
<!--
#fondo {
background-image:url(logoGDE.png)
}
* html #fondo {background-image:none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='logoGDE.png', sizingMethod='crop')
background:;
}
-->
</style>
* html Esto hace que se ponga un fondo para unos navegadores y ese mismo con un filtro al IE
Hay que cambiar logoGDE.png por la imagen de fondo que vamos a usar
En la tabla se pone id="fondo" yo lo puse en una tabla, si se pone en la etiqueta <table> y la tabla tiene bordes sobrepondra la imagen a los bordes, si se pone en el <td> no.
Probado en:
Firefox 1.5
Opera 8.54
IE 6
De esto se puede ver un ejemplo en www.cristovivo.com/prueba.html que a lo mejor no es la mas estetica pero muestra lo anterior
Espero les sirva ademas de que tambien espero sus comentarios al respecto, esta es una de las grandes preguntas que siempre rondan en los foros.
- Usar GIF's aunque perdamos calidad
- Utilizar otro navegador como el Mozilla Firefox y tirar el IE a la basura
- Implementar un pequeño script para solucionar esta falla
Para la segunda pues que mas quisieramos los diseñadores que pudiera tomarse como una opcion, en realidad hay mucha gente que usa el navegador que viene con su sistema operativo y no le interesa probar algun otro por mejor que pueda ser, asi que por lo pronto optaremos por la tercera opcion.
Este script lo que hace es que si el navegador es el IE aplique a los PNG automaticamente un filtro Alpha para las transparencias, como comento arriba, no hay mas que hacer mas que pegar esto, el script lo hace todo solo :-D
<!--[if gte IE 5.5000]>
<script language="JavaScript">
function correctPNG() // correctly handle PNG transparency in Win IE 5.5 or higher.
{
for(var i=0; i<document.images.length; i++)
{
var img = document.images[i]
var imgName = img.src.toUpperCase()
if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
{
var imgID = (img.id) ? "id='" + img.id + "' " : ""
var imgClass = (img.className) ? "class='" + img.className + "' " : ""
var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
var imgStyle = "display:inline-block;" + img.style.cssText
if (img.align == "left") imgStyle = "float:left;" + imgStyle
if (img.align == "right") imgStyle = "float:right;" + imgStyle
if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
var strNewHTML = "<span " + imgID + imgClass + imgTitle
+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ "(src=\'" + img.src + "\');\"></span>"
img.outerHTML = strNewHTML
i = i-1
}
}
}
window.attachEvent("onload", correctPNG);
</script>
<![endif]-->
Otra de las opciones de uso de un PNG es para fondos, esto se puede solucionar con lo siguiente entre las etiquetas head:
<style type="text/css">
<!--
#fondo {
background-image:url(logoGDE.png)
}
* html #fondo {background-image:none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='logoGDE.png', sizingMethod='crop')
background:;
}
-->
</style>
* html Esto hace que se ponga un fondo para unos navegadores y ese mismo con un filtro al IE
Hay que cambiar logoGDE.png por la imagen de fondo que vamos a usar
En la tabla se pone id="fondo" yo lo puse en una tabla, si se pone en la etiqueta <table> y la tabla tiene bordes sobrepondra la imagen a los bordes, si se pone en el <td> no.
Probado en:
Opera 8.54
IE 6De esto se puede ver un ejemplo en www.cristovivo.com/prueba.html que a lo mejor no es la mas estetica pero muestra lo anterior
Espero les sirva ademas de que tambien espero sus comentarios al respecto, esta es una de las grandes preguntas que siempre rondan en los foros.
5 Comentarios:
Perdona, me estoy iniciando en esto de las webs, así que te agradecería que me explicases, paso a paso (en plan para personas supertorpes) como pegar ese código para que funcione correctamente. Yo he leído que se debe de poner entre el head y head de l código pero cuando lo pego, la primera línea se pone gris y creo que no funciona(uso dremaweaver).
Ya no sé qué más hacer. Muchas gracias.
6:14 AM
EL codigo lo debes copiar tal como esta entre las etiquetas HEAD, si quieres mandame tu pagina o el codigo para analizarlo
5:34 PM
Acabo de leer y probar tu solución javascript y va de maravilla.
Gracias por la ayuda. Me ha ahorrado un montón de tiempo al no tener que convertir las imágenes.
11:18 AM
muchisimas gracias javier!! estaba por convertir todo a flash, me salvaste!!
7:21 AM
Perdon, pero ya estoy desesperada.
No tengo opcion de usar png para los banners que neceisto poner ya que tienen una sombra que en gif..un asquete. Obviamente con fondo transparente.
Probe con todo lo que vi hasta el momento. La transparencia la soluciono, pero al aplicar onMouseOut - onMouseOver, no carga esta ultima.(ambas png). a alguien se le ocurre algo?.
Encuentro parches de todos los colores para la transparencia..no asi para el uso de estas funciones.
gracias desde ya
Changa
10:43 AM
Publicar un comentario en la entrada
Enlace a este tema:
Crear un vínculo
<< Inicio