網生@誌 | zEUS.'Blog

首页 » 网页美化 » 2008-08-3 »

IE6 支持 PNG 格式图片的 CSS 滤镜写法

Tag: , ,

之前一直在用 gif 图片或者用和背景色相同的 jpg 图片回避 IE6 不支持 PNG 图片背景色透明的 BUG,不过在做大菠萝3(Diablo III)主题时不愿放弃自己一个比较酷的 Idea,所以我还是决定要解决这个 BUG。
网上关于解决 IE6 这个 BUG 的方法很多,有用 JS 的,也有用 IE6 的 滤镜的。稍微看了一下,JS 的方法仅用于单个图片的效果,但若拿图片作背景则不行。 滤镜的写法则简单很多,也能用作背景,但还是存在一个问题,图片的地址只能使用“绝对地址”,而我们在模板的 CSS 样式表里使用的大多是相对地址,虽然也可以使用绝对地址,但是不同的用户使用该模板的话就必须修改其绝对地址,对于不懂 CSS/HTML 的人来说,无疑这是一道“坎”。不过后来猫猫的一句话让我如梦初醒——可以把这段 CSS 写在 head 里,这样就可以用 自己的 PHP 语句来调用绝对地址了!

让 IE6 支持 PNG 图片背景透明的 CSS 滤镜写法如下:

1
2
3
4
*html #image-style {
	background-image: none;
	filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="filename.png", sizingMethod="scale");
}

这里我写了一个实例:http://zeuscn.net/download/ie6png.html
使用 Firefox 和 IE7 浏览器看的话,2张图片没有区别,但使用 IE6 核心的浏览器看的话会发现第一张图片有白色背景——第一张图片是直接添加而没有使用滤镜。

1
2
3
4
5
6
7
#test {
	background:url(h2-bg.png) no-repeat;
	*background-image: none;
	*filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="http://zeuscn.net/download/h2-bg.png", sizingMethod="scale");
	height:85px;
	width:66px;
}

我们可以从实例中的代码看到,由于 HTML 文件和图片 h2-bg.png 位于相同目录,所以这里的背景链接我是使用的相对地址。而下面的 CSS 滤镜我使用的是绝对地址。这里我为了兼容 Firefox IE6 和 IE7 我使用了 Hack 的写法:属性前添加 “*” ——只让 IE 核心的浏览器识别。

那么在 WordPress 模板的 head 标签内的 CSS 样式表调用之后,添加了下面的样式代码来绕过在样式表内使用绝对地址的问题:

1
2
3
4
5
6
7
8
9
<link href="<?php bloginfo('stylesheet_directory'); ?>/style.css" rel="stylesheet" type="text/css" />
<style>
.post .title-bg {
	height:85px;
	width:65px;
	*filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="<?php bloginfo('stylesheet_directory'); ?>/images/h2-bg.png", sizingMethod="scale");
	position:absolute;
}
</style>

这个效果的具体样式是什么样的呢?嘿嘿,主题发布之日就能揭晓了~

zEUS.

« »

已经有20人发表了评论

  1. 我只给gavartar做了css滤镜…
    其他的图片因我能够控制显示,所以就干脆不用透明背景了…呵呵 自己用的皮 什么都可以通融 哈哈

  2. @page:coolcode 一款国人改造的插件,还不错~ 支持很多类别的代码高亮。

  3. 你这个 语法高亮怎么实现呢?

  4. @wayne:确实很垃圾,IE6增加了我不少负担!! :twisted:
    @fiorano:呵呵,这个效果我也搞了半天才研究清白…

  5. 最早用itheme的时候,试过这个方法,可是死都不出效果,不知道是不是主题的问题 :???:

  6. @zx.longinus:额… 你可以看作我是为了模板更 popular,虽然我也很烦 IE6 但是为了用户体验,为了流量,不得已而为之。不过我不BS用户,因为他们是 IE6 的“受害者”。

  7. 在以前沒有放棄 ie6 支持的時候,我會使用 gif 做個簡陋版專門給 ie6 使用,雖然當時就知道利用 filter 和 css hack 的方法,但是總覺的 ie6 的用戶很低等,沒有必要為他們花時間……

  8. @童丹艺:呵呵,多谢支持撒~~ 看不懂光抢沙发就够啦~~

  9. 瓦咔咔~~抢到1楼~~虽然还没有看。。。嗯嗯,会看完的。。虽然看不懂。。呵呵,无比激动咧~~

文章反相链接 Pingback/Trackback

  1. new technology in nuclear medicine

发表您的看法