惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
S
Schneier on Security
P
Privacy & Cybersecurity Law Blog
S
Security @ Cisco Blogs
W
WeLiveSecurity
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
NISL@THU
NISL@THU
T
Troy Hunt's Blog
L
LangChain Blog
L
LINUX DO - 最新话题
T
The Exploit Database - CXSecurity.com
Engineering at Meta
Engineering at Meta
N
News and Events Feed by Topic
A
About on SuperTechFans
N
Netflix TechBlog - Medium
P
Proofpoint News Feed
MyScale Blog
MyScale Blog
Martin Fowler
Martin Fowler
Y
Y Combinator Blog
H
Heimdal Security Blog
aimingoo的专栏
aimingoo的专栏
T
Threat Research - Cisco Blogs
SecWiki News
SecWiki News
Microsoft Security Blog
Microsoft Security Blog
T
Tenable Blog
P
Proofpoint News Feed
H
Hacker News: Front Page
G
GRAHAM CLULEY
I
Intezer
V
V2EX
S
Secure Thoughts
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
Latest news
Latest news
Recent Announcements
Recent Announcements
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
博客园_首页
Webroot Blog
Webroot Blog
博客园 - 三生石上(FineUI控件)
AI
AI
N
News | PayPal Newsroom
Google DeepMind News
Google DeepMind News
Security Archives - TechRepublic
Security Archives - TechRepublic
B
Blog RSS Feed
美团技术团队

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活 翻译 – CSS Sprites:实用技术还是生厌之物? « 张鑫旭-鑫空间-鑫生活 纯CSS实现易拉罐3D滚动效果 « 张鑫旭-鑫空间-鑫生活 纯CSS实现侧边栏/分栏高度自动相等 « 张鑫旭-鑫空间-鑫生活 CSS+JavaScript实现页面不同布局的切换 « 张鑫旭-鑫空间-鑫生活 JavaScript实现最简单的拖拽效果 « 张鑫旭-鑫空间-鑫生活 自己写的无图片版jQuery zxxbox弹出框插件 « 张鑫旭-鑫空间-鑫生活 中国古代道家思想与网页重构的思考 « 张鑫旭-鑫空间-鑫生活 让所有浏览器支持HTML5 video视频标签 « 张鑫旭-鑫空间-鑫生活 纯CSS实现各类气球泡泡对话框效果 « 张鑫旭-鑫空间-鑫生活 JS HEX十六进制与RGB, HSL颜色的相互转换 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变、高光等文字效果 « 张鑫旭-鑫空间-鑫生活 去除冗余 – 精简您的CSS样式代码 « 张鑫旭-鑫空间-鑫生活 对overflow与zoom”清除浮动”的一些认识 « 张鑫旭-鑫空间-鑫生活 jQuery Pagination Ajax分页插件中文详解 « 张鑫旭-鑫空间-鑫生活 absolute绝对定位的非绝对定位用法 « 张鑫旭-鑫空间-鑫生活 网页布局思想浅议-淘宝新版首页为实例 « 张鑫旭-鑫空间-鑫生活 回流与重绘:CSS性能让JavaScript变慢? « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(二) « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(一) « 张鑫旭-鑫空间-鑫生活 60个极富创造性的震撼的电影海报设计 « 张鑫旭-鑫空间-鑫生活 jQuery Lightbox(balupton版)图片展示插件讲解 « 张鑫旭-鑫空间-鑫生活 博客内嵌flash音乐播放器代码、下载与使用 « 张鑫旭-鑫空间-鑫生活 CSS3 animate实现图片墙3D翻转效果 « 张鑫旭-鑫空间-鑫生活 图片旋转效果的一些研究、jQuery插件及实例 « 张鑫旭-鑫空间-鑫生活 CSS3 border-image详解、应用及jQuery插件 « 张鑫旭-鑫空间-鑫生活 jQuery-两款不同原理的圆角插件讲解 « 张鑫旭-鑫空间-鑫生活 页面可用性之outline轮廓外框的一些研究 « 张鑫旭-鑫空间-鑫生活 CSS3 transition实现超酷图片墙动画效果 « 张鑫旭-鑫空间-鑫生活 HTML CSS列表元素ul,ol,dl的研究与应用 « 张鑫旭-鑫空间-鑫生活 jQuery图片文本滚动切换插件jCarousel中文翻译与详解 « 张鑫旭-鑫空间-鑫生活 酷酷的jQuery鼠标悬停图片放大切换显示效果 « 张鑫旭-鑫空间-鑫生活 IE6下z-index犯癫不起作用bug的初步研究 « 张鑫旭-鑫空间-鑫生活 checkbox复选框的一些深入研究与理解 « 张鑫旭-鑫空间-鑫生活 jQuery之使用slideToggle实现垂直下拉菜单 « 张鑫旭-鑫空间-鑫生活 jQuery-innerfade内部列表自动淡入淡出插件 « 张鑫旭-鑫空间-鑫生活 jQuery-火焰灯效果导航菜单 « 张鑫旭-鑫空间-鑫生活 IE下css bug集合-翻译自haslayout.net « 张鑫旭-鑫空间-鑫生活 翻译-IE7/8@font-face嵌入字体与文字平滑 « 张鑫旭-鑫空间-鑫生活 jQuery-马化腾产品设计与用户体验的一些技术实现 « 张鑫旭-鑫空间-鑫生活 像素的世界及其在web开发制作中的应用 « 张鑫旭-鑫空间-鑫生活 css行高line-height的一些深入理解及应用 « 张鑫旭-鑫空间-鑫生活 CSS实现圆角六色渐变自适应按钮详解 « 张鑫旭-鑫空间-鑫生活 我熟知的三种三栏网页宽度自适应布局方法 « 张鑫旭-鑫空间-鑫生活 jQuery照片图像剪裁插件Jcrop中文翻译详解 « 张鑫旭-鑫空间-鑫生活 Ajax Upload多文件上传插件翻译及中文演示 « 张鑫旭-鑫空间-鑫生活 告别图片—使用字符实现兼容性的圆角尖角效果beta版 « 张鑫旭-鑫空间-鑫生活 大小不固定的图片、多行文字的水平垂直居中 « 张鑫旭-鑫空间-鑫生活 jQuery boxy弹出层对话框插件中文演示及讲解 « 张鑫旭-鑫空间-鑫生活 JavaScript实现新浪微博文字放大显示动画效果 « 张鑫旭-鑫空间-鑫生活 翻译:让网络更快一些——最小化浏览器中的回流(reflow) « 张鑫旭-鑫空间-鑫生活 jQuery之addClasas与removeClass使用实例 « 张鑫旭-鑫空间-鑫生活 关于Google圆角高光高宽自适应按钮及其拓展 « 张鑫旭-鑫空间-鑫生活 JavaScript实现图片幻灯片滚动播放动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery-鼠标经过显示大图并跟随鼠标效果插件 « 张鑫旭-鑫空间-鑫生活 关于gif图片(或png8)杂边锯齿的问题 « 张鑫旭-鑫空间-鑫生活 对html与body的一些研究与理解 « 张鑫旭-鑫空间-鑫生活 鲜为人知的一个解决兼容性问题的利器——小数 « 张鑫旭-鑫空间-鑫生活 搜狐白社会似iphone短信对话框效果的优化 « 张鑫旭-鑫空间-鑫生活 关于文字内容溢出用点点点(…)省略号表示 « 张鑫旭-鑫空间-鑫生活 jquery之append与insertBefore使用实例 « 张鑫旭-鑫空间-鑫生活 jQuery之图片关联伸缩效果 « 张鑫旭-鑫空间-鑫生活 jquery之图片左右切换动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery之replace字符串替换实现不同尺寸图片切换 « 张鑫旭-鑫空间-鑫生活 jQuery-实现图片的放大镜显示效果 « 张鑫旭-鑫空间-鑫生活 jQuery-单击文字或图片内容放大显示效果插件 « 张鑫旭-鑫空间-鑫生活 reflection.js-实现图片投影倒影效果js插件 « 张鑫旭-鑫空间-鑫生活 jQuery-很酷的弹出层效果js插件 « 张鑫旭-鑫空间-鑫生活 复选框单选框与文字对齐问题的研究与解决 « 张鑫旭-鑫空间-鑫生活 css margin的相关属性,问题及应用 « 张鑫旭-鑫空间-鑫生活 IE6下png背景不透明问题的综合拓展 « 张鑫旭-鑫空间-鑫生活
HTML rel属性值释义大全 « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2019-06-03 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=8488
本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。

一、HTML rel属性值索引

HTML中有一个名为rel的属性,是relationship这个单词的缩写,指明两个文档之间的关系,专门用来链接相关元素上,如<a><area><form><link>元素上,因此rel的属性值也是“链接类型”的代称。

rel支持非常多的属性值,包含的知识非常多,且有些属性值非常重要,完整细读至少需要30分钟时间。

alternatearchivesauthorbookmarkcanonicaldns-prefetchexternalfirsthelpiconimportindexlastlicensemanifestmodulepreloadnextnofollownoopenernoreferreropenerpingbackpreconnectprefetchpreloadprerenderprevsearchshortlinksidebarstylesheettagup

二、33个rel属性值完全展示

1. rel=”alternate”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link> <form>

单词alternate有交替、替换的意思。顾名思意就是链接有替换内容。主要有下面3大应用场景,有些场景还非常实用。

  1. 用在<link>元素中,和stylesheet链接类型一起使用,配合title属性(必须),可以定义替换CSS,可以以一种体验更好的方式实现类似换肤这种功能。

    换肤效果示意

    兼容性非常好,IE,Chrome和Firefox均支持这种更原生的换肤效果实现。

    具体原理与实现可以参见这篇热门文章:“link rel=alternate网站换肤功能最佳实现”。

  2. 如果网站包含RSS订阅。可以使用该值进行指明,需要设置type属性值为application/rss+xml或者application/atom+xml(ATOM是一种订阅网志的格式。一种Web feed,和RSS相类似)。例如:
    <link rel="alternate" type="application/rss+xml" href="https://zhangxinxu.com/feed" />

    或者使用在指向RSS订阅地址的<a>元素上:

    <a rel="alternate"t ype="application/rss+xml" href="https://zhangxinxu.com/feed">RSS订阅</a>
  3. 还可以用来定义用来替换的页面。场景较多,例如:
    • media响应处理,小于640像素时候,告诉用户或者设备(或搜索引擎),还有移动站页面,例如:
      <link rel="alternate" media="only screen and (max-width: 640px)" href="https://m.zhangxinxu.com/" />
    • 多语言时候告诉用户或者设备(或搜索引擎)还有其他语言的网站,需要hreflang属性同时设置,例如西班牙语:
      <link rel="alternate" href="http://es.zhangxinxu.com/" hreflang="es" />

      或者直接链接也可以:

      <a href="http://es.zhangxinxu.com/" hreflang="es" rel="alternate">西班牙语</a>
    • 指向另外的格式,例如PDF文件,需要type属性同时设置(值为对应文件的MIME type值)。
    • 或者上面混合使用。

2. rel=”archives”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link> <form>

archives语义是归档。此rel属性值可以用来定义指向归档语义的超链接。例如,我的博客的每月索引页的<a>链接就可以使用这个值。

例如:

<a href="https://www.zhangxinxu.com/wordpress/2019/05/" rel="archives">2019年五月</a>

注意后面有s,直接rel="archive"是不正确的,不要使用。

3. rel=”author”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link> <form>

链接指向作者介绍页。

例如:

<a href="https://www.zhangxinxu.com/life/about/" rel="author">张鑫旭</a>

链接地址支持直接href属性值以mailto:开头,可以呼起邮件客户端发送邮件,但是在网页中其实不推荐这么做,因为容易被爬虫把邮箱爬过去。推荐作为是链接地址执行作者信息介绍页面,然后通过rel="author"增强这个链接的语义。

4. rel=”bookmark”

允许使用的链接元素 不允许使用的链接元素
<a>、<area> <link>、<form>

bookmark的语义是书签。

通常用在指向文章内容的永久链接上,例如本站的列表页每一个文章链接元素就有设置rel=bookmark

本站文章链接和rel=bookmark

5. rel=”canonical”

允许使用的链接元素 不允许使用的链接元素
<link> <a>、<area>、<form>

canonical是规范的意思,只能作用在<link>元素上,此值的作用与搜索引擎有关,可以为类似网页或重复网页指定规范网页。

拿Google搜索举例,如果您的某一个网页可通过多个网址访问,或者您的不同网页包含类似内容(例如,某个网页既有移动版,又有桌面版),那么 Google 会将这些网页视为同一个网页的重复版本。Google 会选择一个网址作为规范版本并抓取该网址,而将所有其他网址视为重复网址并降低对这些网址的抓取频率。

如果您未明确告知 Google 哪个网址是规范网址,Google 就会替您做出选择,或会将这两个版本视为同等重要,这可能会导致出现一些不当的行为。

那如何让Google知道哪个网址是最规范最优先的呢?其中一个方法就是rel=canonical <link>标记。

例如wordpress文章链接地址有多种URL表示,比如我希望用户通过 https://www.zhangxinxu.com/wordpress/2019/05/html-a-rel/(而非 https://www.zhangxinxu.com/wordpress/?p=8488)访问这篇文章。则可以在<head>中新增如下所示的代码:

<link rel="canonical" href="https://www.zhangxinxu.com/wordpress/2019/05/html-a-rel/" />

如果规范网页有移动版,还可以为其添加 rel="alternate" 链接,并使该链接指向此网页的移动版(本站没有专门移动页面,下面地址仅示意):

<link rel="alternate" media="only screen and (max-width: 640px)" href="http://m.zhangxinxu.com/wordpress/2019/05/html-a-rel/">

rel=canonical <link>标记方法的优点是可以映射无限多个重复网页,不足是在大型网站或网址经常改变的网站上维护映射会比较复杂,且仅适用于 HTML 网页,不适用于 PDF 之类的文件(在这种情况下,您可以使用 rel=canonical HTTP 标头)。

6. rel=”dns-prefetch”

允许使用的链接元素 不允许使用的链接元素
<link> <a>、<area>、<form>

只能作用在<link>元素上,作用是DNS预读取。允许浏览器在用户单击链接之前进行DNS查找和协议握手,可以提高页面资源加载速度。

例如:

<link rel="dns-prefetch" href="http://www.zhangxinxu.com/">

此时域名“www.zhangxinxu.com”将被预先解析。

此时如果页面中有链接地址的域名也是“www.zhangxinxu.com”,那么当用户点击这个链接的时候,新打开的页面就少了DNS向上查找这一步,因为之前浏览器已经DNS预读取了,页面呈现速度就会快一些,虽然快的并不是很多,但能快一点是快一点。

7. rel=”external”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link> <form>

external是外部的意思。当链接指向的是外部资源或外部链接的时候,可以使用该属性。主要作用是告诉搜索引擎,这是一个外部链接。常常和nofollow值一起使用,例如:

<a href="http://example.com/" rel="external nofollow">Foobar</a>

需要注意的是rel=external和链接在新窗口打开没有任何关系。

8. rel=”first”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link> <form>

表示指向一个序列页面资源的第一个资源。其它类似的rel链接资源类型有 lastprevnext

9. rel=”help”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link>、<form>
  • 如果元素是<a><area>,则表示超链接指向一个资源,该资源对元素的父元素及其子元素提供了进一步的帮助。
  • 如果元素是<link>,则表示超链接指向一个资源,该资源将对整个页面提供进一步的帮助。

例如我之前制作的一个SVG在线压缩工具,选中任意SVG,有下图所示的一个文案和图标:

帮助链接示意

问号图标是一个超链接,用来对上下文进行帮助说明,也就是解释CSS转义是什么,此时就非常使用使用rel="help",代码如下:

CSS转义<a href="//www.zhangxinxu.com/wordpress/?p=7957" class="icon-a icon-help" title="这个用在什么地方?" rel="help">
    <svg width="18" height="18"><use xlink:href="#icon-help"></use></svg>
</a>

10. rel=”icon”

允许使用的链接元素 不允许使用的链接元素
<link> <a>、<area>、<form>

这个比较常用,可以指定网站小图标。

指定网页favicon,我们常常会在icon类型前面加上shortcut link类型,例如:

<link rel="shortcut icon" href="favicon.ico" />

现在已经9021年了,shortcut这种link类型早已不符合规范,浏览器直接无视,因此,没有必要再使用了,我们直接使用icon类型即可。

//zxx: 根据热心小伙伴评论反馈,增加原因说明。(更新于2019-06-21)

参考下 大漠的《弄懂Favicon》一文的说法 “IE 5本打算用shortcut icon来表示页面和图标之间的关系,但是当这份规范把rel属性值所表示的关系用空格分开后,这样理论上shortcut icon是创建了两种关系,即shortcut和icon。直到2010年HTML5规范把icon单独作为标准标识符。所以,在非IE浏览器中指定favicon时,可以不加shortcut属性。”

例如:

<link rel="icon" href="favicon.ico" />

我们也可以使用PNG格式的图像作为favicon,如果是多个icon,我们还可以使用type或者sizes等属性指定不同的类型和尺寸。例如:

<link rel="icon" type="image/png" href="/path/to/icons/favicon-16x16.png" sizes="16x16">
<link rel="icon" type="image/png" href="/path/to/icons/favicon-32x32.png" sizes="32x32">
...

favicon如果深入,涉及到的知识点会很多,这里不展开,之后会专门写文章介绍。

11. rel=”import”

允许使用的链接元素 不允许使用的链接元素
<link> <a>、<area>、<form>

就是HTML Imports,Web Components开发重要组成部分之一,例如:

<link rel="import" href="module.html">

HTML Imports居然没有专门写文章介绍,失策,这个回头补上。

12. rel=”index”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link> <form>

表示超链接指向的页面资源是某个具有层级结构的一部分。

如果还存在一个或多个up链接类型,则up链接类型的数目表示层次结构中当前页面的深度。

这个属性在HTML5规范出来之后就已经被舍弃了,大家了解即可。

13. rel=”last”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link> <form>

表示指向序列页面的最后一个页面。其它类似的rel链接资源类型有 firstprevnext

14. rel=”license”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link>、<form>

license语义是许可证,你也可以理解为版权说明。例如一个指向MIT license说明或者BSD license说明的超链接,就可以使用此rel属性值。

<a href="/somesite/bsd-license" rel="license">BSD license</a>

copyright这个值虽然同义,也能识别,但是是不正确的请不要使用。

15. rel=”manifest”

允许使用的链接元素 不允许使用的链接元素
<link> <a>、<area>、<form>

指定清单文件,用做Web应用程序清单部署,例如:

<link rel="manifest" href="/manifest.webmanifest">

.webmanifest是约定俗成扩展名,返回文件内容类型需要是:Content-Type: application/manifest+json,也支持.json扩展名的清单文件。

manifest可以让webapp变得更加native,离线开发时候也很有用。

16. rel=”modulepreload”

允许使用的链接元素 不允许使用的链接元素
<link> <a>、<area>、<form>

modulepreload可以用来预加载原生模块脚本,例如:

<head>
  <link rel="modulepreload" href="super-critical-stuff.mjs">
</head>
[...]
<script type="module" src="super-critical-stuff.mjs">

为何不使用<link rel="preload">加载模块JS呢?因为<script type="module">没有crossorigin属性,和普通的<script><link>元素不一样。更多关于modulepreload知识可以参见这篇文章

17. rel=”next”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link>、<form>

表示指向序列页面的下一个页面。其它类似的rel链接资源类型有 firstlastprev

18. rel=”nofollow”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<form> <link>

rel=nofollow可让网站站长告诉搜索引擎“不要跟踪此网页上的链接”或“不要跟踪此特定链接”。

例如登录页面无需抓取,可以:

<a href="signin.php" rel="nofollow">登录</a>

但是,不同搜索引擎策略不一样,至少Google是不抓取的。

19. rel=”noopener”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<form> <link>

这是一个很重要的且常用的rel属性值,与安全相关。

如果我们的链接元素没有设置noopener,则在新窗口打开这个链接的时候,则这个新窗口页面可以通过window.opener获取来源页面的窗体对象,于是可以改变原页面URL地址之类的事情。

例如这里有个名为“About rel=noopener”的测试页面,此时URL地址是“https://mathiasbynens.be/demo/opener”。

点击测试页面上前两个测试链接(直接点击,不要按住Ctrl键再点击),例如点击下面这个跨域地址:

跨域地址点击提示

此时会进入另外一个不同域名的测试页面,可以看到域名和文案,我翻译下就是:

回到之前页面看看

此时,我们在回到之前页面,会发现URL后面被悄悄地增加了一个锚点地址,同时页面上出现了一些有趣的文字:

地址被改变了

这里仅仅是一个简单的恶作剧,实际上如果是真实的页面场景,不怀好意的人可以把你这个原页面跳转到一个高仿的诈骗页面,是不是很危险的一件事情?

因此,如果您的网站上有外部的链接地址,一定要记得加上noopener

20. rel=”noreferrer”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<form> <link>

当导航到其他页面的时候,可以阻止浏览器向跳转页面发送页面地址以及其他值。

看描述以为作用和在页面头部设置referer meta信息一样:

<meta name="referrer" content="no-referrer">

结果在Firefox以及Chrome浏览器下测试了下,不知道是不是我打开方式的的问题,没有效果。例如新浪微博图床图片前段时间不允许外站访问了,但是设置referrer为no-referrer是可以呈现的,但是使用rel="noreferrer"链接测试的时候依然无法显示。

后来我翻了下,我之前有一篇关于document.referrer的狗粮文,其中有提到rel="noreferrer"。那就是如何页面是通过设置了rel="noreferrer"<a>元素访问,则此时document.referrer是空,没有来源。

21. rel=”opener”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<form> <link>

这是个还处于实验阶段的新特性。openernoopener的语义完全是相反的,表示超链接出去的页面有window.opener,为什么会有这个属性值呢?

因为2018年10月10日“萌节”这天,cdume在related HTML规范讨论中发表了如下提议:

Windows opened via <a target=_blank> should not have an opener by default

也就是设置了target=_blank<a>元素默认就没有opener,这样更安全。收到很多点赞,规范也会跟进。于是就有问题了,如果开发者希望页面有opener该怎么处理呢?

于是就有了rel="opener",如果一个链接元素设置了target=_blank,同时希望新开页面有window.opener对象,则可以给链接元素添加rel="opener"

22. rel=”pingback”

允许使用的链接元素 不允许使用的链接元素
<link> <a>、<area>、<form>

pingback估计了解的开发人员不多,如果是wordpress资深用户,应该会比较熟悉。在运管WordPress博客的时候,后台评论经常看到来自某一篇文章的pingback,表示你这篇文章被引用了。pingback可以让Web作者追踪什么人链接至他的文章。

pingback有专门的调用与协议规范,有兴趣可以参见pingback 1.0规范

例如我的博客头部HTML中就有相关使用:

<link rel="pingback" href="https://www.zhangxinxu.com/wordpress/xmlrpc.php" />

23. rel=”preconnect”

允许使用的链接元素 不允许使用的链接元素
<link> <a>、<area>、<form>

实验阶段属性值。由于是渐进增强特性,因此,可以放心使用。

作用是告知浏览器提前连接链接地址对应站点,不过只是连接,并不会公开任何私人信息或者下载任何内容。好处是打开链接内容的时候可以更快的获取(节约了 DNS 查询、重定向以及指向处理用户请求的最终服务器的若干往返)。

例如:

<link rel="preconnect" href="https://www.zhangxinxu.com">

上面这段HTML作用是浏览器知道我们打算连接到 www.zhangxinxu.com 并从其中获取内容,然后浏览器会提前做好连接。

但是preconnect并不是没有成本的,千万不能滥用。<link rel="preconnect">会占用宝贵的 CPU 时间,如果用户没有在 10 秒内使用该连接,资源浪费的情况就会变得更严重,因为当浏览器关闭连接时,所有已完成的连接都将遭到浪费。

因此,尽可能使用 <link rel="preload">,一些特殊场景下使用 <link rel="preconnect">

24. rel=”prefetch”

允许使用的链接元素 不允许使用的链接元素
<link>(<a>、<area>之后可能会实现) <a>、<area>、<form>

prefetch表示预获取,通常是一些静态资源。语法如下:

<link rel="prefetch" href="(url)">

prefetch 最适合抢占用户下一步可能进行的操作并为其做好准备,例如搜索结果列表中首个产品的详情页面或搜索分页内容的下一页。

<link rel="prefetch" href="page-2.html">

prefetch兼容性还不错,除了目前Safari不支持以为,其他浏览器都挺不错的,如下图所示:

prefetch兼容性截图

25. rel=”preload”

允许使用的链接元素 不允许使用的链接元素
<link> <a>、<area>、<form>

preload表示预加载。告诉浏览器这些资源你先帮我加载,之后我要使用。例如:

<link rel="preload" as="script" href="super-important.js">
<link rel="preload" as="style" href="critical.css">

请注意,<link rel=”preload”>是强制浏览器执行的指令,不只是可选提示,与上面的preconnectprefetch是不一样的。

因此,使用preload时一定要保证内容会被使用,如果提取的资源3秒内没有被当前页面使用,Chrome开发者工具的控制台会触发警告!

preload警告提示

preload的兼容性如下截图:

preload兼容性

虽然Safari浏览器支持了,但是Firefox却还需要手动开启,不过看样子Firefox很快就会绿色支持了。总之,兼容性还是可以的,可以用起来,优化网页资源的开发与调用。

26. rel=”prerender”

允许使用的链接元素 不允许使用的链接元素
<link> <a>、<area>、<form>

prerender表示预渲染。告知浏览器在背后先默默渲染页面,当用户之后导航到这个页面时候会大大加快加载速度。

语法如下:

<link rel="prerender" href="(url)">

prefetch区别在于,prefetch获取页面并不会加载页面中的css和js资源,更多是页面本身,但是prerender已经在背后默默做起渲染的事情,预处理要更进一步。

目前兼容性不算很好,也就Chrome PC端支持不错,且也是刚支持不久。

s

27. rel=”prev”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link>、<form>

表示指向序列页面的上一个页面。其它类似的rel链接资源类型有 firstlastnext

28. rel=”search”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link>、<form>

表示链接地址是当前网站或资源对于的搜索文档接口页面。

以及其他一些类似插件的作用。例如我们设置type属性值为application/opensearchdescription+xml,则对应的资源(OpenSearch描述文件)可以作为Firefox或者Internet Explorer的搜索插件。

例如在<head>标签里加上:

<link rel="search" type="application/opensearchdescription+xml" href="provider.xml" title="关键词搜索" />

provider.xml的内容为:

<?xml version="1.0" encoding="utf-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
 <InputEncoding>UTF-8</InputEncoding>
 <ShortName>关键词搜索</ShortName>
 <Description>关键词搜索</Description>
 <Image height="16" width="16" type="image/vnd.microsoft.icon">/favicon.ico</Image>
 <Url type="text/html" template="/wordpress/?s={searchTerms}" />
</OpenSearchDescription>

我弄个了简单的静态页面测试了下,嘿哟喂,真的可以(Firefox浏览器下截图)。

搜索栏多了个搜索

这样,网站所有页面,就算没有搜索框也可以搜索了,不过Chrome浏览器地址栏没搜索框,Firefox和IE浏览器支持,这投入产出比有些低,不过可以作为有趣的案例和同事分享分享。

29. rel=”shortlink”

允许使用的链接元素 不允许使用的链接元素
<link> 不详

网站当前页面对应的短链接,这样分享链接的时候要更容易(微博字数限制,微信或QQ中地址呈现等)。

例如,我的这篇博客文章头部就有shortlink的应用,HTML如下:

<link rel='shortlink' href='https://www.zhangxinxu.com/wordpress/?p=8488' />
允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<form> <link>

sidebar曾经是HTML规范的一部分,但是最近已经从规范中删除掉了,Firefox 63之后的版本已经不支持。这里不展开,其语义就是指向可以帮助浏览二级浏览上下文的资源,例如侧边栏。

31. rel=”stylesheet”

允许使用的链接元素 不允许使用的链接元素
<link> <a>、<area>、<form>

指向样式表资源,例如:

<link rel="stylesheet" href="./dashicons.min.css" type="text/css" media="all" />

这个几乎每一个网页都会使用,大家应该都很熟,就不多说了。

32. rel=”tag”

允许使用的链接元素 不允许使用的链接元素
<a>、<area> <link>、<form>

表示指向表述当前文档标签的链接。例如wordpress文章中的标签链接都有设置该属性值,例如:

标签语义示意

因此SEO会更加精准,质量更高。

33. rel=”up”

允许使用的链接元素 不允许使用的链接元素
<a>、<area>、<link> <form>

表示当前页面是层次结构的一部分,并且超链接指向该结构的更高级别资源。

up链接类型的数量表示当前页面和链接资源之间的深度差。

三、结束语

嘛呀,不简单,1万三千多字,这样的长篇通常没什么人会耐心看完的,历史经验告诉我,HTML范畴,又是小众属性,内容又长,虽然是稀缺技术资源内容,但注定要压箱底落灰。

但这样的内容恰恰是那些真正热爱技术的人需要的,抛开表面与功利,做真正有价值,且价值深远的事情。

本文很多rel属性值都是只做了简单的介绍,偏广度,以后有机会,会从深度角度介绍一些属性值。

参考文档:

以上,感谢阅读到这里!

本文为原创文章,欢迎分享,勿全文转载,如果内容你实在喜欢,可以加入收藏夹,永不过期,而且还会及时更新知识点以及修正错误,阅读体验也更好。
本文地址:https://www.zhangxinxu.com/wordpress/?p=8488

(本篇完)