使用CSS的候补图片
使用CSS的候补图片
我有一个,它展示了一个远程图片。
我想要它在远程图片不可用的情况下回退到另一个本地图片。
.cc_image { width: 256px; height: 256px; } .cc_image.fallback { /* this URL here is theoretically a local one (always reachable) */ background-image: url('https://cdn2.iconfinder.com/data/icons/picons-basic-3/57/basic3-010_creative_commons-256.png'); }
它的工作方式是,当找不到src图片时,则显示背景图片。
缺点是:
- 它将始终加载背景图像(额外的HTTP请求)
- 它在原始图像的位置显示一个小的未找到图标(在Safari上是一个问号),该图像显示在背景图像的上方(不是一个大问题,但我想摆脱它)
我该如何解决这些问题?
或者:还有其他方法可以达到相同的结果吗?
我在 这个问题中找到了一些解决方案,但这些方案依赖于JavaScript或
admin 更改状态以发布 2023年5月22日
我在Codepen上找到了一个解决方案,我想与你分享:
https://codepen.io/anon/pen/Eqgyyo
我喜欢这个解决方案,因为它使用真正的图像标签,而不是背景图像。
body { color: #2c3e50; font-family: 'verdana'; line-height: 1.35em; padding: 30px; } h1 { margin-bottom: 40px; } ul { list-style: none; padding: 0; } * { box-sizing: border-box; } img { color: #95a5a6; font-size: 12px; min-height: 50px; position: relative; } img:before { background: #f1f1f1; border: 1px solid #ccc; border-radius: 3px; content: '\1F517' ' broken image of 'attr(alt); display: block; left: 0; padding: 10px; position: absolute; top: -10px; width: 100%; }
Broken image fallback CSS
- ✓ Firefox
- ✓ Chrome
- ✓ Opera
- ✗ Safari (desktop, mobile)
- ✗ iOS webview
不幸的是,您不能在没有 Javascript 或对象标记的情况下同时实现这两个功能。
您可以这样做以避免缺少图像图标:
将您的图像放在一个容器中(可能已经在一个容器中)。
使容器具有与图像相同的宽度和高度。
- 将备用图像设置为容器的背景图像。
- 将远程图像设置为 img 标签的背景图像。
- 将大小为 1x1 像素的透明 png 作为图像的 src 加载(请参阅代码,以了解如何在没有额外HTTP请求的情况下完成此操作)。
代码:
HTML
CSS
.fallback { background-image: url(*fallback image here*); display: inline-block; /*to ensure it wraps correctly around the image, even if it is a a or span tag*/ min-width: specify a minimum width (could be the width of the fallback image) px; min-height: specify a minimum height (could be the height of the fallback image) px; background-position: center center; // fallback for older browsers background-size: cover; background-repeat: no-repeat; } .cc_image { min-width: same as container px; min-height: same as container px; background-position: center center; // fallback for older browsers background-size: cover; background-repeat: no-repeat; }
min-width
和max-width
确保背景图像保持可见。background-position
确保图像的中央部分保持可见,并在旧版浏览器上具有优雅的降级效果。background-size
将背景图像调整大小以填充元素背景。cover
值意味着图片将被调整大小,以便完全覆盖元素(图像的某些外部边缘可能会被裁剪)。- img src 标记中的 base64 数据是一个透明的 1px png。
- 这将有一个额外的好处,即常规用户和某些机器人可能无法保存您的图像(简单的图像保护)
- 唯一的缺点是,您仍将为备用图像添加一个额外的 HTTP 请求。