Home > CSS > CSS:跨浏览器复合背景
2010April . 28th

CSS:跨浏览器复合背景

最近发现了一个让 IE6~8 也能呈现 CSS3 Multiple Backgrounds(复合背景)的方法,当时我小小的震惊了一下。看来 IE6 曾经的辉煌不单是微软的捆绑和网银的支持造成的,在当年,它强大的功能也令其它浏览器难以追赶。废话不说了,先说说 CSS3 里的标准做法。

在 CSS3 标准里,Background 属性被赋予更加强大的功能,在 CSS2.1 的基础上,我们可以对一个对象同时使用多个背景图片。例如如下的样式:

1
2
3
#multiple-bg {
	background-image: url(top.png), url(middle.png), url(bottom.png);
}

添加符合背景图片的时候先从最顶层开始添加,按从高到低的顺序写样式。大家可以看这个 Demo。可以尝试用 IE 打开看看效果。

用 IE 打开过 Demo 的同学可以发现 IE 也能显示复合背景了,如果你查看过 DEMO 的源码,你可以发现我是通过 IE 滤镜来实现的。方法是先用标准的 CSS 加一个底层的背景,再通过滤镜添加上一层的背景。整个 Demo 的样式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<style>
#demo {
	width: 410px;
	height: 290px;
	border: #CCC dotted 1px;
	margin: 120px auto 0;
	background: url(anti-ie6-logo.png) left top no-repeat, url(bg.jpg) center top repeat; /* CSS3 */
}
</style>
<!--[if IE]>
<style>
#demo {
	background: transparent url(bg.jpg) center top no-repeat;
	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader (src='anti-ie6-logo.png', sizingMethod='crop'); /* IE6~7 */
	-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='anti-ie6-logo.png', sizingMethod='crop')"; /* IE8 */
}
</style>
< ![endif]-->

IE 的不足

看到当年 IE 的强大了吧?最早开始支持复合背景的 Safari 3.1 诞生以前,IE6 早就可以通过滤镜制作出这种效果了。但IE也存在明显的不足:

  • 本例使用的滤镜没有提供调整图片位置的参数,至少我在 MSDN 的技术文档里没找到。
  • 目前 IE 只能制作出两层复合背景。

本文权当开开眼界了,为了更快地拥抱 CSS3 ,请在不使用网银和支付宝时弃用 IE。

  1. 2010April . 28th - 1:33 PM

    高级啊,从未见过这种用法,真是学习了

  2. 2010April . 28th - 9:28 PM

    是好像图层一样的意思么?

  3. 2010April . 28th - 10:05 PM

    @万戈
    我也刚知道,太有想象力了
    @Jutoy
    对,像 PhotoShop 的图层一样

  4. 2010April . 29th - 3:30 AM

    学习一下,呵呵,以前只知道用相对定位来着 ~

  5. 2010April . 29th - 6:22 PM

    这个技术还没玩过,懒啊

  6. 2010April . 29th - 8:58 PM

    IE6曾经辉煌过。。

Subscriber selector

Close