NoteZ_技术博客 NoteZ_技术博客
🏠 首页
  • 📚 Web技术
  • 📋 Npm笔记
  • 📑 Markdown
  • 📄 Git笔记
  • 📝 Nginx文档
  • 📓 Linux文档
  • 📖 技术文档
  • 📜 其他文档
  • 🧊 NodeJs
  • 🎡 Express
  • 🔥 Rust
  • 🎉 Koa2
  • 🍃 MongoDB
  • 🐬 MySql
  • 🥦 Oracle
  • 🍁 Python
  • 🍄 JavaScript
  • 🌰 CSS
  • 🧄 HTML
  • 🥑 Canvas
  • 🌽 Nuxt
  • 🍆 React
  • 🥜 Vue
  • 🧅 TypeScript
  • 🌶️ AI
  • 📘 分类
  • 📗 标签
  • 📙 归档
⚜️ 在线编辑 (opens new window)
  • 📁 站点收藏
  • 📦 前端组件库
  • 📊 数据可视化
  • 🌈 开源插件
  • 🎗️ 关于我
  • 🔗 友情链接
GitHub (opens new window)

NoteZ_技术博客

前端界的小学生
🏠 首页
  • 📚 Web技术
  • 📋 Npm笔记
  • 📑 Markdown
  • 📄 Git笔记
  • 📝 Nginx文档
  • 📓 Linux文档
  • 📖 技术文档
  • 📜 其他文档
  • 🧊 NodeJs
  • 🎡 Express
  • 🔥 Rust
  • 🎉 Koa2
  • 🍃 MongoDB
  • 🐬 MySql
  • 🥦 Oracle
  • 🍁 Python
  • 🍄 JavaScript
  • 🌰 CSS
  • 🧄 HTML
  • 🥑 Canvas
  • 🌽 Nuxt
  • 🍆 React
  • 🥜 Vue
  • 🧅 TypeScript
  • 🌶️ AI
  • 📘 分类
  • 📗 标签
  • 📙 归档
⚜️ 在线编辑 (opens new window)
  • 📁 站点收藏
  • 📦 前端组件库
  • 📊 数据可视化
  • 🌈 开源插件
  • 🎗️ 关于我
  • 🔗 友情链接
GitHub (opens new window)
  • JavaScript笔记

  • CSS笔记

    • CSS @media 多媒体查询使用总结
    • CSS 改变鼠标指针形状
    • css 清除浮动的几种方法总结
    • CSS3 元素转圈动画 (元素旋转动画)
    • CSS3之animation动画
    • CSS3之transition过渡
    • CSS3动画、旋转、旋转放大、放大、移动
    • CSS媒体查询 @media 常见的媒体尺寸设置
    • CSS或Js实现文字超出显示省略号
    • CSS教程和技巧收藏
    • CSS水平垂直居中常见方法
    • CSS给table的tbody添加滚动条
    • CSS设置自定义滚动条样式(兼容IE)
    • flex布局案例-圣杯布局
    • flex布局案例-基础
    • flex布局案例-网格布局
    • flex布局案例-输入框布局
    • flex布局案例-骰子
    • flex布局语法
    • Sass 基本使用方法
    • 「css技巧」使用hover和attr()定制悬浮提示
    • 「布局技巧」图片未加载前自动撑开元素高度
    • 从box-sizing属性入手,了解盒子模型
    • 使用 CSS 实现 pre 标签中内容换行方法
    • 图片加载失败使用CSS处理最佳实践
      • 1、传统的图片异常处理
      • 2、最佳实践,同时显示alt信息
      • 3、注意点
    • 如何根据系统主题自动响应CSS深色模式
    • 水平垂直居中的几种方式-案例
    • 滚动条样式设置(CSS)
    • 纯css实现Loading加载效果
    • CSS实现左侧固定,右侧自适应方法
  • HTML笔记

  • Canvas笔记

  • Nuxt笔记

  • React笔记

  • Vue笔记

  • TypeScript笔记

  • AI相关笔记

  • 开发文档
  • CSS笔记
NoteZ
2020-07-21
目录

图片加载失败使用CSS处理最佳实践

# 1、传统的图片异常处理

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

<img src="//zasd.jpg alt=图片">
1

这样图片加载异常之后的视觉效果很差,因此,为了更好的视觉效果,实际项目开发中,我们总会对图片加载异常的边界场景进行额外的处理。

传统的图片加载异常会使用一个加载失败的占位符代替,这个占位图通常会是一张裂开的图片。通过 onerror 事件,代码示意如下:

<img src="xxx.png" alt="鑫空间鑫生活" onerror="this.src='break.svg';">
1

配合css

img[src$="break.svg"] {
    object-fit: contain;
}
1
2
3

就可以保证占位图的横宽比例是正常的。然而这种实现方式有一个比较致命的问题,那就是用户并不清楚无法显示的图片具体表示的含义是什么。因此,传统的图片出错的处理方法可以有进一步的优化。

//zxx: 如果你看到这段文字,说明你现在访问是体验糟糕的垃圾盗版网站,你可以访问原文获得很好的体验:https://www.zhangxinxu.com/wordpress/?p=9618(作者张鑫旭)

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

为了便于维护,图像加载 error 的时候不再是替换 srcc地址,而是新增一个错误类名,例如 .error :

<img src="zxx.png" alt="css新世界封面" onerror="this.classList.add('error');">
1

然后配合使用如下所示的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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

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

# 3、注意点

上面提供的CSS代码中的兜底图像均使用的外链地址,例如:

img.error::before {
  background: #f5f5f5 url(break.svg) no-repeat center / 50% 50%;
}
1
2
3

其中的 url(break.svg) 就是使用的外链地址。

然后这里有个需要注意的地方,这个 break.svg 的域名地址建议不要和网站的静态图片的地址一样。 break.svg 可以和主站域名一致,或跟CSS域名一致,或者直接内联在CSS文件中。

#CSS
上次更新: 2024/01/30, 00:35:17
使用 CSS 实现 pre 标签中内容换行方法
如何根据系统主题自动响应CSS深色模式

← 使用 CSS 实现 pre 标签中内容换行方法 如何根据系统主题自动响应CSS深色模式→

最近更新
01
Gitea数据备份与还原
03-10
02
Linux 中使用 rsync 同步文件目录教程
03-10
03
Linux 使用 rsync 互相传输同步文件的简单步骤
03-08
更多文章>
Theme by Vdoing | Copyright © 2019-2025 NoteZ,All rights reserved | 冀ICP备2021027292号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式