星空:带视差的令人难以置信的 3D 背景效果

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费积分!

starrynight.png

如果您还没有看到神秘酷炫的 Silverback 应用 预告页面,您应该去看看。大猩猩是 由 Jon Hicks 设计的(是的!与拥有酷炫的 身体边框技巧 的网站相同)。在您访问该网站时,请确保调整浏览器大小,以查看悬挂藤蔓的酷炫“视差”效果。该网站本身由 Paul Annett 设计。Paul 在 Think Vitamin 上写了一篇关于 如何创建该视差效果 的文章。

我想我会借鉴这个想法,并更详细地解释一下,并以略微不同的应用方式提供下载,供有兴趣的人下载。

什么是视差?

您可以将运动视差想象成您从移动的火车上向外看时所看到的东西。紧邻火车轨道的灌木丛会迅速掠过您的视线,而田野中吃草的牛群会显得缓慢地穿过您的视线,而背景中的山脉几乎不会移动。 视差与天文学特别相关。不仅因为科幻电影一直使用这种效果来创造酷炫的空间效果,而且因为这种效果是我们用来测量恒星距离我们太阳系有多远的工具。

带视差的多重背景

为了纪念这种令人惊叹的效果及其与科学的相关性,我创建了 星空。星空是一种全页面背景效果,包含三层。当您调整浏览器窗口大小时,远处的星星只会移动一点点,而近处的星星会移动得更快。这种效果是通过三个页面元素创建的,所有元素都占据整个浏览器窗口。主体(“背景”)、一个 div(“中景”)和另一个 div(“前景”)。

<body>
	<div id="midground"></div>
	<div id="foreground"></div>
</body>

主体元素默认情况下将填充整个屏幕,但我们将必须使用绝对定位对另外两个 div 进行样式设置以实现相同的效果。

body { 
	background: url(images/background.png) repeat 5% 5%;
}
#midground {
	background: url(images/midground.png) repeat 20% 20%;
	position: absolute;
	top: 0; left: 0; right: 0; bottom: 0;
	z-index: 997;
}
#foreground {
	background: url(images/foreground.png) repeat 90% 110%;
	position: absolute;
	top: 0; left: 0; right: 0; bottom: 0;
	z-index: 998;
}

中景和前景 PNG 文件都是 alpha 透明的,因此它们可以很好地叠加在一起。这里重要的是您在背景属性中看到的百分比值。这控制着水平和垂直位置,但在本示例的上下文中,您可以将其理解为“您想要它移动的速度”。还要注意,您可以超过 100%,这意味着它将以比调整浏览器窗口大小的速度更快的速度移动。

值得一提的是,这种效果在 IE 6 或更早版本中根本不会出现。在 PNG 错误和绝对定位错误之间,它根本不值得。 在我的示例中,我使用 条件样式表 来显示警告消息。

我的内容放在哪里?

这取决于您,请注意在我的 示例页面 中,右上角有一小部分内容。您可以做类似的事情。请记住,您构建的任何用来放置内容的区域都需要是绝对定位的,并且具有更高的 z-index 值。否则,绝对定位的前景和中景将覆盖您的内容区域,您将无法选择或点击任何内容(如果您能看到它的话)。

[查看示例页面]

[下载示例]
.ZIP 文件包含星星的 Photoshop 文档。