用 CSS 突出显示不同类型的链接,区分网站内链和外链

最近把博客指向外部的链接全部启用新窗口打开了,觉得不可能要求大家都像我一样习惯用右键选择新窗口打开!!但又觉得不是很符合“国际标准”,呵呵,大家可能发现像 Google 等网站都是默认在本窗口打开链接的,而 W3C 也将target=”_blank” 排除在了标准之外,据说这样更符合易用性、友好性的用户体验。想想也是,不经过用户同意,没有明确提示就打开一 个新窗口的确有点不礼貌。

于是,我们就给用户一个提示,让外部链接看起来不一样,让用户选择是离开当前站点,还是新窗口或新的标签页中打开这个链接。今天,就介绍一下如何用 CSS 实现突出显示不同类型的链接,但这里并没有实现自动让外部链接新窗口打开,因为这不是 CSS 的能力范围之内,但也算是 CSS 应用的一个技巧吧!

这种例子像 维基百科 就是一个很好的例子,在外部链接旁边加一个小图标,而且对于离站链接的图标已经出现了一种约定:一个框加一个箭头。

实现这种效果最容易的方法是在所有外部链接上加一个类,然后将图标作为背景图像应用。

.external{
background: url(images/externalLink.gif) no-repeat right top;
padding-right:10px
}

如上面的示例中,给链接设置少量的右填充,从而给图标留出空间,然后将图标作为背景图像应用于右上角。尽管这个方法是有效的,但必须手工地在每个外部链接上添加类,有办法让 CSS 判断链接是否是外部链接吗?确实有办法,我们可以用属性选择器。

CSS3 扩展了属性选择器的功能,提供了子字符串匹配属性选择器,这些选择器允许通过对属性值的一部分和指定的文本进行匹配来寻找元素。

这种技术的工作方式是使用 [att^=val] 属性选择器寻找以文本 http: 开头的所有链接:

a[href^="http:"]{
background: url(images/externalLink.gif) no-repeat right top;
padding-right:10px;
}

这应该会突出显示所有的外部链接,但也会选中使用绝对 URL 而不是相对 URL 的内部链接,为了避免这个问题,需要重新设置指向自己站点的所有链接。

a[href^="http://yoursite.com"],a[href^="http://www.yoursite.com"]{
background-image:none
padding-right:0;
}

大多数符合标准的浏览器都支持这种技术,而老式浏览器(比如 IE6 和更低版本)会忽略它。

当然,我们还可以扩展这种技术,如对邮件也进行突出显示。

a[href^="mailto:"]{
background: url(images/email.png) no-repeat right top
padding-right:10px;
}

我们还可以用 CSS 选择器来区分一些下载链接,如一个 PDF 或 Word 文档。这要使用 [att$=val] 属性选择器,它寻找以特定值结尾的属性:

a[href$=".pdf"]{
background: url(images/pdfLink.png) no-repeat right top
padding-right:10px;
}
a[href$=".doc"]{
background: url(images/pdfLink.png) no-repeat right top
padding-right:10px;
}

类似的还有 RSS(feec) 链接:

a[href$=".rss"], a[href$=".rdf"]{
background: url(images/feedLink.png) no-repeat right top
padding-right:10px;
}

这些技术都有助于改进用户在站点上的浏览体验,让用户明确地了解单击链接时会发生的情况,避免不必要的取消操作和烦恼。

但本方法对 IE6 没有效果,而且并没有实现自动让外部链接在新窗口打开。如果想实现这样的效果,就必须用到 JavaScript 和 DOM ,本站现在用的是 jQuery 的方法。也只需要几句代码就可以实现,具体的下次再介绍! :grin:

Share with Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网

相关文章本月热门点击排行

  • N/A
Post a comment 2008/11/23 – 21:494,064 Views
Post a comment | Trackback URL | RSS Comments 55 Comments
  1. 2009/07/23 at 22:42 | #51

    请问能选择某个页面不显示吗?因为我的link页面和主体日志用的css一样,所以搞到链接页面也有图标。再问一下,那个选择器能判断非或否吗?

  2. 2009/09/11 at 09:09 | #52
  3. 2009/12/15 at 21:36 | #53
    lorenNotify

    如果我想对带有rel=”external”外链语法的链接,出现外链图标,这个如何做?

  4. 2009/12/15 at 21:48 | #54
    lorenNotify

    我采用a[rel^="external"](就相当于a[target^="_blank"])的方式添加图标,但是还是不知道怎么排除图片的链接,点击图片后打开新窗口——这样的图片的旁边也会出现小图标,我就不知道怎么排除了@@~

  5. 2010/01/10 at 21:24 | #55

    这个效果太好了

Comment pages 1 2
3 Trackbacks
  1. [...] 用 CSS 突出显示不同类型的链接,区分网站内链和外链 [...]

  2. By 臻臻.Net on 2009/07/22 at 23:45

    用CSS为外链添加图标…

      把博客外部链接加上小图标,让访客更加容易的分辨外部链接,而且也美观好看。这种例子像维基百科就是一个很好的例子,在外部链接旁边加一个小图标,而且对于离站链接的图标已经出现了一种约定:一个框加一个箭头。
    实现这种效果最容易的方法是在所有外部链接上加一个类,然后将图标作为背景图像应用。
    .external{
    background: url(images/externalLink.gif) no-repeat right top;
    padding-right:10px
    }
    ……

  3. [...] 外部链接效果见这里(这里有更为详细的教程) [...]

Post a Comment

(必填)

(必填,有回复时方便邮件通知)

(可不填,填了方便回访)

Sharing technology, recording life