如果默认不存在,后备背景图像

djs*_*y90 30 html css background css3

我想将图像设置为背景,但图像名称可能是bg.pngbg.jpg.

如果默认背景不存在,是否有任何非JavaScript方法可以创建备用图像的后备?

body{
    background: url(bg.png);
    background-size: 100% 100%;
    width: 100vw;
    height: 100vh;
    margin: 0;
}
Run Code Online (Sandbox Code Playgroud)

blo*_*nfu 48

如果不涉及透明度,您可以使用多个背景,并且它们占用所有可用空间或具有相同的大小:

div{   
     background-image: url('http://placehold.it/1000x1000'), url('http://placehold.it/500x500');
     background-repeat:no-repeat;
     background-size: 100%;
     height:200px;
     width:200px;
}
Run Code Online (Sandbox Code Playgroud)
<div></div>
Run Code Online (Sandbox Code Playgroud)

如果第一个没有退出,则会显示第二个.

div{   
     background-image: url('http://placehol/1000x1000'), url('http://placehold.it/500x500');
     background-repeat:no-repeat;
     background-size: 100%;
     height:200px;
     width:200px;
}
Run Code Online (Sandbox Code Playgroud)
<div></div>
Run Code Online (Sandbox Code Playgroud)

  • 图像是堆叠的,如果顶部的图像具有透明度,则会看到底部图像 (6认同)
  • 浏览器兼容性如何? (2认同)
  • @CrystalMiller 你可以在这里看到:https://caniuse.com/#feat=multibackgrounds (2认同)
  • 不幸的是,在Chrome的“网络”标签上,我可以看到它从服务器加载了两个图像。即使第一次成功。 (2认同)
  • 浏览器将加载两个图像。如果第二个仅在第一个失败的情况下加载,那会很好。Afaik,此解决方案无法实现。 (2认同)

Chr*_*ris 8

要指定多个可能的背景,您可以:

  background-color: green;
  background-image: url('bg.png'), url('bg.jpg');
Run Code Online (Sandbox Code Playgroud)

这将设置背景,bg.png如果它存在.如果它不存在,则将其设置为bg.jpg.如果这些图像都不存在,则背景将设置为静态green颜色.

请注意,它将优先考虑首先指定的任何图像.因此,如果两个图像都存在,它将选择bg.png超过bg.jpg.

这里查看演示.通过破坏任何图像网址来测试它.

  • 它不是我需要的解决方案,但我只是对替代解决方案投了赞成票。 (2认同)
  • 正如 @blonfu 在另一个答案中提到的,两个图像都被加载和堆叠。它不只是加载第一个成功的文件。 (2认同)