网页中默认图片的几种解决方式

article/2025/8/27 19:09:45

原文https://segmentfault.com/a/1190000016855234

现在网页中图片随处可见,但避免不了有时会出现图片资源失败的情况,在谷歌浏览器中就会显示这样

<img src="logo.jpg" alt="logo">

logo

这里的 alt属性是为了当图片加载失败时告诉用户图片信息的

能不能美化一下呢?

下面给出几种方式

js 方式

相信大家碰到这种问题是,搜索的结果一般都是用图片的onerror方法

onerror 事件会在文档或图像加载过程中发生错误时被触发。
在装载文档或图像的过程中如果发生了错误,就会调用该事件句柄。

使用方式也很简单

<img src="logo.jpg" alt="logo" onerror="this.src='https://xxx.img/logo.png'">

但是,这个方法一定要注意,保证onerror里面赋值的图片地址一定不能出错,否则,就会无限调用onerror...

logo

页面直接崩掉..

有人说,我可以保证呀。那么,既然能保证,为什么还会有前面图片加载失败,而启用备用图片的情况发生呢?

当然,你可以采用base64的方式,缺点就是太长..类似下面这种

<img src="logo.jpg" alt="logo"onerror="this.src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZu...IIggggCCKAIIgAgiACCIIIIAgigCCIAIIgAgiCCCAIIoAgiACCIAIIQm7xfwIMAADDZPsh5DI6AAAAAElFTkSuQmCC'">

兼容性还是可以的,基本满足日常开发。

那么有没有css解决方式呢?

当然有,如果只用兼容主流浏览器的话

css 方式

这里提供两种方式

伪元素

虽然img是单标签<img>,里面不能包裹其他元素,但是却可以包含伪元素

不过这里有个特征,只有当图片加载失败或者没有图片的时候,才会显示伪元素

既然如此,我们可以用伪元素来实现一个默认提示效果

img{display: inline-block;position: relative;width: 200px;height: 200px;background: #ccc;vertical-align: top;
}
img:after{content: '';position: absolute;left: 0;top: 0;width: 100%;height: 100%;background: url('img/b.jpg') #ccc;
}

思路很简单,就是用伪元素覆盖在原图片上,而且图片加载失败也没什么问题,最多不显示,也可以以纯色背景作为默认占位图。

logo

背景图片

还有一种方式,用到了css3中的多背景特性

div{background:url(a.jpg),url(b.jpg), url(logo.png);
}
指定的时候,按浏览器中显示时图像叠放的顺序从上往下指定的,第一个图像文件是放在最上面的,最后指定的文件是放在最下面的。

这样我们也可以实现默认图片的显示

.img{width: 200px;height: 200px;background: url('a.png'),url('logo.png') #f1f1f1
}

logo

不过这种方式本质上是多张图片重叠在一起,如果上一层加载失败,才会看得见底下的那一张,也就是说如果都加载成功,其实都是存在的。那么就要主要了,如果上层的图有透明部分,就有可能看得到底下的图,漏光了!

logo

如上,两张图都加载成功了,由于上层有透明部分,所以看到了底图。所以在使用这种情况的时候,需要使用.jpg图片,避免走光

小节

以上介绍了三种设置默认图片的方式,

从兼容性方面来讲,js方法适应性最广,可以低版本兼容ie,其他两种就不行了,只需注意备用图片地址不要出错就可以了

个人比较建议第二种伪元素方式,纯css方式,html可以不做任何修改,适合对已有项目的体验升级,有了体验更好,没有也无伤大雅

第三种就可以当娱乐看看了,当做一种思维方式吧,毕竟没有任何语义化,给一个div,别人根本就不知道这是一张图片,对搜索引擎也不友好。

各位小伙伴还有什么更好的方式呢? ^^

 

  • 小程序加载图片失败,默认图片的替换方法THISwepyjavascript
  • canvas图片绘制跨域问题解决方案Tainted canvases may not be exported羊羊羊javascript前端
  • 性能更优越的小程序图片懒加载方式jayzou小程序javascriptlazyload
  • 原生JS实现图片的懒加载hustchenshu懒加载javascript
  • 页面体验提升小技巧—渐进式图片小前端html
  • <img> 标签 图片加载失败时候处理方案烟火里的尘埃javascripthtml
  • 图片预加载,图片懒加载,和jsonp中的一个疑问JinsongChaijavascripthtml5html
  • CSS Contain&Cover 的数学公式一波不是一波css3


http://chatgpt.dhexx.cn/article/tucX5Wcv.shtml

相关文章

数据库-SQL语言

一、表 1.1创建表 语法格式&#xff1a; CREATE TABLE <表名> ( <列名><数据类型>[列级完整性约束条件] [&#xff0c;<列名><数据类型>[列级完整性约束条件]]… [&#xff0c;<表级完整性约束条件>] )&#xff1b; 注&#xff1a;[ ]…

数据库语言SQL

数据库语言SQL SQL的发展 1974年&#xff0c;由Boyce和Chamberlin提出 1975~1979&#xff0c;IBM San Jose Research Lab的关系数据库管理系统原型System R实施了这种语言 SQL-86是第一个SQL标准 SQL-89、SQL-92(SQL2)、SQL-99(SQL3) 非过程化语言 SQL语言进行数据库操作…

MySQL数据库语言一、DDL

&#x1f618;作者简介&#xff1a;正在努力的99年打工人。 &#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。 &#x1f64f;创作不易&#xff0c;动…

数据库系统之sql语言

查询语言(query language)是用户用来从数据库中请求获取信息的语言。这些语言通常比标准的程序设计语言层次更高。查询语言可以分为过程化的和非过程化的。在过程化语言(procedural language)中&#xff0c;用户指导系统对数据库执行一系列操作以计算出所需结果。在非过程化语言…

一文读懂数据库语言

数据库系统提供数据定义语言&#xff08;Data-Definition Language&#xff0c;DDL&#xff09;来定义数据库模式&#xff0c;并提供数据操纵语言&#xff08;Data-Manipulation Language&#xff0c;DML&#xff09;来表达数据库的查询和更新。而实际上&#xff0c;数据定义和…

数据库+SQL语言

文章目录 数据库相关概念MySQL数据模型关系型数据库 SQL通用语法 SQL语句全解DDLDMLDQL基础查询条件查询排序查询分组查询分页查询 约束外键约束 数据库设计软件研发步骤数据库设计理念和步骤表关系多表查询事务 数据库相关概念 数据库&#xff1a;存储和管理数据的仓库&#x…

又一门国产数据库语言诞生了,比SQL还好用

一、数据库语言的目标 1.1 数据库是做什么的 数据库这个软件&#xff0c;名字中有个“库”字&#xff0c;会让人觉得它主要是为了存储的。其实不然&#xff0c;数据库实现的重要功能有两条&#xff1a;计算、事务&#xff01;也就是我们常说的OLAP和OLTP&#xff0c;数据库的…

数据库标准数据语言SQL——总结

数据库标准数据语言SQL SQL(Structured Query Language),结构化查询语言 1. 数据查询——select 2. 数据操纵——create,drop,alter 3. 数据定义——insert,update,delete 4. 数据控制——grant,revoke 1数据定义 1. 模式的定义删除 2. 基本表的定义、删除与修改 列级完整…

【数据库】SQL语言

目录 一、SQL语言概述 1、特点 2、SQL功能 3、SQL支持数据库系统三级模式 二、数据定义语言&#xff08;DDL&#xff09; 1、模式 2、基本表 3、视图 4、索引 三、数据查询语言&#xff08;DQL&#xff09; 1、单表查询 2、连接查询 3、嵌套查询 4、集合查询 5、…

数据库语言-SQL

数据库语言&#xff0d;SQL 一、概述二、利用SQL建立数据库1、创建Database2、创建Table3、追加元组 三、利用SQL进行简单查询1、单表查询2、检索条件之去重复记录3、检索结果之排序4、模糊查询 四、利用SQL语言进行多表联合查询1、θ-连接之等值连接2、表更名与表别名3、θ-连…

数据库SQL语言

SQL语言基础 大家好&#xff0c;我是大黄。这次我来简单带你们了解一下数据库技术中必不可少的一项——SQL语言。 SQL&#xff0c;英文是Structured Query Language&#xff0c;直面翻译就是结构化疑问语言。所以说明这个语言是有一定的结构的&#xff0c;所以基础阶段不会太困…

数据库语言

DDL语言 其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表&#xff08;CREATE TABLE 或 DROP TABLE&#xff09;为表加入索引等。 mysql是一个关系型数据库&#xff0c;库里面包含若干个表&#xff0c;而每一张表都是由行和列组成。 1.关于数据库操作的命…

数据库基础语言

目录 数据库与表的概念 如何操作数据库 数据库连接方式 SQL分类 DDL数据定义语言 DML 数据操作语言 数据库常用数据类型 约束条件 主键约束(PRIMARY KEY) 具有主键约束的字段同时可以使用自增来让DBMS自行对其值进行维护 非空约束(NOT NULL) 唯一性约束(UNIQUE) D…

MySQL-SQL语言

文章目录 SQL语法要求&#xff1a;1、DDL1.1、数据库操作(1) 查询当前数据库(2) 查询当前数据库(3) 创建数据库(4) 创建一个itheima数据库&#xff0c;并且指定字符集(5) 删除数据库(6) 切换数据库 1.2、表操作1.2.1、表的基本操作(1) 查询当前数据库所有表(2) 查看指定表结构(…

只知道SQL数据库?又一国产数据库语言诞生了

一、为什么学习数据库&#xff1f; 学习数据库&#xff0c;你肯定需要先了解它&#xff0c;这样你才知道你为什么要学习它&#xff0c;数据库除了SQL还有一些别的数据库&#xff0c;了解它们的作用&#xff0c;可以在不同的场景选择最符合的一个数据库。 1.1 什么是数据库&am…

比SQL还好用,又一门国产数据库语言诞生了

目录 一、数据库语言的目标1、要说清这个目标&#xff0c;先要理解数据库是做什么的。2、什么样的计算体系才算好呢&#xff1f; 二、SQL为什么不行1、先看写着简单的问题2、为什么 SQL 不行呢&#xff1f;3、再看跑不快的原因4、我们再做个类比&#xff1a; 三、SPL为什么能行…

MySQL数据库——SQL语言

文章目录 MySQL数据库——SQL语言前言一、数据定义语言&#xff08;DDL&#xff09;二、数据操纵语言&#xff08;DML&#xff09;三、事务控制语言&#xff08;TCL&#xff09;四、数据查询语言&#xff08;DQL&#xff09;1.select/for 基本查询语句2.给列起别名&#xff08;…

写着简单跑得又快的数据库语言 SPL

数据库语言的目标 要说清这个目标&#xff0c;先要理解数据库是做什么的。 数据库这个软件&#xff0c;名字中有个“库”字&#xff0c;会让人觉得它主要是为了存储的。其实不然&#xff0c;数据库实现的重要功能有两条&#xff1a;计算、事务&#xff01;也就是我们常说的 OLA…

大数据和云计算有什么关系?

前言 本文隶属于专栏《大数据从0到1》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和文献引用请见《大数据从0到1》 解答 云计算关注资源的分配和利用&#xff0c;侧重…

【云原生|云计算系列】云计算基础概念

欢迎来到云原生专题的云计算系列第一篇博客&#xff0c;我们将探索云计算的基础知识&#xff0c;以帮助您深入了解这个迅速发展的领域。在前一篇博客中&#xff0c;我们介绍了云原生的概念和重要性&#xff0c;强调了它作为云计算的核心理念和实践的关键角色。本篇博客将进一步…