校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Cross-Browser Variable Opacity with PNG

Cross-Browser Variable Opacity with PNG

熱門標簽:蘇州通信外呼系統(tǒng)多少錢 荒野大鏢客2地圖標注怎么變中文 移動400辦理電話 山西旅游景地圖標注 上古卷軸5地圖標注mod 武漢人工外呼系統(tǒng) 中國地圖標注各省份 沈陽智能外呼系統(tǒng)排名 北川縣地圖標注

Periodically, someone tells me about the magic of PNG, how it's the ideal image format for the web, and that someday we'll all be using it on our sites instead of GIF. People have been saying this for years, and by now most of us have stopped listening. Sadly, flaky browser support has made PNG impractical for almost everything; but now, with a few simple workarounds, we can finally put one of its most compelling features to use.

PNG? What?

The Portable Network Graphics, or PNG (pronounced “ping”), image format has been around since 1995, having cropped up during the now long-forgotten GIF scare, when Compuserve and Unisys announced they would begin charging royalties for the use of the GIF image format.

To provide GIF support in their applications, software makers like Adobe and Macromedia must pay royalty fees – fees which are passed down to the end user in the selling cost of the software.

When PNG appeared on the scene, web designers were ready to make the switch to the free, superior format and shun GIF forever. But over time, browsers continually failed to support PNG, and eventually most people started to forget about it. Today, nearly everyone still uses GIF habitually.

Which is a shame, because PNG makes GIF look pretty pathetic: it supports gamma correction, (sometimes) smaller file sizes, loss-less compression, up to 48-bit color, and, best of all, true alpha transparency.

To get why alpha transparency is a big deal, we must first understand one of the most annoying limitations of GIF.

Binary Transparency: the Scourge of GIF

When it comes to transparency, GIF doesn't cut it. Whereas PNG supports alpha transparency, GIF only supports binary transparency, which is a big limitation and has a couple of important implications.

For one, a GIF image can either use no transparent colors at all or have one color that's completely transparent – there are no degrees of transparency.

And if a complex GIF does contain a transparent color, the background color of the web page must match the transparent color, or else the anti-aliased area around the transparent color will be surrounded by ugly haloing and fringing. If you've spent more than five minutes as a web designer, you know what I'm talking about.

The result is that any anti-aliased transparent GIF is inextricably tied to the background color of the web page on which it lives. If you ever decide to change that color, you must also change the GIF.

Miraculously, PNG doesn't behave that way. A PNG can be transparent in varying degrees – in other words, it can be of variable opacity. And a transparent PNG is background-independent: it can live on any background color or image. Say you want your navigation on monkeys-run-amuck.com to be 65% opaque so you can see through it to your orangutan background image. You can do that. A transparent anti-aliased “Gorillas, Chimps, Gibbons, et al” title that can sit on top of any background color or image? You can do that, too.

So What About Browser Support?

By now, of course, we'd all be up to our ears in PNGs if browsers supported them reliably. But seven years after the format's inception, you still can't slap a PNG onto a web page like you can a GIF or JPG. It's disgraceful, but not as bad as it sounds.

It turns out that most of the latest versions of the major browsers fully support alpha transparency with PNG – namely, Netscape 6, Opera 6, and recently-released Mozilla 1, all on Windows; and, for the Mac, Internet Explorer 5, Netscape 6, Opera 5, Mozilla 1, OmniWeb 3.1, and ICab 1.9. Incredibly, PNG even works on Opera 6 for Linux, on WebTV, and on Sega Dreamcast.

Now, what's missing from that list?

IE5.5+/Win, bless its heart, will, in fact, display a PNG, but it doesn't natively support alpha transparency. In IE5.5+/Win, the transparent area of your PNG will display at 100% opacity – that is, it won't be transparent at all.

Bugger. So what do we do now?

Proprietary Code-o-Rama: the AlphaImageLoader Filter

IE4+/Win supports a variety of non-standard, largely ridiculous visual filters that you can apply to any image's style. You can, for instance, fade in an image with a gradient wipe, or make it stretch from nothing to full size, or even make it swipe into place circularly, like a scene change in Star Wars.

A non-pointless gem among these is the AlphaImageLoader filter, which is supported in IE5.5+/Win. When used to display a PNG, it allows for full alpha transparency support. All you have to do is this:

DIV ID="myDiv" 
	STYLE="position:relative; 
	height:250px; 
	width:250px;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader»
(src='myimage.png',sizingMethod='scale');">/DIV>

(Line wraps are marked ». –Ed.)

And you're in business. Perfect alpha transparency. This code works great, with only the small drawback that it's not part of any accepted web standard, and no other browser on the planet understands it.

Serving up PNGs with JavaScript

So the trick is to determine the user's browser and serve up the images appropriately: if IE5.5+/Win, then we use AlphaImageLoader; if a browser with native PNG support, then we display PNGs the normal way; if anything else, then we display alternate GIFs, because we can't be sure that a PNG will display correctly or at all.

Using a slightly tweaked version of Chris Nott's Browser Detect Lite, we set some global variables to this effect that we can use later on.

// if IE5.5+ on Win32, then display PNGs with AlphaImageLoader
if ((browser.isIE55 || browser.isIE6up)  browser.isWin32) {
	var pngAlpha = true;
// else, if the browser can display PNGs normally, then do that
} else if ((browser.isGecko) |»
| (browser.isIE5up  browser.isMac) |»
| (browser.isOpera  browser.isWin »
	 browser.versionMajor >= 6) |»
| (browser.isOpera  browser.isUnix »
 browser.versionMajor >= 6) |»
| (browser.isOpera  browser.isMac »
	 browser.versionMajor >= 5) |»
| (browser.isOmniweb  »
	browser.versionMinor >= 3.1) |»
| (browser.isIcab  »
	browser.versionMinor >= 1.9) |»
| (browser.isWebtv) |»
| (browser.isDreamcast)) {
	var pngNormal = true;
}

(Note for the faint of heart: complete source code for all the examples we cover is available at the end of the article.)

Tactic 1: Quick and Dirty with document.writes

The simplest, most reliable way to spit out PNGs is using inline document.writes based on the above detection. So we use a function like this:

function od_displayImage(strId, strPath, intWidth, »
	intHeight, strClass, strAlt) {	
 if (pngAlpha) {
 document.write('div style="height:'+intHeight+'px;»
		width:'+intWidth+'px;»
 filter:progid:DXImageTransform.Microsoft.AlphaImageLoader»
 (src=\''+strPath+'.png', sizingMethod=\'scale')" »
	id="'+strId+'" class="'+strClass+'">/div>');
	} else if (pngNormal) {
 document.write('img src="'+strPath+'.png" »
	width="'+intWidth+'"»
 height="'+intHeight+'" name="'+strId+'" »
	border="0" class="'+strClass+'" alt="'+strAlt+'" />');
	} else {
 document.write('img src="'+strPath+'.gif" »
	width="'+intWidth+'"»
 height="'+intHeight+'" name="'+strId+'" »
	border="0" class="'+strClass+'" alt="'+strAlt+'" />');
	}
}

Now we can call the od_displayImage function from anywhere on the page. Any JavaScript-capable browser will display an image, and, if we want to be really careful, we can accompany each call with a noscript> tag that contains a regular img> reference. So the respectable browsers get PNGs normally, IE5.5+/Win gets them with the filter, and all other browsers get regular GIFs, whether they have JavaScript turned on or not.

It's a time-tested method, but what if we want more control over our PNGs?

Tactic 2: the Beauty Majesty of Objects

When I told the programmer in the office next door that I was writing this article, he took one look at my code, glowered at me, and said, “Fool. Where's the abstraction? You need to use objects.”

So now we have a JavaScript object to display PNGs. Here's how we use it:

html>head>
script language="javascript" 
 src="browserdetect_lite.js" 
 type="text/javascript">
/script>
script language="javascript" 
src="opacity.js" 
type="text/javascript">/script>
script type="text/javascript">
var objMyImg = null;
function init() {
	objMyImg = new OpacityObject('myimg','/images/myimage');
	objMyImg.setBackground();
}
/script>

style type="text/css">

#myimg { 
 background: url('back.png') 
 repeat; position:absolute; 
 left: 10px; top: 10px; 
 width: 200px; 
 height: 200px;
 }

/style>

/head>


body onload="init()" background="back.jpg">

div id="myimg">/div>
/body>
/html>

That's it. The cool thing about the OpacityObject is that we just pass it a DIV ID and an image path and we're done. Using the appropriate technique, it applies the image as a background of the DIV, and from there we can do whatever we want with it. Fill it with text, move it across the screen, resize it dynamically, whatever – just like any other DIV.

The object works in any CSS 1-capable browser that can dynamically apply a background image to a DIV with JavaScript. It's completely flexible, and we could even use it in place of the above function.

The trade-off is that it doesn't degrade as nicely. Netscape 4.7/Win/Mac and Opera 5/Mac, for instance, won't display an image at all. And it has another significant problem, which is this:

IE5/Mac only supports alpha transparency when the PNG resides in an img> tag, not when it's set as the background property of a DIV. So PNGs displayed with the OpacityObject will appear 100% opaque in IE5/Mac. This problem is especially frustrating because IE5/Mac is the only browser which natively supports PNG and behaves this way. We've notified Microsoft about this apparent bug and hope for it to be fixed in an upcoming release.

But for now, these issues are the trade-off for flexibility. Obviously, choose the right tactic based on the particular needs of your project. Between them both, you can do pretty much anything with PNGs – like, for instance...

Example 1: Translucent Image on a Photo

In this simple example, we see how the same 80% opaque PNG can be displayed on any kind of background: Translucent Image on a Photo.

Example 2: Anti-Aliased Translucent Navigation with Rollovers

What a beautiful thing it would be, I'm sure you've thought from time to time, to create translucent anti-aliased images that work on any background. Well, check it out: Anti-Aliased Translucent Navigation with Rollovers.

Mouse over the images, observe the behavior of the rollovers, and click “change background” to see how the images behave on different backgrounds. Then view the source. There are a few things worth noting here:

  • To preload the correct images, we create a variable called strExt, which contains either “.png” or “.gif.” As long as our PNGs and alternate GIFs use the same names except for the file extension, the browser will only preload the images that it's actually going to use.
  • We create a class called pngLink and set the cursor property to “pointer.” We pass that class name to the function when we call it, and the function applies the class to the PNG. The result is that the user's pointer turns into a cursor when he rolls over the image links, even though, in IE5.5+/Win, they're really just DIVs. (You might also want to add "display:block" or "display:inline" to your PNG class, depending on how you're using the images, to make them display correctly in Netscape 6. (For details, see Better Living Through XHTML.)
  • We also use a couple of rollover functions specifically for displaying PNGs. It turns out that, while it's possible to dynamically swap out PNGs using the AlphaImageLoader, IE5.5+/Win has a tough time of it; it's damn slow, too slow for effective rollovers. What works better is to apply a background color to the DIV that contains the PNG – the color will shine through the transparent part of the image, and do it fast, too. When we call the function, we send along the name of the image to be displayed and an HTML color – IE5.5+/Win will display the color, and the others will display the image.
  • Notice how those images even have drop shadows. You could stick any background image or color behind them and they would still look great, even if the PNGs were completely transparent. Is that cool or what?

Example 3: Floating Translucent DIV with HTML Text Inside

In the first two examples, we used the quick-and-dirty function from tactic one. Now, we want our PNG to interact with other code on the page, so this time we display it with the OpacityObject.

But remember – there are drawbacks to this approach (see above), the most heartbreaking of which is that this example doesn't work perfectly on IE5/Mac. If that causes you pain, then there's always the quick and dirty function. Otherwise, read on.

First we create a DIV, give it an ID, and assign any style properties we want to it – height, width, font family, etc.

Then we pass along the ID of that DIV when we instantiate the OpacityObject. We pass along the image path, too, and now we have a DIV with a translucent background. Cool!

Next we put some HTML text in the DIV and apply another unrelated object method to it (this object has nothing to do with the OpacityObject – it could be any code you have lying around). Now we can move the translucent DIV around the screen. Wheee! Floating Translucent DIV with HTML Text Inside.

So there's a glimpse of what's possible with the OpacityObject. You hardcore CSS/DOM folks, go nuts.

Variably Opaque-R-You

Download the source code for the object, functions, and examples we covered. All the code relies on our tweaked version of Browser Detect Lite, which is included as well. Variable Opacity Source Code.

One PNG and One PNG Only

This is all very exciting, but, as with many achievements that get web developers excited, making PNG work in today's browsers simply shouldn't be this hard. You might consider signing the petition to persuade Microsoft to provide full PNG support in Internet Explorer. With any luck, this article will soon be obsolete.

In the meantime, post any ideas for improvements to this code in the discussion forum for this article. The PNG home site, for instance, talks about a few other obscure browsers that should support alpha transparency, but that haven't been verified yet. If you can verify any of these claims, or have any other valuable input, let us know, and we'll update the code accordingly.

Resources

  • PNG Home Site
  • AlphaImageLoader Filter page on MSDN
  • PNG Behavior at WebFX, an alternate way to make PNGs display in IE. Involves using the runtimeStyle object. The downside with this approach is that it only correctly displays a PNG if it's displayed within an img> tag, not if it's a CSS background image
您可能感興趣的文章:
  • Opacity.js
  • CSS opacity - 實現(xiàn)圖片半透明效果的代碼
  • 純JS半透明Tip效果代碼
  • IE6下opacity與JQuery的奇妙結合
  • 原生js實現(xiàn)半透明遮罩層效果具體代碼
  • js+CSS實現(xiàn)彈出居中背景半透明div層的方法
  • js和jQuery設置Opacity半透明 兼容IE6

標簽:喀什 邯鄲 濱州 遼源 陽泉 南充 海東 東莞

巨人網(wǎng)絡通訊聲明:本文標題《Cross-Browser Variable Opacity with PNG》,本文關鍵詞  Cross-Browser,Variable,Opacity,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Cross-Browser Variable Opacity with PNG》相關的同類信息!
  • 本頁收集關于Cross-Browser Variable Opacity with PNG的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    一区二区免费看| 91久久一区二区| av一区二区三区| 91国产成人在线| 制服丝袜av成人在线看| 久久蜜桃av一区精品变态类天堂| 国产精品卡一卡二卡三| 午夜精品久久久久久不卡8050| 久久99久久精品欧美| 99在线热播精品免费| 欧美高清视频在线高清观看mv色露露十八 | 99re热这里只有精品视频| 精品视频全国免费看| 久久久99精品免费观看| 亚洲综合色区另类av| 国产一区啦啦啦在线观看| 91国模大尺度私拍在线视频| 欧美精品一区二区不卡 | 欧美日韩日日摸| 欧美精品一区二区三区在线播放| 一区二区在线免费| 极品瑜伽女神91| 欧美三级韩国三级日本三斤| 国产性色一区二区| 五月婷婷激情综合| a在线播放不卡| 日韩欧美不卡在线观看视频| 亚洲免费观看高清在线观看| 国产米奇在线777精品观看| 欧美特级限制片免费在线观看| 国产三级久久久| 一本大道久久a久久精二百| 日韩午夜激情视频| 一区二区三区欧美日| 国产一区二区精品久久91| 欧美美女网站色| 亚洲人成网站精品片在线观看| 精品一区二区三区在线播放| 欧美视频自拍偷拍| 亚洲男同1069视频| 国产成人在线影院| 欧美v亚洲v综合ⅴ国产v| 亚洲一区二区成人在线观看| 99久久久久免费精品国产| 精品国产成人在线影院| 丝袜国产日韩另类美女| 91福利在线免费观看| 中文字幕中文字幕在线一区| 国产乱码精品一区二区三 | 久久精品国产一区二区三| 欧美午夜在线观看| 亚洲青青青在线视频| 成人美女视频在线观看18| 久久一区二区三区四区| 另类小说色综合网站| 欧美一区二区三区视频免费| 亚洲妇女屁股眼交7| 欧美最新大片在线看| 亚洲免费观看高清在线观看| 成人黄页毛片网站| 中文字幕av一区二区三区| 国产成人精品免费在线| 国产午夜精品福利| 国产福利一区二区三区视频在线| 精品国产一区二区三区久久久蜜月 | 国产成人一级电影| 26uuu精品一区二区 | 国产精品理伦片| 日韩一区二区三区在线视频| 天天做天天摸天天爽国产一区| 欧美影视一区二区三区| 亚洲与欧洲av电影| 欧美裸体bbwbbwbbw| 日韩av一级片| 日韩一区二区三区免费观看| 麻豆成人久久精品二区三区小说| 欧美一级日韩不卡播放免费| 蜜桃视频一区二区| 久久综合九色综合97婷婷女人| 极品少妇xxxx偷拍精品少妇| 久久久久久久免费视频了| 国产精品一区二区黑丝| 国产精品久久久久一区二区三区共| 国产999精品久久久久久| 亚洲国产电影在线观看| proumb性欧美在线观看| 亚洲免费av高清| 欧美精品vⅰdeose4hd| 蜜臀久久99精品久久久久久9 | 成人精品高清在线| 亚洲三级在线播放| 欧美婷婷六月丁香综合色| 午夜久久电影网| 精品国产亚洲一区二区三区在线观看| 韩国一区二区在线观看| 国产精品久久777777| 一本色道亚洲精品aⅴ| 亚洲成av人影院| 精品国产乱码久久久久久闺蜜 | 亚洲欧美日本韩国| 欧美情侣在线播放| 韩国精品久久久| 亚洲欧美自拍偷拍| 91超碰这里只有精品国产| 国模一区二区三区白浆| 亚洲欧美视频在线观看视频| 欧美日韩mp4| 国产精品99久久久久久久女警| 亚洲色图欧美激情| 日韩一本二本av| 成人97人人超碰人人99| 亚洲高清一区二区三区| 久久久久久久久岛国免费| 色欧美片视频在线观看| 毛片av中文字幕一区二区| 国产精品三级在线观看| 精品视频一区 二区 三区| 国产一区二区三区四区五区入口| 亚洲欧洲综合另类| 欧美精品一区二区在线播放| 色狠狠一区二区| 久久97超碰色| 亚洲伦理在线精品| 精品国产乱码久久久久久蜜臀| 91片在线免费观看| 老司机精品视频导航| 中文字幕一区日韩精品欧美| 欧美一区二区免费观在线| 99久久精品免费看国产免费软件| 毛片av一区二区| 亚洲激情一二三区| 国产三级欧美三级日产三级99| 欧美日韩三级一区| 99久久99久久精品国产片果冻 | 国产亚洲自拍一区| 欧美绝品在线观看成人午夜影视| 成人av资源下载| 久久97超碰色| 五月激情六月综合| 亚洲免费毛片网站| 久久精品视频免费| 欧美一激情一区二区三区| 国产欧美综合色| 夜夜亚洲天天久久| av午夜一区麻豆| 久久国产精品免费| 亚洲一级二级三级在线免费观看| 欧美高清在线精品一区| 日韩免费性生活视频播放| 欧美四级电影在线观看| 成人av片在线观看| 国产精品综合视频| 看电影不卡的网站| 日本成人在线电影网| 一区二区理论电影在线观看| 国产精品成人免费在线| 久久久久久久久久看片| 精品少妇一区二区三区视频免付费| 欧美日韩亚洲综合在线 | 中文一区二区在线观看| 久久综合狠狠综合| 日韩一区二区在线免费观看| 欧美日本国产视频| 欧洲另类一二三四区| 色婷婷国产精品综合在线观看| 成人激情小说网站| 成人精品小蝌蚪| 国产精品一区二区无线| 国产一区久久久| 国产综合久久久久久鬼色| 紧缚捆绑精品一区二区| 久草热8精品视频在线观看| 精品美女被调教视频大全网站| 国产精品影音先锋| 亚洲午夜视频在线观看| 久久久九九九九| 精品电影一区二区三区| 久久一区二区三区四区| 久久久久高清精品| 国产日韩欧美电影| 国产精品久久99| 亚洲视频1区2区| 亚洲精品国久久99热| 一级女性全黄久久生活片免费| 亚洲一区二区三区美女| 亚洲午夜久久久久中文字幕久| 亚洲国产aⅴ成人精品无吗| 亚洲3atv精品一区二区三区| 亚洲午夜精品17c| 日本成人在线一区| 捆绑紧缚一区二区三区视频| 国产美女在线观看一区| 国产精品主播直播| 成人高清免费在线播放| 色综合久久久久综合体| 欧美视频一区二区在线观看| 91麻豆精品国产自产在线| 日韩免费在线观看| 国产日产欧美一区| 亚洲欧美成aⅴ人在线观看|