图片加载失败后CSS样式处理最佳实践

1、传统的图片异常处理

<img> 如果因为网络或者跨域限制等原因无法正常加载,在默认情况下会显示浏览器默认的“裂开”的图片效果,如果设置了 alt 属性值,则 alt 属性对应的内容也会一并显示。例如:

<img src="//www.zhangxinxu.com/zxx.ico" alt="府谷市民小柴">

 例如Chrome浏览器下的效果截图如下所示:

图片加载失败后CSS样式处理最佳实践

可以看到图片加载异常之后的视觉效果实在是太粗糙了,程序员可忍设计师不可忍,因此,为了更好的视觉效果,实际项目开发中,我们总会对图片加载异常的边界场景进行额外的处理。

传统的图片加载异常会使用一个加载失败的占位符代替,这个占位图通常会是一张裂开的图片。

例如下面这张图:

图片加载失败后CSS样式处理最佳实践

 触发使用占位图可以通过 onerror 事件,代码示意如下:

<img src="xxx.png" alt="府谷市民小柴" onerror="this.src=‘break.svg‘;">

其中第2张图片故意使用了一个错误的地址,结果如下截图所示:

图片加载失败后CSS样式处理最佳实践

 然而上面这种实现方式有一个比较致命的问题,那就是用户并不清楚无法显示的图片具体表示的含义是什么。

2、最佳实践,同时显示alt信息

为了便于维护,图像加载error的时候不再是替换src地址,而是新增一个错误类名,通过错误error函数添加class名称error,例如 .error :

<img src="zxx.png" alt="府谷市民小柴" onerror="this.classList.add(‘error‘);">

然后配合使用如下所示的CSS(部分CSS样式细节大家可以根据自己的审美进行修改):

img.error {
  display: inline-block;
  transform: scale(1);
  content: ‘‘;
  color: transparent;
}
img.error::before {
  content: ‘‘;
  position: absolute;
  left: 0; top: 0;
  width: 100%; height: 100%;
  background: #f5f5f5 url(break.svg) no-repeat center / 50% 50%;
}
img.error::after {
  content: attr(alt);
  position: absolute;
  left: 0; bottom: 0;
  width: 100%;
  line-height: 2;
  background-color: rgba(0,0,0,.5);
  color: white;
  font-size: 12px;
  text-align: center;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

此时就可以看到失败的图片和alt文字信息同时出现的效果了。

眼见为实,您可以狠狠地点击这里: 图片加载异常同时显示alt信息demo

对应的显示效果参见下面的截图:

图片加载失败后CSS样式处理最佳实践

 可以看到,内容展示和视觉表现同时兼顾了,是我这些年打磨出来的目前最好的图像加载异常兜底处理实践,一段代码整站通用,低成本高收益。

完结: 2020-10-26 12:01:06

 

图片加载失败后CSS样式处理最佳实践

上一篇:GPG key retrieval failed: [Errno 12] Timeout on https://download.docker.com/linux/centos/gpg: (28, 'Operation timed out after 30001 milliseconds with 0 out of 0 bytes received')


下一篇:ASP.NET Core 3.1使用Swagger