前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SVG fallback 及可读性

SVG fallback 及可读性

作者头像
腾讯ISUX
发布2018-06-29 16:26:00
7010
发布2018-06-29 16:26:00
举报
文章被收录于专栏:腾讯社交用户体验设计

| 导语 这里谈到的svg回退,不针对于动画的回退,针对于面对高清屏的日益普及项目中所利用svg矢量图形,所做的图片和图标的回退。目前类似的高清处理方案还有icon fonts,也有多倍图,经过项目中不断尝试和总结,svg目前可能是最符合我们预期的方案,无论是浏览器渲染后的效果,还是出于对设计师的工作成本的考虑,以及后期各个环节人员配合的效率来看,svg都有过人之处。(具体推演过程参看ISUX博文)

1. 为什么使用SVG

体积小,可压缩

与同类图片相比,在体积上有优势,同时作为一种XML文件,对gzip的压缩支持度好。

矢量,清晰

可以任意改变大小,不会影响图片质量。

可交互

可对图形元素进行操作。

2. 支持高清屏

2.1 常见的svg使用方法

2.2 background-image

从最基本的背景图说起。

使用方法如下图:

因为各种方法的浏览器支持度会有些许差别,所以单独罗列(点击图片可查看):

回退:

常用的有两种方法,1.使用类名来区分,对不支持的浏览器,单独加载png; 2. 使用-webkit-image-set 写法对支持svg的高清屏,使用svg图片,对于普通屏使用1倍png。

2.3 img标签

用法与图片无异,非常简单。

浏览器支持(点击图片可查看):

回退:

主要有两种方法,一种通过脚本方式,对不支持的浏览器加载普通图片。

(线上有很多成熟的库可以用,比如Modernizr, 是一个开源的功能检测类JS库,可允许基于用户不同UA,开发不同的体验,即在支持HTML5和CSS3的浏览器中利用这些特性开发,又不会牺牲其他不支持这些特性的浏览器的支持,即,比如检测到有CSS3特性时,可以选择是否创建一个基于JS的回退,对不支持的UA降级体验。)

另外一种方法使用标签的支持性与svg支持可以达到降级效果,如果附加上srcset属性,则可以更加细化支持到不同宽度屏幕的精确掌控。

<img srcset="graph-small.png, graph-medium.png 400, graph-large.png 800" alt=“qcloud-logo”>

虽然这种写法简单易行,然而ie至今也不支持元素,那会牺牲掉ie9/10/11下高清屏的体验效果。

2.4 inline SVG

此外SVG还有如标题三种使用方法。

浏览器支持度(点击图片可查看):

回退:

对于此类都可以使用为不支持浏览器提供图片的方式。

特别想说:如果行内的svg大家要使用DataURI的方式以达到减少HTTP请求的目的,那么Base64并不是一个好的选择,它只会造成页面的臃肿,也不利于页面压缩。

2.5 一些思考

在使用SVG之初,还是要考虑清楚是否一定需要对高清适配,此外要采用SVG的图片是否适合做成SVG,再比如,如果SVG承担一部分的动画和可交互效果,那么回退的结果是否会对一大部分用户造成体验上的损失。最后,现在没有一个完美的svg回退效果,所以使用时,需谨慎。

3. SVG的可读性

由于SVG采用的是XML的语法,图形的里的文本内容可以被浏览器,搜索引擎和读屏软件读取,所以本身具有可读性好,有利于SEO,对无障碍友好等特点。

3.1 inline SVG

对于inlineSVG,可以使用标签对图形进行描述,要注意的是,title标签一定要是第一个子元素。

3.2 Img标签

对于

图片方式引入的SVG,以腾讯云的业务为例,如果要展示下图的场景,建议代码如下。

这里面有两点值得注意,1,aria标签;2. alt标签的alternative text

3.2.1 ARIA标签

ARIA是无障碍的一个建议标准,如果要对读屏软件友好,我们需要对图形添加一些无障碍的属性。role="group"或 role="img"指定角色,然后在选择对应的属性进行文字注释,比如上图用到了 aria-labelledby

其中较为常用的标签有以下几种:

属性

适用场景

aria-hidden

用于无实际意义的图片,告诉读屏器可以不读此处内容

aria-label

用于不可见的文字标签

aria-labelledby

用于可见的文字标签

aria-describedby

用于较长的文字描述

这里要注意的是,aria-label与aria-labelledby是一对相爱相杀的怨侣,在W3C中,对他们两个的适用范围有着严格的规定:

If the label text is visible on screen, authors SHOULD use aria-labelledby and SHOULD NOT use aria-label. There may be instances where the name of an element cannot be determined programmatically from the content of the element, and there are cases where providing a visible label is not the desired user experience. Most host languages provide an attribute that could be used to name the element (e.g., the title attribute in HTML [HTML]), yet this could present a browser tooltip. In the cases where a visible label or visible tooltip is undesirable, authors MAY set the accessible name of the element using aria-label. As required by the text alternative computation, user agents give precedence to aria-labelledby over aria-label when computing the accessible name property.

3.2.2 Alternative text

无论是SVG,还是一张普通的图片,我们都需要为它添置alt标签,即使没有内容需要写,但也需要留下一个为空的alt标签:alt="".

什么是一个好的alternative text呢,先举个例子

Example 1:

如上图,页面中要对照片alt标签设置文字,以下哪个选项是最合适的?

A.“fufu的一张照片”

B.“fufu是个学武奇才”

C.   Alt 标签置空 alt=“”

D.“fufu”

A选项的描述毫无意义,B选项中的内容与下面文字有重合,C为空,然后图片又不是确实没有内容,D为最合适的描述。


Example2:

如上图,页面中要对照片alt标签设置文字,以下哪个选项是最合适的?

A.“图片”

B.“fufu”

C.   图片不需要alt属性

D.  Alt标签置空,即 alt=""

A选项无法描述照片内容,B选项的文字与下面标题重复,C选项是在与规范作对,D选项是最好的选择


Example3:

如上图,照片是可点的,页面中要对照片alt标签设置文字,以下哪个选项是最合适的?

A.“查看更多”

B.“fufu的相册入口”

C.   fufu

D.  Alt标签置空,即 alt=""

之前连续选D,但这次再选D就不对了,:)

A选项显然与内容不符,B选项无法从照片中看出来是相册的入口,D选项不能描述链接及图片的指向,因此C选项告诉用户是用一个fufu的链接是最合适的。


Example4:

如上图,照片及文字同时可点,页面中要对照片alt标签设置文字,以下哪个选项是最合适的?

A.“查看更多”

B.“fufu的相册入口”

C.   fufu

D.  Alt标签置空,即 alt=""

此处最佳的选择应该是D,其他原因与上题相似,这里因为有了标题可点,再写fufu有重复之嫌,所以选择D即可。


讲到这里,文章到了尾声,研究了一些规范和资料,所以写了这篇笔记,希望大家读完可以有些收获。

感谢你的阅读,本文由 腾讯ISUX 版权所有,转载时请注明出处,违者必究,谢谢你的合作。

注明出处格式:腾讯ISUX (https://isux.tencent.com/card-design-thinking.html)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯ISUX 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 为什么使用SVG
  • 2. 支持高清屏
  • 3. SVG的可读性
    • 3.2.1 ARIA标签
      • 3.2.2 Alternative text
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档