link的rel属性有很多的值,不同的值代表了外部资源与本html文档的关系。
rel属性的值可以是:
1、连接外部的样式表,这个是最常用的
指被link链接的css文档是本文档的样式描述文件。
2、链接一个外部的icon用于浏览器的栏目图标和收藏夹图标,地址栏最前面的小图标和收藏夹图标
如图中的图标,
关于rel="icon"属性,主要用途就是如上所示。但是对于IOS的图标,icon属性无效,需使用 apple-touch-icon
and apple-touch-startup-image
。
另外rel="icon" 同时可以附加sizes="32x32"等属性,确保浏览器只会把目标图片解析成32x32的大小。当然,我们可以提供多种大小的图片,浏览器会自行选择最合适的图片。
例如:
关于href指向的资源,图标必须是ico图片,ico图片的制作过程如下:
首先准备一张png图片,再利用在线的转换工具即可转换称为ico图片。
3、rel="alternate"可以定义另外一个版本的文档,可以是Pdf,另外一种语言,另外一种css样式,如下所示
,方便了浏览器插件(例如翻译插件,下载插件)和搜索引擎的搜索。
4、rel="author license",规定一些作者和版权相关的信息。例如,
,url所指向的就是这些信息所在的文档。
5、rel="canonical",用来定义一个权威的版本,保证内容的正确性。
,url所指向的html文档,即使权威版本,内容更加正确,方便搜索引擎的分析。
6、rel="preconnect"或者rel="prefetch"或者rel="preload"等都是用于加快网页的一个加载速度的类型,只有部分浏览器实现了。
preconnect是告知浏览器提前连接指定的url,以便在后面需要使用该连接的时候,连接已经形成,节省了时间。
prefetch是告知浏览器立刻取来url所指向的资源,这个适用于该资源立刻需要被用户使用。
preload是告知浏览器预加载一些url指定的资源,这些资源可能立刻会被使用。
通过预加载,将一些后续需要使用的资源提前下载下来,虽然会导致一开始网页加载的时候,空白一段时间,但是却可以换来后续用户使用体验的增加,使用户在操作网页的时候,不会中途因为等待资源下载而等待。
在上面三种类型之中,preload更加适用于预加载资源。
下面将是一些preload的常用的预加载资源的方式:
preload可以预先加载如下这些资源, 并通过as属性指定如下这些资源类型,并通过type类型指定这些资源中的子资源,例如as="vedio" type="vedio/mp4"
audio
: Audio file.document
: An HTML document intended to be embedded inside a
or
.embed
: A resource to be embedded inside an
element.fetch
: Resource to be accessed by a fetch or XHR request, such as an ArrayBuffer or JSON file.font
: Font file.image
: Image file.object
: A resource to be embedded inside an
element.script
: JavaScript file.style
: Stylesheet.track
: WebVTT file.worker
: A JavaScript web worker or shared worker.video
: Video file.例1:提前下载好script,之后再执行,有可以下载css,font等等
JS and CSS preload example
bouncing balls
例2:提前下载视频资源如下,(当然,还可以提前下载好图片等等,只需要as="image" type="image/png")
Video preload example
8、rel属性配合media属性可根据不同的设备来下载不同的资源
Responsive preload example
My site
Desktop | Mobile | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | Safari on iOS | Samsung Internet | |
Basic support | Full support1 | Full supportYes | Full support1 | Full supportYes | Full supportYes | Full supportYes | Full supportYes | Full supportYes | Full supportYes | Full support4 | Full supportYes | Full supportYes | Full supportYes |
Alternative stylesheets. | ? | ? | Full support3 | ? | Full supportYes | ? | ? | ? | ? | Full support4 | ? | ? | ? |
dns-prefetch Experimental |
Full support46 | ? | Full support3 | ? | ? | ? | Full support46 | Full supportYes | ? | Full support4 | ? | ? | Full supportYes |
manifest ExperimentalNon-standard |
No supportNo | ? | ? | ? | ? | ? | Full support39 | Full support39 | ? | ? | ? | ? | Full support4.0 |
modulepreload Experimental |
Full support66 | ? | ? | ? | Full support53 | ? | Full support66 | Full support66 | ? | ? | Full support53 | ? | ? |
noopener Non-standard |
Full support49 | No supportNo | Full support52 Notes Open |
No supportNo | Full support36 | Full support10.1 | Full support49 | Full support49 | No supportNo | Full support52 Notes Open |
Full support32 | Full support10.3 | Full support5.0 |
preconnect Experimental |
Full support46 | No supportNo | Full support39 Notes Open |
No supportNo | ? | No supportNo | Full support46 | Full support42 | No supportNo | Full support39 Notes Open |
? | No supportNo | Full support4.0 |
prefetch Experimental |
? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
preload Experimental |
Full support50 | ? | No support56 — 57 Notes Open |
? | ? | ? | Full support50 | Full support50 | ? | No support56 — 57 Notes Open |
? | ? | Full support5.0 |
prerender Experimental |
? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |