zoukankan      html  css  js  c++  java
  • 图片加载失败后CSS样式处理最佳实践

    1、传统的图片异常处理

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

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

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

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

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

    例如下面这张图:

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

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

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

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

    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;
       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;
       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

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

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

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

  • 相关阅读:
    C++位运算详解
    SQL语句获取时间的方法
    redis在windows下安装和ThinkPHP中使用
    数据同步存储过程代码
    C#重写OnKeyPress方法
    SQL Server 2008数据库生成数据库脚本(并带数据)
    C#中邮件的发送
    C#中DGV分页功能
    C#中保持文件夹A与B同步
    C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表
  • 原文地址:https://www.cnblogs.com/chailuG/p/CSS.html
Copyright © 2011-2022 走看看