导航

毅博客

分享本身就是件快乐的事,我因别人得到帮助而感到幸福

« 倾斜的鼠标翻转导航制作上的烦恼position:relative/absolute无法冲破的等级 »

详解链接的rel与target

本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
请大家帮忙:行文措辞难免有错,请大家在阅读时发现错误通过评论方式告诉我。谢谢大家

关于target="_blank"去留的问题在网上已经被反复争议很多次了。有的说要留,有的说要去掉。主张留的一方主要是考虑到target="_blank"的属性目前来讲还没有一个好的方式来解决,而主张去的一方则拿出了rel与JS的解决方案。target="_blank"是否的存在是否有必要我想目前还有很多正处在一种盲区。我查阅了相关的文献,发现其实情况并非是我们所想的那样,事实上target="_blank"并非是不符合标准的,而用rel与JS的解决方案也是没有必要的,因为这是个误区,只要我们了解了rel与target的真正含义我们就清楚了其实这里本不应存在争议。下面我将我通过查阅文献所得到的知识与大家分享,我们先来了解一下target与rel的含义:

target ,允许指定在什么位置显示已经选择的超链接内容。也就是说链接的内容将在什么样的窗口被显示。target 的属性值有四个保留的名称,分别是:_blank,_self,_parent,_top。其中_blank的意思是浏览器总在一个新打开的、未命名的窗口中载入target="_blank"链接的文档。这里大家也许会很不理解“未命名”是什么意思。事实上target 是可以给新打开的窗口赋一个ID,例如:target="name" 这就表明通过target="name"链接载入的文档将会在一个叫"name"的窗口显示。如果没有ID为"name"的窗口,那么浏览器就会新建一个名为"name"的窗口来显示链接文档。如果当前窗口的ID就是"name"那么这个链接文档就会在当前的窗口中替换原有的内容显示出来。而_self的意思其实就是当前文档,<a>的默认目标就是_self,这个属性值一般来说是用不到的。_parent是使链接文档在父级窗口显示,这个属性值只在框架结构中使用,如果身本就是顶级框架,那么其作用与_self相同。_top同样是应用在框架中的,但是他的效果是清除框架来显示目标文档。这对于从框架结构转向无框架结构是很有作用的。

现在我们知道了,target 是一目标显示的属性与浏览器密切相关的。那么rel又是什么呢, 为什么很多人把他当作是target 的替代属性呢?下面我们就来认识一下rel。其实不只有一个rel还有一个与之对应的属性叫rev,这两个属性的意思分别是:从源文档到目标文档的关系;从目标文档到源文档的关系。这里的源文档可以理解为链接所处在的当前文档,而目标文档也就是这个链接将要打开的文档。这下我们应该清楚了,其实rel与rev是一种文档之前的链接关系,而并非是与浏览器相关的如何显示目标文档的属性。

那么rel与rev有哪些关系呢?下面将一一列取并解释其中的含义:

next,链接到下一个文档;
prev,链接到前一个文档;
head,链接到集合中的顶级文档;
toc,链接到集合的目录;
parent,链接到源上面的文档;
Child,链接到源下面的文档;
index,链接到此文档的索引;
glossary,链接到此文档的术语表;

其中next与prev是一组。表明了当前文档与目标文档之前的关系是同级的关系,可以写成这样<a href="movie_002.htm" rel=next rev=prev>。head与toc可以形成一个组合,表示者是由目录链接到最终的文档,或是由文档链接到目录。parent与child是一组,表示着由当前的文档链接到父级文档或是子级文档。而index与glossary可以与head分别组合,形成由文档到索引,或是由索引到文档;文档到术语表或是术语表到文档。

也许这样讲可能还是不很清楚,下面举个例子:我这里整理了一个电影文档资源,那么我需要对这些资源进行分类,我把电影分成:武侠片、战争片、爱情片、恐怖片、纪录片。那么我在电影根目录需要链接到下面的子类的时候那么链接的关系应该是:rel=child rev=parent ,而如果当前是武侠片的频道页,我需要转爱情片频道或是其它频道时,那么链接关系就应该是:rel=next rev=prev,当我们由一个武侠片链接到“卧虎藏龙”这部电影的文档时链接的关系应该是:rel=head rev=toc,当由“卧虎藏龙”链接到索引的时候链接关系又变成了:rel=index rev=head。

由于目前的CSS还不能抓取rel与rev的属性值,所以没有办法给不同关系的链接提供不同的样式,所以现在rel与rev只是用来使得网页的语义性更为完善。

蓝色理想阅读处:
http://bbs.blueidea.com/thread-2720126-1-1.html

 

 

 

 

 

 资助者链接:pearl necklaces   

作者 / 振之
网站 / 毅博客 http://andy.andymao.com/
电话 / (86)025 5890 9295
  • quote 1.Classicning
  • http://www.classicning.com
  • 原来如此,这个target现在还存在于标准中吗?或者说xhtml的dtd里有target吗?
    rel和rev真是苦恼我很久了,这样想link标签里rel="stylesheet"也可以理解了。

    话说css不是有属性选择器吗
    a[rel='next']{...}
    或者就在文档载入之后用JS遍历,添加样式,这个那本DOM Scripting里的绝招哈,哈哈
  • 2007-2-10 10:29:52 回复该留言
  • quote 2.振之
  • http://www.jonmax.com
  • 其实上target并不存在于xhtml Strict 的DTD中,我也很费解这个问题,不提倡使用_blank我很理解,但是要用REL来代替target我就觉得有点奇怪。后来和一个朋友聊天时从他们那里得知,由于老外们认为在没有得到用户的允许下就打开新窗口是一种不礼貌的行为。所以老外们才开始慢慢的废弃这个属性。昨天与怿飞也谈到这个问题,我们都认为这是价值观差异的问题,并且我们认为这与很多人使用的浏览器的打开新窗口的形式也有关系,很多人只用IE那么新开窗口真的就是新开窗口,而我们这些开发者却是使用带标签的浏览器,新开窗口对于我们来说其实是新开标签。还有我们的新开标签我通常设置在当前左侧后面打开,也就是说打开的时候他不会跳出来影响我当前的阅读!

    我觉得有选择的设定新开窗口是有必要的,但是要限定这个新开窗口的个数。那么_blank的滥用就应该得到制止。

    如果要排除target的使用,就有必要在文档中提示用户如何新开窗口。当估在国内目前应用电脑的人水平高低不一。如何通过自己的行为来打开新窗口我想并不是所有人都清楚的。所以我主张合理的引导,或者是合理的设计吧。比如购物车,我觉得弹出个窗口要比替换更为有用。还有,在一篇文档中,有一些链接,而如果看完这篇文章后再回来点击可能会忘记,不如让其当时就点击放在一边,然后可以继续完成阅读。对于新开窗口跳出来的烦恼我想新的浏览器已经找到了合适的解决方式那就是标签。当然有些人需要被提醒,可以设置新开标签为当前标签,或是标签在后面打开。

    关于CSS的选择器你写的这个是不是CSS3中的,在CSS1与2中,我并没有见到这样的选择器形式!

    你的网站的首页设计得很漂亮!
  • 2007-2-10 11:36:37 回复该留言
  • quote 3.Classicning
  • http://www.classicning.com
  • 我记得当年和别人讨论_blank的时候都说开一个新窗口是件很危险的事情,有可能导致不友好,导致死机,导致电脑爆炸。。。说得都很恐怖

    其实最好的解决办法是像
    http://docs.codehaus.org/display/GEOS/Home
    一样,在通向外面的连接上加上一些图标提示,这样就很不错,也避免了_blank。我记得当年blueidea上也有人提到的。

    不过最严重的问题还是国内很少人知道点击连接的时候用shift和ctrl。
    IE6新开窗口其实并不开新进程,只有点击快捷方式的时候才开新进程,这点很有意思。还有一点就是window.open被人滥用了,本来pop一个窗口是购物车这样的网站很好的选择,但是现在都被当成广告ban了。幸好现在pop出来的广告越来越少了,希望有一天window.open可以复活,我觉得那是不错的替代方法。

    那个属性选择器我是瞄过一眼CSSMastry那本书的时候看到的,我也没有用过,话说还不知道IE支持不支持呢。
  • 2007-2-10 12:14:07 回复该留言
  • quote 4.振之
  • http://www.jonmax.com
  • 其实target不推荐使用也是有道理的,但是在不使用的时候要告诉用户本站要打开新窗口请按住"Shift"键,最好能给出这个键的键盘的位置。这种打不打开新窗口其实是用户行为,如果站在用户是高级用户的基础上来思考,这就非常有必要。

    呵呵,我觉得前期还是要让大家避免使用_blank,因为这个会无止境的新弹出窗品。个人还是推荐使用target="name"来限止窗口弹出的数量,同类的链接就在同一个ID的窗口打开就好了。你可以看看我的首页http://andymao.com/ 这几个链接打开的方式。

    对于被动新开窗口需要在链接上有所提示,这点我觉得非常有必要!至少在弹出来之前也让人有心里准备嘛!
  • 2007-2-10 14:09:50 回复该留言
  • quote 5.Classicning
  • http://www.classicning.com
  • 限定一个名字是很好的办法,短期之内也只能这样
    如果有一天target真的没了,或许会有浏览器提供选项支持rel,比如写个rel="external"就自动新开窗口了

    我想随着html“文档化”,target这个属性的名字就有点局限在PC浏览器里了,很多UA根本没有_blank这么回事。

    写自己的html,让浏览器去解析吧!哈哈!
  • 2007-2-10 15:42:12 回复该留言
  • quote 6.振之
  • http://www.jonmax.com
  • "比如写个rel="external"就自动新开窗口了" 如果是这样为什么要放弃target?难道真是因为target长得难看?呵呵,浏览器永远不应自作主张的分析REL,而REL也决不是用来决定是否要开新窗口的指令!
  • 2007-2-10 22:01:03 回复该留言
  • quote 7.Classicning
  • http://www.classicning.com
  • 我的意思是说浏览器的解析方式和标签本身可以没有关系。

    比如我yy自己做了一款浏览器,我可以进行一个设置,让所有的rel=external的链接都新开窗口。

    为什么target被抛弃我也不知道。但是我猜测target中的值_self,_blank等等都是和我们常用的这种窗口浏览器紧密相关的,这不符合w3c指定标准的意图。他们希望html仅仅是一个文档,单从其中来看和网页、浏览毫无关系,你明白我的意思吗。

    浏览器其实自做主张了很多事情呐,比如默认的h1为什么显示成那么大的字号,有margin和padding,都是浏览器自己决定的哦,w3c可没有做出规范说h1必须给我显示成多大。结果就可以发现不同的浏览器里h1的font-size,margin,padding都是不同的,还有ul等等都是很明显的例子。

    其实怎么表现还是浏览器说得算,样式是这样,行为也是这样。你说是不是?

    又说了,你觉得target算不算行为?
  • 2007-2-10 22:35:44 回复该留言
  • quote 8.振之
  • http://www.jonmax.com
  • 这里存在一个很大的问题就是:target的用处是有选择的或是无节制的用新窗口打开目标文档。那么他与浏览器被用户选择性的去识别REL而去新开窗口的区别是什么呢?当然这里有一点是进步了,那就是说是否每次都打开就是用户根据自己的喜好来改动浏览器来实现。那么问题再折回来,如果是这样我们何不留下target浏览器默认并不去解析他,而用户可以激活这个功能,或是默认是激活的,而用户可以根据提示关掉这个功能。要知道REL其本身不是用来与浏览器相关的。如果需要与浏览器相关联还是用target为好。REL与REV是配合来解释源文档与目标文档之前的关系,这就好比是,我和我老爸是父子关系,那不表明我和我老爸见面一定要拥抱,我们可以握手。我们见面时的行为并不受我们是父子关系的引导。

    我觉得你这个让用户根据设置浏览器来决定是否打开新窗口这点是非常好的,这样解决了所有人的不满。有喜欢的就让他一直用,有不喜欢的就让他们关掉。

    当然去掉这个target还有一个很麻烦的地方,那就是无法让目标链接在指定的窗口打开了,这个在框架中体现的犹为明显。
  • 2007-2-11 11:54:24 回复该留言
  • quote 9.Classicning
  • http://www.classicning.com
  • 坦白说我并不觉得target被去掉只是因为无节制的新开窗口,而是新开窗口本身就是一个罪责。

    另外浏览器如何解析甚至和标签的含义可以完全无关,比如iE解析img的alt,话说浏览器是很霸道的,而未来标签肯定也越来越抽象,不会有一个明显的提示,因为文档的用途很多,具体就以为着耦合
  • 2007-2-11 13:33:24 回复该留言
  • quote 11.phpbird
  • http://www.juyimeng.com
  • 10楼的兄弟,external这个标记主要说明当前连接的属性,是连接到网站外部的,这个东西不是给正常阅读者使用的。
    楼主写的好,分析的透彻,谢谢。
  • 2007-5-16 9:09:40 回复该留言
  • quote 15.总结一下
  • 总结一下:

    就目前应用的情况来说,不扯那么多大道理的话,一定要弹窗时:

    1. 无目的性弹窗用小图标等提示;
    2. 指定弹窗个数,用target="name"限制,不过要搞清楚文档关系,以免本来适合弹两个出来比较,结果变成同一个而相互覆盖了。
    3. 用JS与rel组合的弹窗法我觉得很白痴,牛刀杀鸡只因为理论意义很大。
  • 2007-10-31 14:35:00 回复该留言
  • quote 16.www.lxjk8.com
  • http://www.lxjk8.com
  • 其实target不推荐使用也是有道理的,但是在不使用的时候要告诉用户本站要打开新窗口请按住"Shift"键,最好能给出这个键的键盘的位置。这种打不打开新窗口其实是用户行为,如果站在用户是高级用户的基础上来思考,这就非常有必要。

    呵呵,我觉得前期还是要让大家避免使用_blank,因为这个会无止境的新弹出窗品。个人还是推荐使用target="name"来限止窗口弹出的数量,同类的链接就在同一个ID的窗口打开就好了。你可以看看我的首页http://www.lxjk8.com 这几个链接打开的方式。

    对于被动新开窗口需要在链接上有所提示,这点我觉得非常有必要!至少在弹出来之前也让人有心里准备嘛!
  • 2008-5-29 9:02:33 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog .Theme from Google黑板报 By Washun

Copyright 2005-2007 Jonmax.com. All Rights Reserved.

Search

最新评论及回复

最近发表

资助者链接