仅使用 CSS 预加载图片

Avatar of Chris Coyier
Chris Coyier

使用图片预加载的一个主要原因是,如果你想在鼠标悬停或 :hover 事件中使用图片作为元素的背景图片。如果你只在 CSS 中为 :hover 状态应用该背景图片,那么该图片将不会加载,直到第一次 :hover 事件发生,因此鼠标悬停到该区域后,图片实际上显示出来之间会有短暂的烦人的延迟。

技巧 #1

在元素的常规状态下加载图片,只需使用背景位置将其移开。然后移动背景位置以在悬停时显示它。

#grass { background: url(images/grass.png) no-repeat -9999px -9999px; }
#grass:hover { background-position: bottom left; }

技巧 #2

如果相关的元素已经应用了背景图片,并且你需要更改该图片,上面的方法将不起作用。通常你会在这里使用一个精灵图(一个组合的背景图片),只需移动背景位置即可。但如果这不可能,请尝试以下方法。将背景图片应用到另一个已经使用但没有背景图片的页面元素。

#random-unsuspecting-element { background: url(images/grass.png) no-repeat -9999px -9999px; }
#grass:hover { background: url(images/grass.png) no-repeat; }

创建新页面元素以用于此预加载技术的思想可能会出现在你的脑海中,比如 #preload-001、#preload-002,但这有点违背了 web 标准的精神。因此,可以使用页面上已存在的页面元素。

我曾经想过尝试使用相同的元素,只是使用 :after 伪类加载图片,这样你就不需要依赖于页面上有足够的没有背景的图片来使用,但出于某种原因,它不想正确预加载它们。

更多

查看 这篇文章,了解一些其他技巧,包括 JavaScript。