css hover状态图片卡闪

注意不是IE浏览器,chrome内核下元素的hover状态触发时会卡闪
代码如下:

<body>
   <a href=""></a>
</body>

a{
   background:url("img");
}
a:hover{
   background:url("img_hover");
}

初次进入页面时就会有一定概率卡闪,个人猜测是与网速有关,hover触发时新图片是从服务器获取,但hover已经触发,原图消失hover图还未请求到就会卡闪
不知道有啥解决办法,现在已经不适用雪碧图了,原图和hover图都是分开的

阅读 4.7k
5 个回答

你可以参考下这个利用link的preload能让浏览器尽快的加载图片,而不是等到hover的时候才去加载,至于会闪,我猜是因为你这个元素hover前后的大小变了导致不停的重复触发hover
https://codesandbox.io/s/swee...
image.png

为什么会闪?因为第二张图片加载需要时间,所以会闪。

那么解决的方向就是让第二张图片不需要加载提前加载第二张图片

  1. 雪碧图,把两张图放在同一个url上面,通过坐标控制显示。
  2. 图片预加载,可以使用js。也可以给他在css上加载出来,background支持多张图片哟。
已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。
a{
   background:url("img");
}
a:after{
 content:"";
 background:url("img_hover");
}
a:hover{
   background:url("img_hover");
}

4楼正解
把两张图片放到一个雪碧图上 通过控制background-position: 来实现这个效果

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题