2009-06-17 15 views
5

tengo el código HTML siguiente:¿Cómo mantener la transparencia PNG alfa cuando se utiliza "-ms-filtro" propiedad

<a><img src="myfile.png" /> Some text</a> 

Y esto css:

a:hover 
{ 
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)"; 
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75); 
    opacity: .75; 
} 

El problema con esto se produce tanto en IE 8 y IE 7.

Cuando la imagen PNG está sujeta a la -ms-filtro o filtro, su transpa alfa rency está arruinado. Pruébalo y verás. Es un error tanto en IE 8 como en IE 7.

¿Puedo eliminar las propiedades "-ms-opacity" y "filter" aplicadas en CSS? ¿Cuál es la sintaxis para esto? (Por ejemplo, algo así como -ms-filter: "";)

¿Alguien conoce una solución a este problema?

+0

No creo que hayamos entendido su pregunta. ¿Podrías intentar reformularlo? –

+0

@SpliFF et al. - ¿Alguien puede agregar (o editar) una respuesta para dar el css requerido para hacer un png con visualización de transparencia parcial con un 75% de opacidad en IE 7 y 8. Esta es la pregunta original y no se completó ninguna respuesta. – OrangeDog

Respuesta

4

ACTUALIZACIÓN: AlphaImageLoader filtro aplicado directamente al img puede anular el filtro Alpha. En cuanto a eliminar un filtro, ¿ha intentado filter:none;?

Sí, programmically target IE6 y below con comentarios condicionales.

<!--[if lt IE 7]> 
<style>a:hover{filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75);}</style> 
<![endif]--> 

también guiones como IE7-js se encargará de la transparencia PNG para usted sin estorbar encima de su CSS con código no estándar.

<!--[if lt IE 7]> 
<script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE7.js" type="text/javascript"></script> 
<![endif]--> 
+0

Lo siento, no estoy interesado en IE 6. Estoy intentando hacer que esto funcione en IE7 e IE8 cuando utilizo las propiedades '-ms-filter' o 'filter' css. – cbp

+0

La solución también funciona para ie7. simplemente cambie la condición a lt IE8 y la secuencia de comandos a ie8.js – SpliFF

+0

Pero el problema está ocurriendo en IE 8 incluso: cuando aplicas las propiedades 'filtro' o '-ms-filter' en CSS, cualquier transparencia alfa PNG ya no funciona. – cbp

10

Sólo embellecer la respuesta de canuto, podría solucionar este problema mediante la adición de la siguiente jQuery a mi página:

$(function() { 
    if (jQuery.browser.msie) 
     $('img[src$=".png"]').each(function() { // must have quotes around .png 
      this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src="+this.src+",sizingMethod='scale')"; 
     }); 
}); 

Esto aplicará el AlphaImageLoader también todos los archivos PNG en la página.

+0

Este pequeño script (y algunas etiquetas de span alrededor de las imágenes que me gustaría desvanecer) es una maravilla y un tesoro para aquellos que tienen que luchar con la abominación de MSIE. – Brian

2

Para las personas que buscan otra respuesta, resolví esto usando el siguiente código que escribí en JavaScript, por lo que es independiente del marco. Aún así debes ponerlo dentro del evento listo para DOM de tu marco (o puedes usar domready.js como yo lo hice). Carga todas las imágenes con extensión .PNG con AlphaImageLoader. Tiene que hacerse antes de aplicar el filtro Alpha (puede aplicar el filtro después de este código con JS también).

El código de abajo:

var i; 
for (i in document.images) { 
    if (document.images[i].src) { 
     var imgSrc = document.images[i].src; 
     if (imgSrc.toLowerCase().substr(imgSrc.length-4) === '.png') { 
      document.images[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',sizingMethod='crop',src='" + imgSrc + "')"; 
     } 
    } 
} 

Recuerde a ponerlo dentro de los comentarios condicionales para IE:

<!--[if IE]><![endif]--> 

Por favor, hágamelo saber si ha funcionado bien. Saludos cordiales!

Cuestiones relacionadas