网站首页 > 技术文章 正文
问题的引出是这样的,在一个项目中有大量的页面主体是table做数据展示,所以就封装了一个table的组件,提供动态渲染的方案。有个问题是数据类型中有图片,对于图片的加载失败我们需要做容错。一般我们的思路都是对img绑定error事件,替换该图片为一个默认的图片。但是error事件是不会冒泡的,我们渲染是动态的,我们不能delegate事件到body上。如果将处理写在js里,那么每次渲染的时候都要去给图片绑定error事件,写在模板里拼接(内联事件)又会很麻烦(我采取的方案是用户编写基本th,td模板,所以需要使用者拼接,思考过走配置的方法初始化table这个问题可以忽略。。。)
博主也是个纠结的人,有没有更好的解决方案呢?下面介绍一个css黑魔法,用伪元素对图片加载失败做处理。
什么是伪元素?科普链接:
http://www.w3school.com.cn/css/css_pseudo_elements.asp
css知识扎实的人肯定会有个疑问,img是可替换元素(科普:
http://www.cnblogs.com/wkylin/archive/2011/05/12/2044328.html),是不能应用伪元素的啊?!
对,没错,是不能用,至于黑魔法嘛~img不能用,但是加载失败了能不能用呢?
哈哈哈,我们在chrome下测试看下:
有的!!!那我们后面可做的事情就思路了啊,哈哈哈
后面引入我写的一个demo
正常的图片:
容错后的:
至于为什么图片加载失败后,会可以使用伪元素,我的理解大概是这样的。当加载成功的时候img是没有任何子节点的,befor和after是在元素的内容前后插入内容。但当图片加载失败之后,是不是把替代文本作为字内容了呢?后面我会用一个伪元素标签是试验?你们猜到是哪个了么?
兼容性:
在ios的Safari和uc上不能实现,so 这个方案还是要考虑下的
╮(╯▽╰)╭,博主也是纠结啊,如果有更好的方案可以和我联系
额,不对,跑题了,我们今天是介绍这个伪元素的黑魔法的,哈哈哈~
猜你喜欢
- 2025-03-24 什么是伪类和伪元素?两者有什么区别?单一冒号和双冒号有何不同
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 1529℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 674℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 534℃MySQL service启动脚本浅析(r12笔记第59天)
- 498℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 498℃启用MySQL查询缓存(mysql8.0查询缓存)
- 484℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 466℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 464℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)