如何在页面中使用透明图片和透明背景图片(附demo下载)

<p class="descriptionArea">
本文将讲解和讨论:<strong>如何在页面中使用透明图片效果</strong>的几种方法和实现,以及他们的优缺点。
</p>
<h2>从一个广告位讲起</h2>
<div class="floatRPic">
<img alt="图片透明" src="http://images.cnblogs.com/cnblogs_com/justinyoung/2008_3q/toumingLogo.gif"><h6>透明图片</h6>
</div>
<p>虽然有种很对不起大家的感觉,但是依然在博客的导航栏顶端放置了一个广告位。为了不使那些讨厌的广告破坏了整体的博客风格,我使用了一个巧妙的广告位外壳——一个小女孩在一块画布上画画的样子。这样无论广告位中的广告多么令人恶心和讨厌,也都在浏览者可承受的范围之内。因为一块画布上,那个小女孩应该想画什么都可以吧。</p>
<p>为了达到效果,我需要一个背景透明的小女孩站浮在广告之上,这样看上去广告外壳便能更好的与广告融合在一起。于是这里牵扯到了一个问题:如何在网页上使用透明图片?</p>
<h2>jpg——靠边站</h2>
<p>让我们先来说说在网页上经常使用的图片格式——gif、jpg(jpeg)、png,当然用flash也能达到展现图片的效果。至于什么其他的bmp等等,估计没有几个人会用在网页上,所以不在本文的讨论范围之内。</p>
<p>事实证明:gif、png和flash文件在网页上都可以表现出透明效果。而jpg却是无论如何都无法在网页中表现出透明效果(至少我不会,呵呵~)。所以,在本文中,我们只能对jpg图片文件说:“对不起,请您老人家靠边站!”</p>
<div class="floatMPic">
<img alt="jpg图片透明" src="http://justinyoung.cnblogs.com/images/cnblogs_com/justinyoung/2008_3q/touming02.gif"><h6>jpg无法在在网页中表现出透明效果</h6>
</div>
<p>注:其实背景透明的图片,在保持为jpg文件的时候就已经有了背景颜色,而不是在浏览器对jpg文件渲染的时候出现了什么问题。所以,在网页上使用背景透明的jpg基本上是不太可能了。</p>
<p>所以,要想使用背景透明的图片,只能寄希望在gif和png,以及flash上面了。</p>
<h2>gif——宝刀有刺</h2>
<p>在IE6一家独大、flash还没有大行其道的年代里,要想使用背景透明的图片效果,gif几乎是唯一的选择。即便是现在,使用gif达到透明效果,如果在要求不是很高的前提下,依然是个不错的选择。原因很简单——简单、方便。</p>
<p>但是,gif透明背景图片也有个致命的缺点——图片边框有<del>白色的</del>(谢谢10楼zjfeiye的补充)“毛刺”。所以如果你的图片所在的网页区域,网页背景颜色不是白色的话,那就会非常“惨不忍睹”。</p>
<div class="floatMPic">
<img alt="gif图片透明" src="http://justinyoung.cnblogs.com/images/cnblogs_com/justinyoung/2008_3q/touming03.gif"><h6>gif背景透明的图片虽然能达到透明效果,但是效果不理想</h6>
</div>
<h2>png——新生力量</h2>
<p> 作为新生力量的png图片格式,背景透明这样的小把戏,自然不再话下。所以在IE7以上的IE浏览器中,以及FireFox、Opera、Safari浏览器都能出色的完成任务,谷歌浏览器中,自然也是没有任何问题。可问题就在IE6浏览器中,在IE6这群遗老遗少中,完全不买png的帐,无论你是怎么的好,怎么的强,在我IE6里,就是不行。所以——png背景透明的图片,在IE6会失去透明背景,而已非常丑陋的一陀灰色代替。</p>
<div class="floatMPic">
<img alt="png图片透明" src="http://justinyoung.cnblogs.com/images/cnblogs_com/justinyoung/2008_3q/touming04.gif"><h6>对于PNG透明背景图片,IE6浏览器完全不买账</h6>
</div>
<h2>flash——难说爱你</h2>
<p> 对于用flash来实现图片背景透明效果,虽然浏览器的兼容性上没有什么问题。但是flash的缺点也是一大把——先不说需要装插件,就算是维护和修改成本也的让人衡量一下。当然,如果你们手头有flash的大量资源,这也自当别论。所以这里flash不做重点讨论。只给一段代码,作用是设置flash透明背景——</p>
<div class="csharpcode-wrapper">
<div class="csharpcode">
<pre class="alt"><span class="kwrd"><</span><span class="html">OBJECT</span> <span class="attr">classid</span><span class="kwrd">="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"</span></pre>
<pre class="alteven"><span class="attr">codebase</span><span class="kwrd">="http://download.macromedia.com/pub/shockwave/cabs/flash</span></pre>
<pre class="alt">/swflash.cab#version=5,0,0,0"</pre>
<pre class="alteven"><span class="attr">WIDTH</span>=<span class="attr">550</span> <span class="attr">HEIGHT</span>=<span class="attr">400</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="kwrd"><</span><span class="html">PARAM</span> <span class="attr">NAME</span>=<span class="attr">movie</span> <span class="attr">value</span><span class="kwrd">="flashName.swf"</span><span class="kwrd">></span></pre>
<pre class="alteven"><span class="kwrd"><</span><span class="html">PARAM</span> <span class="attr">NAME</span>=<span class="attr">quality</span> <span class="attr">value</span>=<span class="attr">high</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="kwrd"><</span><span class="html">PARAM</span> <span class="attr">NAME</span>=<span class="attr">wmode</span> <span class="attr">value</span>=<span class="attr">transparent</span><span class="kwrd">></span></pre>
<pre class="alteven"><span class="kwrd"><</span><span class="html">PARAM</span> <span class="attr">NAME</span>=<span class="attr">bgcolor</span> <span class="attr">value</span>=#<span class="attr">FFFFFF</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="kwrd"><</span><span class="html">EMBED</span> <span class="attr">src</span><span class="kwrd">="flashName.swf"</span> <span class="attr">quality</span>=<span class="attr">high</span> <span class="attr">wmode</span>=<span class="attr">transparent</span> <span class="attr">bgcolor</span>=#<span class="attr">FFFFFF</span> <span class="attr">WIDTH</span>=<span class="attr">550</span> <span class="attr">HEIGHT</span>=<span class="attr">400</span> <span class="attr">TYPE</span><span class="kwrd">="application/x-shockwave-flash"</span> <span class="attr">PLUGINSPAGE</span><span class="kwrd">="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version</span></pre>
<pre class="alteven">=ShockwaveFlash"<span class="kwrd">></</span><span class="html">EMBED</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="kwrd"></</span><span class="html">OBJECT</span><span class="kwrd">></span></pre>
</div>
</div>
<h2>先小结一下</h2>
<p>一种能达到图片背景透明的图片格式我们大致讲解了一下。现在我们来小结一下——</p>
<p>如果你要使用背景透明图片的地方,正巧是网页中的地方背景颜色是白色的,或者你不介意那些小小的“毛刺”的话,纳闷完全可以使用gif背景透明图片。</p>
<p>如果,你能保证你的用户,根本不会使用那些老掉牙的IE6一下版本的浏览器的话,那么你完全可以选用png背景透明图片。</p>
<p>如果,你能保证你的用户,浏览器都安装了flash显示插件,并且手头有大量的会flash的人力资源来制作和维护flash图片的话,那么你可以使用flash背景透明图片。</p>
<p>如果,恰巧上面的三种情况,都不适合你的话,那么恐怕你需要继续向下阅读了。</p>
<h2>中级解决方案</h2>
<p>想想一下:如果我们在IE6中使用gif,而在IE7或者其他浏览器中使用png。那么,就可以达到在任何浏览器下都是透明,而在IE6中“稍有毛刺”这样的较为理想的效果。</p>
<p>这时我们想到了css hack。在要显示图片的地方,我们不使用img标签,而使用div,然后对div设置背景图片,然后大小设置和图片一样大小。这样,我们就可以使用css hack了。方法也很简单——</p>
<div class="csharpcode-wrapper">
<div class="csharpcode">
<pre class="alt"><span class="kwrd"><!</span><span class="html">DOCTYPE</span> <span class="attr">html</span> <span class="attr">public</span> <span class="kwrd">"-//W3C//DTD XHTML 1.0 Transitional//EN"</span> <span class="kwrd">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span class="kwrd">></span></pre>
<pre class="alteven"><span class="kwrd"><</span><span class="html">html</span> <span class="attr">xmlns</span><span class="kwrd">="http://www.w3.org/1999/xhtml"</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="kwrd"><</span><span class="html">head</span><span class="kwrd">></span></pre>
<pre class="alteven"> <span class="kwrd"><</span><span class="html">meta</span> <span class="attr">http-equiv</span><span class="kwrd">="Content-Type"</span> <span class="attr">content</span><span class="kwrd">="text/html; charset=utf-8"</span> <span class="kwrd">/></span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">meta</span> <span class="attr">name</span><span class="kwrd">="Keywords"</span> <span class="attr">content</span><span class="kwrd">="YES!B/S!,web标准,杨正祎,博客园,实例代码"</span> <span class="kwrd">/></span></pre>
<pre class="alteven"> <span class="kwrd"><</span><span class="html">meta</span> <span class="attr">name</span><span class="kwrd">="Description"</span> <span class="attr">content</span><span class="kwrd">="这是一个简单YES!B/S!文章示例页面,来自杨正祎的博客,http: //justinyoung.cnblogs.com/"</span> <span class="kwrd">/></span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">title</span><span class="kwrd">></span>YES!B/S!文章示例页面<span class="kwrd"></</span><span class="html">title</span><span class="kwrd">></span></pre>
<pre class="alteven"><span class="kwrd"><</span><span class="html">style</span> <span class="attr">type</span><span class="kwrd">="text/css"</span><span class="kwrd">></span></pre>
<pre class="alt">#testDiv{</pre>
<pre class="alteven"> width:100px;</pre>
<pre class="alt"> height:100px;</pre>
<pre class="alteven"> background:transparent url('png.png') no-repeat;</pre>
<pre class="alt"> _background:transparent url('gif.gif') no-repeat; /*** IE6 css hack ***/</pre>
<pre class="alteven">}</pre>
<pre class="alt"><span class="kwrd"></</span><span class="html">style</span><span class="kwrd">></span></pre>
<pre class="alteven"><span class="kwrd"></</span><span class="html">head</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="kwrd"><</span><span class="html">body</span><span class="kwrd">></span></pre>
<pre class="alteven"><span class="kwrd"><</span><span class="html">div</span> <span class="attr">id</span><span class="kwrd">="testDiv"</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="kwrd"></</span><span class="html">div</span><span class="kwrd">></span></pre>
<pre class="alteven"><span class="kwrd"></</span><span class="html">body</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="kwrd"></</span><span class="html">html</span><span class="kwrd">></span></pre>
</div>
</div>
<p>当然,这个方法也有缺点——需要维护gif和png两个版本的图片。</p>
<p> 至于css hack的相关知识,有兴趣的朋友可以看这篇文章——<a target="_blank" href="http://www.cnblogs.com/justinyoung/articles/892414.html" title="CSS Hack">《实例讲解符合中国特色的和网络现状的实用CSS Hack(附源码)》</a>和<a target="_blank" href="http://www.cnblogs.com/JustinYoung/articles/891782.html" title="CSS hack浏览器兼容一览表">《CSS hack浏览器兼容一览表》</a></p>
<h2>终极解决方案</h2>
<p>如果你洁癖到连IE6中的那些“毛刺”也无法忍受的话。那我们只能拿出终极解决方案了——其实,我们可以通过一些技巧,让IE6也能支持背景透明的PNG图片。这样,png背景透明的唯一缺点——不支持IE6也便克服了。</p>
<p> 还记得我博客中的<a href="http://www.cnblogs.com/JustinYoung/archive/2008/07/21/expression-behavior-in-CSS.html" title="expression和behavior">《实例讲解css中的行为:expression和behavior(附DEMO下载)》</a>这篇文章吗?当时被某高人大骂骗子和忽悠的一篇文章。其实之所以写那篇文章,也是为现在的这里埋下伏笔而已。因为,这个是 IE6支持PNG背景透明的技巧正是使用了那篇文章介绍的一些技术——behavior。下面是一些核心代码,如果你发现看不懂,也完全没有关系。因为,我们只要会使用即可——</p>
<div class="csharpcode-wrapper">
<div class="csharpcode">
<pre class="alt"><<span class="kwrd">public</span>:component></pre>
<pre class="alteven"><<span class="kwrd">public</span>:attach <span class="kwrd">event</span>=<span class="str">"oncontentready"</span></pre>
<pre class="alt"> onevent=<span class="str">"IEPNGFix.process(element, 1)"</span> /></pre>
<pre class="alteven"><script type=<span class="str">"text/javascript"</span>></pre>
<pre class="alt"><span class="rem">// IE5.5+ PNG Alpha Fix v2.0 Alpha 2</span></pre>
<pre class="alteven"><span class="rem">// (c) 2004-2008 Angus Turnbull http://www.twinhelix.com</span></pre>
<pre class="alt"><span class="rem">// This is licensed under the GNU LGPL, version 2.1 or later.</span></pre>
<pre class="alteven"><span class="rem">// For details, see: http://creativecommons.org/licenses/LGPL/2.1/</span></pre>
<pre class="alt"><span class="kwrd">if</span> (!window.IEPNGFix) {</pre>
<pre class="alteven"> window.IEPNGFix = {};</pre>
<pre class="alt">}</pre>
<pre class="alteven"><span class="rem">// This must be a path to a blank image, relative to the HTML document(s).</span></pre>
<pre class="alt"><span class="rem">// In production use I suggest '/images/blank.gif' or similar. That's all!</span></pre>
<pre class="alteven">IEPNGFix.blankImg = <span class="str">'blank.gif'</span>;</pre>
<pre class="alt"><span class="kwrd">if</span> (!IEPNGFix.data) {</pre>
<pre class="alteven"> IEPNGFix.data = {};</pre>
<pre class="alt">}</pre>
<pre class="alteven">IEPNGFix.fix = <span class="kwrd">function</span>(elm, src, t) {</pre>
<pre class="alt"> <span class="rem">// Applies an image 'src' to an element 'elm' using the DirectX filter.</span></pre>
<pre class="alteven"> <span class="rem">// If 'src' is null, filter is disabled.</span></pre>
<pre class="alt"> <span class="rem">// Disables the 'hook' to prevent infinite recursion on setting BG/src.</span></pre>
<pre class="alteven"> <span class="rem">// 't' = type, where background tile = 0, background = 1, IMG SRC = 2.</span></pre>
<pre class="alt"> <span class="kwrd">var</span> h = <span class="kwrd">this</span>.hook.enabled;</pre>
<pre class="alteven"> <span class="kwrd">this</span>.hook.enabled = 0;</pre>
<pre class="alt"> <span class="kwrd">var</span> f = <span class="str">'DXImageTransform.Microsoft.AlphaImageLoader'</span>;</pre>
<pre class="alteven"> src = (src || <span class="str">''</span>).replace(/\(/g, <span class="str">'%28'</span>).replace(/\)/g, <span class="str">'%29'</span>);</pre>
<pre class="alt"> <span class="kwrd">if</span> (</pre>
<pre class="alteven"> src && !(/IMG|INPUT/.test(elm.nodeName) && (t != 2)) &&</pre>
<pre class="alt"> elm.currentStyle.width == <span class="str">'auto'</span> && elm.currentStyle.height == <span class="str">'auto'</span></pre>
<pre class="alteven"> ) {</pre>
<pre class="alt"> elm.style.width = elm.offsetWidth + <span class="str">'px'</span>;</pre>
<pre class="alteven"> elm.style.height = elm.clientHeight + <span class="str">'px'</span>;</pre>
<pre class="alt"> <span class="kwrd">if</span> (elm.currentStyle.display == <span class="str">'inline'</span>) {</pre>
<pre class="alteven"> elm.style.display = <span class="str">'inline-block'</span>;</pre>
<pre class="alt"> }</pre>
<pre class="alteven"> }</pre>
<pre class="alt"> <span class="kwrd">if</span> (t == 1) {</pre>
<pre class="alteven"> elm.style.backgroundImage = <span class="str">'url("'</span> + <span class="kwrd">this</span>.blankImg + <span class="str">'")'</span>;</pre>
<pre class="alt"> }</pre>
<pre class="alteven"> <span class="kwrd">if</span> (t == 2) {</pre>
<pre class="alt"> elm.src = <span class="kwrd">this</span>.blankImg;</pre>
<pre class="alteven"> }</pre>
<pre class="alt"> <span class="kwrd">if</span> (elm.filters[f]) {</pre>
<pre class="alteven"> elm.filters[f].enabled = src ? <span class="kwrd">true</span> : <span class="kwrd">false</span>;</pre>
<pre class="alt"> <span class="kwrd">if</span> (src) {</pre>
<pre class="alteven"> elm.filters[f].src = src;</pre>
<pre class="alt"> }</pre>
<pre class="alteven"> } <span class="kwrd">else</span> <span class="kwrd">if</span> (src) {</pre>
<pre class="alt"> elm.style.filter = <span class="str">'progid:'</span> + f + <span class="str">'(src="'</span> + src +</pre>
<pre class="alteven"> <span class="str">'",sizingMethod="crop")'</span>;</pre>
<pre class="alt"> }</pre>
<pre class="alteven"> <span class="kwrd">this</span>.hook.enabled = h;</pre>
<pre class="alt">};</pre>
<pre class="alteven">IEPNGFix.process = <span class="kwrd">function</span>(elm, init) {</pre>
<pre class="alt"> <span class="rem">// Checks the onpropertychange event (on first 'init' run, a fake event)</span></pre>
<pre class="alteven"> <span class="rem">// and calls the filter-applying-functions.</span></pre>
<pre class="alt"> <span class="kwrd">if</span> (</pre>
<pre class="alteven"> !/MSIE (5\.5|6)/.test(navigator.userAgent) ||</pre>
<pre class="alt"> <span class="kwrd">typeof</span> elm.filters == <span class="str">'unknown'</span></pre>
<pre class="alteven"> ) {</pre>
<pre class="alt"> <span class="kwrd">return</span>;</pre>
<pre class="alteven"> }</pre>
<pre class="alt"> <span class="kwrd">if</span> (!<span class="kwrd">this</span>.data[elm.uniqueID]) {</pre>
<pre class="alteven"> <span class="kwrd">this</span>.data[elm.uniqueID] = {</pre>
<pre class="alt"> className: <span class="str">''</span></pre>
<pre class="alteven"> };</pre>
<pre class="alt"> }</pre>
<pre class="alteven"> <span class="kwrd">var</span> data = <span class="kwrd">this</span>.data[elm.uniqueID],</pre>
<pre class="alt"> evt = init ? { propertyName: <span class="str">'src,backgroundImage'</span> } : <span class="kwrd">event</span>,</pre>
<pre class="alteven"> isSrc = /src/.test(evt.propertyName),</pre>
<pre class="alt"> isBg = /backgroundImage/.test(evt.propertyName),</pre>
<pre class="alteven"> isPos = /background(Pos|Rep)/.test(evt.propertyName),</pre>
<pre class="alt"> isClass = !init && ((elm.className != data.className) &&</pre>
<pre class="alteven"> (elm.className || data.className));</pre>
<pre class="alt"> <span class="kwrd">if</span> (!(isSrc || isBg || isPos || isClass)) {</pre>
<pre class="alteven"> <span class="kwrd">return</span>;</pre>
<pre class="alt"> }</pre>
<pre class="alteven"> data.className = elm.className;</pre>
<pre class="alt"> <span class="kwrd">var</span> blank = <span class="kwrd">this</span>.blankImg.match(/([^\/]+)$/)[1],</pre>
<pre class="alteven"> eS = elm.style,</pre>
<pre class="alt"> eCS = elm.currentStyle;</pre>
<pre class="alteven"> <span class="rem">// Required for Whatever:hover - erase set BG if className changes.</span></pre>
<pre class="alt"> <span class="kwrd">if</span> (</pre>
<pre class="alteven"> isClass && (eS.backgroundImage.indexOf(<span class="str">'url('</span>) == -1 ||</pre>
<pre class="alt"> eS.backgroundImage.indexOf(blank) > -1)</pre>
<pre class="alteven"> ) {</pre>
<pre class="alt"> <span class="kwrd">return</span> setTimeout(<span class="kwrd">function</span>() {</pre>
<pre class="alteven"> eS.backgroundImage = <span class="str">''</span>;</pre>
<pre class="alt"> }, 0);</pre>
<pre class="alteven"> }</pre>
<pre class="alt"> <span class="rem">// Foregrounds.</span></pre>
<pre class="alteven"> <span class="kwrd">if</span> (isSrc && elm.src && { IMG: 1, INPUT: 1 }[elm.nodeName]) {</pre>
<pre class="alt"> <span class="kwrd">if</span> ((/\.png/i).test(elm.src)) {</pre>
<pre class="alteven"> <span class="kwrd">this</span>.fix(elm, elm.src, 2);</pre>
<pre class="alt"> } <span class="kwrd">else</span> <span class="kwrd">if</span> (elm.src.indexOf(blank) == -1) {</pre>
<pre class="alteven"> <span class="kwrd">this</span>.fix(elm, <span class="str">''</span>);</pre>
<pre class="alt"> }</pre>
<pre class="alteven"> }</pre>
<pre class="alt"> <span class="rem">// Backgrounds.</span></pre>
<pre class="alteven"> <span class="kwrd">var</span> bgSrc = eCS.backgroundImage || eS.backgroundImage;</pre>
<pre class="alt"> <span class="kwrd">if</span> ((bgSrc + elm.src).indexOf(blank) == -1) {</pre>
<pre class="alteven"> <span class="kwrd">var</span> bgPNG = bgSrc.match(/url[(<span class="str">"']+(.*\.png[^\)"</span><span class="str">']*)[\)"'</span>]/i);</pre>
<pre class="alt"> <span class="kwrd">if</span> (bgPNG) {</pre>
<pre class="alteven"> <span class="kwrd">if</span> (<span class="kwrd">this</span>.tileBG && !{ IMG: 1, INPUT: 1 }[elm.nodeName]) {</pre>
<pre class="alt"> <span class="kwrd">this</span>.tileBG(elm, bgPNG[1]);</pre>
<pre class="alteven"> <span class="kwrd">this</span>.fix(elm, <span class="str">''</span>, 1);</pre>
<pre class="alt"> } <span class="kwrd">else</span> {</pre>
<pre class="alteven"> <span class="kwrd">if</span> (data.tiles && data.tiles.src) {</pre>
<pre class="alt"> <span class="kwrd">this</span>.tileBG(elm, <span class="str">''</span>);</pre>
<pre class="alteven"> }</pre>
<pre class="alt"> <span class="kwrd">this</span>.fix(elm, bgPNG[1], 1);</pre>
<pre class="alteven"> <span class="kwrd">this</span>.childFix(elm);</pre>
<pre class="alt"> }</pre>
<pre class="alteven"> } <span class="kwrd">else</span> {</pre>
<pre class="alt"> <span class="kwrd">if</span> (data.tiles && data.tiles.src) {</pre>
<pre class="alteven"> <span class="kwrd">this</span>.tileBG(elm, <span class="str">''</span>);</pre>
<pre class="alt"> }</pre>
<pre class="alteven"> <span class="kwrd">this</span>.fix(elm, <span class="str">''</span>);</pre>
<pre class="alt"> }</pre>
<pre class="alteven"> } <span class="kwrd">else</span> <span class="kwrd">if</span> ((isPos || isClass) && data.tiles && data.tiles.src) {</pre>
<pre class="alt"> <span class="kwrd">this</span>.tileBG(elm, data.tiles.src);</pre>
<pre class="alteven"> }</pre>
<pre class="alt"> <span class="kwrd">if</span> (init) {</pre>
<pre class="alteven"> <span class="kwrd">this</span>.hook.enabled = 1;</pre>
<pre class="alt"> elm.attachEvent(<span class="str">'onpropertychange'</span>, <span class="kwrd">this</span>.hook);</pre>
<pre class="alteven"> }</pre>
<pre class="alt">};</pre>
<pre class="alteven">IEPNGFix.childFix = <span class="kwrd">function</span>(elm) {</pre>
<pre class="alt"> <span class="rem">// "hasLayout" fix for unclickable children inside PNG backgrounds.</span></pre>
<pre class="alteven"> <span class="kwrd">var</span> tags = [</pre>
<pre class="alt"> <span class="str">'a'</span>,</pre>
<pre class="alteven"> <span class="str">'input'</span>,</pre>
<pre class="alt"> <span class="str">'select'</span>,</pre>
<pre class="alteven"> <span class="str">'textarea'</span>,</pre>
<pre class="alt"> <span class="str">'button'</span>,</pre>
<pre class="alteven"> <span class="str">'iframe'</span>,</pre>
<pre class="alt"> <span class="str">'object'</span></pre>
<pre class="alteven"> ],</pre>
<pre class="alt"> t = tags.length,</pre>
<pre class="alteven"> tFix = [];</pre>
<pre class="alt"> <span class="kwrd">while</span> (t--) {</pre>
<pre class="alteven"> <span class="kwrd">var</span> pFix = elm.all.tags(tags[t]),</pre>
<pre class="alt"> e = pFix.length;</pre>
<pre class="alteven"> <span class="kwrd">while</span> (e--) {</pre>
<pre class="alt"> tFix.push(pFix[e]);</pre>
<pre class="alteven"> }</pre>
<pre class="alt"> }</pre>
<pre class="alteven"> t = tFix.length;</pre>
<pre class="alt"> <span class="kwrd">if</span> (t && (/relative|absolute/i).test(elm.currentStyle.position)) {</pre>
<pre class="alteven"> alert(<span class="str">'IEPNGFix: Unclickable children of element:'</span> +</pre>
<pre class="alt"> <span class="str">'\n\n<'</span> + elm.nodeName + (id && <span class="str">' id='</span> + id) + <span class="str">'>'</span>);</pre>
<pre class="alteven"> }</pre>
<pre class="alt"> <span class="kwrd">while</span> (t--) {</pre>
<pre class="alteven"> <span class="kwrd">if</span> (!(/relative|absolute/i).test(tFix[t].currentStyle.position)) {</pre>
<pre class="alt"> tFix[t].style.position = <span class="str">'relative'</span>;</pre>
<pre class="alteven"> }</pre>
<pre class="alt"> }</pre>
<pre class="alteven">};</pre>
<pre class="alt">IEPNGFix.hook = <span class="kwrd">function</span>() {</pre>
<pre class="alteven"> <span class="kwrd">if</span> (IEPNGFix.hook.enabled) {</pre>
<pre class="alt"> IEPNGFix.process(element, 0);</pre>
<pre class="alteven"> }</pre>
<pre class="alt">};</pre>
<pre class="alteven"></script></pre>
<pre class="alt"></<span class="kwrd">public</span>:component></pre>
</div>
</div>
<h2>如何使用</h2>
<p>如果代码看不懂,没有关系,我们下面来告诉你如何使用(其实代码也不难看懂,只是判断一些情况,然后使用透明滤镜而已)。我们强烈建议你下载这个<a href="http://files.cnblogs.com/JustinYoung/PNGinIE6.rar" title="打包好的demo">打包好的demo</a>,这样只需要看看demo即可明白。使用办法可以简化为以下三步——</p>
<ul style="margin: 15px 2px 15px 25px;">
<li style="">第一步:拷贝“iepngfix.htc”和“blank.gif”文件到你的项目中</li>
<li style="">第二步:通过适当的选择器,让需要在IE6透明的图片或者需要背景图片透明的容器使用上“behavior: url("iepngfix.htc");”</li>
<li style="">第三步:如果你需要容器的背景图片有透明效果,你还需要在页面中引入iepngfix_tilebg.js脚本(当然,如果你不要使用容器的透明背景图片效果,也可以不引入此js文件) </li>
</ul>
<div class="floatMPic">
<img alt="ie6png" src="http://justinyoung.cnblogs.com/images/cnblogs_com/justinyoung/2008_3q/touming05.gif"><h6>在IE6中png图片和背景图片也能透明了</h6>
</div>
<p>当然,整个解决方案也有其缺点——需要多引用1-2个文件(iepngfix.htc和iepngfix_tilebg.js文件)。所以,最终使用何种方案还需要根据自己的要求而定。</p>
<div class="downloadList">
<h3>相关资源列表</h3>
<ul class="uldownloadList">
<li>
<a href="http://www.cnblogs.com/JustinYoung/archive/2008/07/21/expression-behavior-in-CSS.html" title="实例讲解css中的行为:expression和behavior" target="_blank">实例讲解css中的行为:expression和behavior(附DEMO下载)</a>
</li>
<li class="evenLi"><a target="_blank" href="http://www.twinhelix.com/css/iepngfix/" title="IE6PNG透明效果解决方案">IE6PNG透明效果解决方案</a></li>
<li><a target="_blank" href="http://downloads.cnblogs.com/justinyoung/share/pnginie6/pnginie6.html" title="IE6PNG透明效果解决方案Demo">IE6PNG透明效果解决方案Demo</a></li>
<li class="evenLi"><a target="_blank" href="http://www.cnblogs.com/justinyoung/articles/892414.html" title="CSS Hack">《实例讲解符合中国特色的和网络现状的实用CSS Hack(附源码)》</a></li>
<li><a target="_blank" href="http://www.cnblogs.com/JustinYoung/articles/891782.html" title="CSS hack浏览器兼容一览表">《CSS hack浏览器兼容一览表》</a></li>
<li class="evenLi"> <a href="http://files.cnblogs.com/JustinYoung/PNGinIE6.rar" title="打包好的demo">打包好的demo</a>
</li>
</ul>
</div>
<!--end: downloadList-->
<br><center>

alimama_pid="mm_10056409_242955_3624216";
alimama_titlecolor="0000FF";
alimama_descolor ="000000";
alimama_bgcolor="FFFFFF";
alimama_bordercolor="E6E6E6";
alimama_linkcolor="008000";
alimama_bottomcolor="FFFFFF";
alimama_anglesize="0";
alimama_bgpic="0";
alimama_icon="0";
alimama_sizecode="16";
alimama_width=658;
alimama_height=60;
alimama_type=2;


</center>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值