And After - Design e Tecnologia por Sua Conta!
O desenvolvedor é um blog sobre desenvolvimento web, não tratando apenas de programação mas também compartilhando experiências, métodos, debates e tendências da internet.

O Desenvolvedor é um blog de www.andafter.org
Assinar o Feed RSS

Guilherme Serrano

[@]
[www]

Graduado em design, viciado em web, adoro desenvolvimento, mashups, usabilidade, o universo e tudo mais.

Vivo de e para internet. :)

Status
Karma: 32276
Opiniões: 29

Mais deste autor


Como deixar um background com transparência no IE

Como deixar um background com transparência no IE

Muito bomEste texto foi classificado como Muito bom
Em Design digital, Internet, Programação
Por Guilherme Serrano
11 de Dezembro de 2007

Tutorial de como utilizar transparência em imagens e backgrounds no formato png no Internet Explorer através de JavaScript.

RSS Acompanhe O Desenvolvedor por Feeds!


Inimigo mortal de imagens no formato .png, o Internet Explorer - pelo menos até o 6 - não interpreta as transparências dificultando a nossa árdua vida de desenvolvedor.

O pngfix é um conhecido de quase todo mundo e ele serve exatamente para forçar o IE a interpretar transparências nas imagens. Até aí pouca novidade para a grande maioria, mas ainda existia o problema de background com transparência, inicialmente não resolvido pelo pngfix.

Vou fazer um passo a passo, primeiro de como deixar imagens transparente e depois de como aplicar isso aos backgrounds também.

As imagens:

1. Baixe o arquivo pngfix.js e o coloque na pasta do seu site (clique aqui para baixar o arquivo ou copie e cole o código abaixo)

 

/*

Correctly handle PNG transparency in Win IE 5.5 & 6.
http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006.

Use in with DEFER keyword wrapped in conditional comments:


*/

var arVersion = navigator.appVersion.split("MSIE")
var version = parseFloat(arVersion[1])

if ((version >= 5.5) && (document.body.filters))
{
for(var i=0; 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 = "
+ " style="" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ "(src='" + img.src + "', sizingMethod='scale');">"
img.outerHTML = strNewHTML
i = i-1
}
}
}

2. Coloque dentro da tag head da sua página o seguinde código:

<!–[if lt IE 7]>
<style type=”text/css”>
#main{
background-image: none;
filter:
progid: DXImageTransform.Microsoft.AlphaImageLoader(src=IMAGEM.png,sizingMethod=’scale’)
;
}
</style>
<![endif]–>

Isso significa que o navegador só irá interpretar se for IE e com uma versão anterior a 7.

Pronto, automaticamente todas as imagens do seu site - menos os backgrounds - estarão com a transparência até no teimoso IE.

Agora aos backgrounds:

Aqui é um pouco mais trabalhoso, pois tem que ser feito manualmente em cada background, mas nada que uma folha de estilos para o IE não resolva. Minha dica é criar uma folha exclusiva para o IE e carregar ela pelo mesmo código que carrega o javascript.

Na folha de estilos do IE você precisa definir o seguinte:

#principal{
background-image: none;
filter:
progid: DXImageTransform.Microsoft.AlphaImageLoader(src=andafter.png,sizingMethod=’scale’)
;
}

Pronto, é só você definir este filter para todos os backgrounds que vão precisar de transparência e o problema está resolvido.

Gosto da criação de uma folha de estilos para o IE para corrigir os problemas, isso facilita um monte e normalmente não tem tanta coisa como dizem por aí, ah este pessoal complica...

Qualquer dúvida é só entrar em contato pelos comentários. ;)

O que você achou do texto?

  • Muito ruim
  • Ruim
  • Regular
  • Bom
  • Muito bom
Sua opinião é o que faz a comunidade funcionar, colabore para isso!

Tags: png, transparencia, internet-explorer, desenvolvimento, background, javascript, programacao, css

Enviar para um amigo
Você pode comentar, assinar o feed, conhecer mais sobre o autor e ajudar a divulgar este artigo em sua ferramenta favorita através dos botões abaixo.
  • Rec6
  • ueba
  • linkk
  • dihitt
  • linkloko
  • websapiens
  • linkto
  • Eu curti

Comentários

j. noronha
[www]

11/12/2007 03:13:00

Ainda bem que liberaram o uso do IE 7 para os piratas da vida, acho que logo, logo essa praga virtual tende a sumir da nossa vida.

[Responder este comentário]

Guilherme Serrano

11/12/2007 13:23:00

Eu ainda não sei se isso é bom ou se é ruim Noronha... haha

Tinha uma certa esperança de que a proibição fosse causar uma imigração maior para o FF - e acho que realmente isso aconteceu, por isso a liberação. 

Mas parece que mesmo com a liberaçãopara os piratas os números de adeptos do IE 7 não cresceram.



[Responder este comentário]

Chris Benseler

6/7/2008 12:48:00

Bacana que essas bibliotecas javascript novas como a Prototype e a jQuery, possuem rotinas que facilitam esse trabalho!

[Responder este comentário]

cefas

24/9/2008 17:28:00

Cara, otima dica!!! apesar do ie 7 jah estar no merdaco.. muitos usuarios ainda utilizam a porcaria do 6 (rsrs)
seu codigo tah massa, funcionando perfect, mas nao estou conseguindo colocar nos backgrounds!!!!

abraço

[Responder este comentário]

Guilherme Serrano

25/9/2008 09:07:00

Opa, valeu cefas!

Você adicionou manualmente no CSS do background a linha do "progid" para o brackground que deveria ter a transparência?

Dá uma conferida do caminho, a parte
"AlphaImageLoader(src=andafter.png" o src que voc~e colocou está relativo ao CSS ou ao arquivo? Se não me engano o caminho tem que ser relativo ao arquivo, e não ao CSS.... isso é chato porque arquivos em diferentes caminhos recebem diferentes valores.

Hoje acho que eu procuraria uma solução em alguma biblioteca de JScript como o Chris sugeriu... ;)

Abraço!

Deixe seu comentário!

Nome (requerido)

E-mail (requerido - não será divulgado)

URL

Quanto é 2 + 0?




web tracker