10年积累的成都网站设计、成都网站制作、外贸网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站设计后付款的网站建设流程,更有密云免费网站建设让你可以放心的选择与我们合作。
本文是系列第五篇,终章。系列文章:
图片资源,在我们的业务中可谓是占据了非常大头的一环,尤其是其对带宽的消耗是十分巨大的。
对图片的性能优化及体验优化在今天就显得尤为重要。本文,就将从各个方面阐述,在各种新特性满头飞的今天,我们可以如何尽可能的对我们的图片资源,进行性能优化及体验优化。
OK,最后一个章节,我们简单聊一聊图片资源的容错及可访问性处理。
可访问性(A11Y),在我们的网站中,属于非常重要的一环,但是大部分同学都容易忽视它。
在一些重交互、重逻辑的网站中,我们需要考虑用户的使用习惯、使用场景,从高可访问性的角度考虑,譬如假设用户没有鼠标,仅仅使用键盘,能否顺畅的使用我们的网站?
非常重要的一点是,提高可访问性也能让普通用户更容易理解 Web 内容。
基于 Usability & Web Accessibility - image[5]
对于图像信息,我们需要大致遵循如下可访问性原则:
第一点非常好理解,所有的有意义的图片元素都必须要提供 alt 属性。
第二点比较有意思,在 A11Y 中,其实有一套 WAI-ARIA 标准[6]。WAI-ARIA 是一个为残疾人士等提供无障碍访问动态、可交互Web内容的技术规范。
简单来说,它提供了一些属性,增强标签的语义及行为:
上述第二点,提供替代 alt 属性的其他方式 的含义就是使用 WAR-ARIA 规范提供的诸如 aria-label 和 aria-labelledby 属性为图像提供可访问的名称。
当存在这些属性时,辅助技术(屏幕阅读器)将忽略图像的 alt 属性并读取 ARIA 标签。
而第三点,使用辅助技术隐藏装饰图像,又是什么意思呢?
上面第一点 所有有意义的 img 元素必须有 alt 属性,反过来说,页面上也会存在无意义的装饰性的图片,这些图片内容对辅助技术(屏幕阅读器)而言,其实是可以忽略的。
对于没有任何功能或信息内容的装饰图像,可以通过多种方式对屏幕阅读器隐藏:
OK,下面来讲一些有意思的细节内容。
有一个非常基础的知识,简单过一下,也就是图片元素中,alt 与 title 的差异:
对于使用屏幕阅读器的用户而言,图片是无法正常展示或者被的浏览的,基于此,我们需要利用好 alt 属性,或者是上述的aria-label 和 aria-labelledby 属性。
那么,这些属性内的内容应该填充什么呢?我们需要基于图片的功能加以区分:
其实 alt 的学问是非常之多的,如果我们的页面能做到这一点,那真的算是从根上开始思考,开始优化用户体验。
OK,那么,讲到这里,还有一个有意思的点就很自然的应该被提及。
那就是我们应该什么时候使用 元素,什么时候使用 background 内嵌图片?
我们可以从性能及功能两个方面进行考虑:
类型 |
img |
backgroud-image |
图层位置 |
前景 |
背景 |
默认初始尺寸 |
不定 |
固定 |
是否会产生回流重绘 |
会 |
不会 |
图片加载失败 |
可以触发元素的 onerror 事件,展示 alt 属性 |
无法有效设置异常处理场景 |
使用场景 |
Logo、产品图片、广告图片 |
装饰性无语义内容等 |
其实性能上并不是核心考虑的点,因为上文我们也讲到了在今天可以大规模使用是 loading="lazy" 属性,图片可以进行原生支持的懒加载。
我们在考虑选取 还是 backgroud-image 的时候,更多的还是从图片功能上进行考虑。一般来说,作为修饰的且无语义的装饰性图片选择使用 background-image,而比较重要的与网页内容相关的就使用 标签。
由于有语义的图片使用 展示,它的一个好处在于,当图片加载失败的时候,可以触发元素的 onerror 事件,我们可以有效的利用这一点,对图片进行异常处理。
当图片链接挂了,加载失败了,我们比较好的处理方式应该是怎么样呢?
处理的方式有很多种。在张鑫旭老师的这篇文章中 -- 图片加载失败后CSS样式处理最佳实践[14] 有一个不错的实践。
核心思路为:
img.error {
position: relative;
display: inline-block;
}
img.error::before {
content: "";
/** 定位代码 **/
background: url(error-default.png);
}
img.error::after {
content: attr(alt);
/** 定位代码 **/
}
我们利用伪元素 before ,加载默认错误兜底图,利用伪元素 after,展示图片的 alt 信息:
OK,到此,完整的对图片的处理就算完成了,这也比较好的阐述了为什么,对有语义,有 alt 信息的图片,我们应该使用 元素来实现。这是因为,我们可以在错误发生的时候,比较好的对图片进行兜底展示,让用户直观的能够看到 alt 内容。
完整的 Demo 你可以戳这里看看:
CodePen Demo -- 图片处理[15]
当然,上述方案存在两个小问题:
效果仍然还是 OK 的,只是没有了兜底图的展示,在实际使用过程中,需要知道这一点。
本章节,对图片资源的容错及可访问性处理进行了阐述。核心内容在于:
至此,整个现代图片性能优化及体验优化指南[16]到此就圆满结束,整个系列的文章囊括了非常多的新的规范及特性,需要大家在实践中根据实际情况灵活选取使用。
同时,我们也应该能看到,前端技术仅仅在这一小个领域,都在不断的迭代创新。虽然很难,还是需要不断充实自己跟上新的潮流。共勉。
OK,本文到此结束,希望本文对你有所帮助 ????
[1]现代图片性能优化及体验优化指南 - 图片类型及 Picture 标签的使用: https://juejin.cn/post/7198182873366888509。
[2]现代图片性能优化及体验优化指南 - 响应式图片方案: https://juejin.cn/post/7202266382841495611。
[3]现代图片性能优化及体验优化指南 - # 缩放精细化展示及避免布局偏移、拉伸: https://juejin.cn/post/7203012367180185661。
[4]现代图片性能优化及体验优化指南 - 懒加载及异步图像解码方案: https://juejin.cn/post/7204860462240170040。
[5]Usability & Web Accessibility - image: https://usability.yale.edu/web-accessibility/articles/images。
[6]WAI-ARIA 标准: https://www.w3.org/TR/wai-aria-1.1/。
[7]信息性图像: https://www.w3.org/WAI/tutorials/images/informative/。
[8]装饰性图像: https://www.w3.org/WAI/tutorials/images/decorative/。
[9]功能图像: https://www.w3.org/WAI/tutorials/images/functional/。
[10]文本图像: https://www.w3.org/WAI/tutorials/images/textual/。
[11]复杂图像:为了传达数据或详细信息,提供与图像中提供的数据或信息等效的完整文本作为替代文本。: https://www.w3.org/WAI/tutorials/images/complex/。
[12]图像组: https://www.w3.org/WAI/tutorials/images/groups/。
[13]图像映射: https://www.w3.org/WAI/tutorials/images/imagemap/。
[14]图片加载失败后CSS样式处理最佳实践: https://www.zhangxinxu.com/wordpress/2020/10/css-style-image-load-fail/。
[15]CodePen Demo -- 图片处理: https://codepen.io/Chokcoco/pen/WNGgNqv?editors=1100。
[16]现代图片性能优化及体验优化指南: https://github.com/chokcoco/cococss/issues/36#top。
[17]Github -- iCSS: https://github.com/chokcoco/iCSS。
网站栏目:现代图片性能优化及体验优化指南-图片资源的容错及可访问性处理
转载源于:http://www.csdahua.cn/qtweb/news39/399339.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网