Web 浏览器知道页面上哪些链接已被用户访问过(直到缓存被清除)。如果您选择这样做,设计师需要利用 web 浏览器的这种知识。我确信您不需要猜测,这一切都是用 CSS 完成的。如果您选择不为链接(<a> 元素或“锚”元素)应用任何样式,大多数浏览器都有默认样式。通常,蓝色带下划线。在 Firefox 中,已访问的链接会变成紫色带下划线。
您可以通过使用伪类来控制这些锚元素的样式。本教程的目标是让已访问的链接前面有一个复选标记,以提供良好的视觉指示。您可以在 Mike Davidson 的博客 上看到一个实时示例。我们将针对 a:visited 伪类,但我将在本文后面包含有关其他锚伪类的信息。
伪伪类的完美场景
由于目标是在链接中添加复选标记,因此这是 CSS 中“before”或“after”伪类的完美场景。这些类允许您从 CSS 中直接指定页面元素并向其添加内容。以下是一个示例
blockquote:before {
content: "From the article: ";
}
这将在您页面上的每个块引用前面添加“From the article: ” 文本。这会混淆设计和内容的分隔吗?好吧...可能有一点。但实际上并没有。不要把这些内容添加视为内容,而应该将其视为装饰,是您 web 设计的额外装饰。因为这完全存在于您的 CSS 中,所以这并不是屏幕阅读器会看到或会进入 RSS 订阅的内容。
您是否了解我使用伪伪类的目的?
a:visited:before {
content: "";
}
我们可以使用此 CSS 语句来定位已访问的链接,然后在此之前添加内容。现在我们要做的就是在这段内容中添加一个复选标记。这不太直观。您不能像在 HTML 中那样使用常规字形。例如,在大多数浏览器中,放置 ® 将不起作用。您实际上会看到该字符字符串,而不是注册字形。相反,您应该使用正斜杠和字符的 ASCII 码。复选标记的代码是 2713。因此我们有
a:visited:before {
content: "\2713 ";
}
大功告成!完成了!这在 Firefox、Opera、Safari 和...等等...中完美地工作着。
Internet Explorer 6 不支持非锚伪类
哎呀,真可惜。这里您需要问问自己是否在意。我打开了 Mike 的博客,看看他是否处理了 IE6 的问题。没有,他的链接在访问时只是变成灰色并带下划线,但没有使用复选标记。这是一种完全可接受的设计向前兼容形式。您使用的是好的浏览器?很好,您将获得更多更好的功能。您使用的是旧的糟糕的浏览器?没关系,页面仍然可以正常显示和阅读。
但我现在已经决定要这样做,让我们完成它!我们可以在不使用 :before 或 :after 选择器的情况下完成,我们只需使用简单的 a:visited(IE6 能够很好地理解),并设置样式使其包含复选标记。它不会是文本,而是将其制成图形并包含进来,看看吧
a:visited {
padding-left: 14px;
background: url(images/checkmark.gif) left no-repeat;
}
现在我们可以真正庆祝了。万岁!这在所有浏览器中都运行良好。查看 示例页面。
其他锚伪选择器
- a:link – 此伪类没有被广泛使用,因为它有点多余。如果它是一个锚元素,那么它本身就是一个链接。它存在的目的是为了特异性。您可以在这里声明一些样式,这些样式不会像您仅仅为 a 元素设置样式那样级联到其他锚样式。
- a:visited – 您现在应该了解这个。这是用于设置已访问链接样式的伪类,由您的浏览器决定。
- a:hover – 这是最常见的。使用此伪类设置链接的悬停状态样式。
- a:active – 我必须承认,我长期以来对这个伪类感到困惑。这是我认为最好的解释方式。活动状态是指您在 单击并按住 链接时看到的样式。您通常不会看到活动状态太久,因为页面可能正在将您带到另一个页面。不过我认为它可以用于添加一些装饰。有时,只需更改活动状态的颜色就是一个不错的点缀。
以下是一个 记住 锚伪类的不错方法。
我在为我的 nofollow 样式 中使用了一种类似的技术,并结合了非常不语义的图像替换技术。
令人印象深刻的是,从勾号到骷髅标志,有多少种有趣的 ASCII 字符。
我一直避免使用伪选择器,因为 IE 支持不足。但是,您的文章改变了我的想法。谢谢。
更正...我一直避免使用 :before 和 :after 伪选择器,因为 IE 支持不足。
由于 IE6 及更低版本不支持这种方法,因此这是一种非常好的实现方式。
@Tim Nash: 哈哈,我喜欢在 nofollow 链接周围添加一个安全套的想法。您可以使用滑动门技术,将整个链接包裹在一个可展开的安全套图形中,这将非常酷。
@Dennison Uy & Chris: 谢谢,很高兴您喜欢这个想法!
唯一“问题”是,当访问者使用公共终端时会发生这种情况。例如,在网吧或机场。许多系统不会像预期那样清除缓存或网站历史记录,因此您将保留“已访问过此网站”的样式。
然后,用户会在此页面上,想知道所有这些复选标记是做什么用的。
但话又说回来,这只是一个很小的“问题”。
^^ Koew…
您在公共或多用户浏览器上使用任何 a:visited 样式(伪样式或非伪样式)都会遇到这个问题,除非您选择不使用 a:visited 样式。但是那样就没有乐趣了!
很棒的技巧。谢谢!
很棒的文章 Chris!
这个“技巧”本身(css)并不是什么新鲜事物,但将复选标记放在链接前面的概念既有创意又实用。
如果在另一个窗口或选项卡中打开链接,它会动态添加复选标记,这真的太酷了。
太奇怪了,这在我的 Firefox 中不起作用。但在 IE 中一切正常。
奇怪
人们应该足够聪明,知道自己点击了哪些链接。
不错的文章,但您低估了 active 在最后的使用。
active 和 focus 状态对于仅使用键盘的用户非常有用。
如果您使用 Tab 键浏览链接,那么将 focus 状态设置为类似于 hover 状态,可以方便地查看您当前所处的位置。(跟踪光标)
不幸的是,IE 不支持 focus,但支持 active。
因此,通常最好将活动状态、聚焦状态和悬停状态设置为相同或相似的设置。
不错的技巧!
我试了一下,但在顶部菜单栏中使用的图像链接出现问题。我认为,图像链接之前的勾号没有任何用处,也不美观。
你对此有什么想法吗?
我试过,但没有成功
.imageLink {
padding-left: 0px;
background: none;
}
@mike foskett: 你完全正确,我低估了活动链接的重要性。我认为,活动状态的样式应该与悬停状态有所不同,甚至应该更大胆地使用更显眼的颜色变化等等。原因是,在页面上使用 Tab 键跳转到不同的链接时,你永远无法确定下一个链接将指向哪里,所以它应该尽可能地在视觉上吸引你的注意力。而悬停样式则可能不需要如此显眼的变化就能达到效果。
@JM: 是的,你说得对,我应该在文章中对此进行更详细的说明。你需要比我更具体地指出要使用此技巧影响哪些锚链接。如果你的网站有一个“主要内容”区域(例如,典型的 WordPress div.post 区域),你可以只对该区域内的链接使用“勾号”:
.post a { 勾号 CSS }
我认为,几乎所有使用此技巧的人都希望进行类似操作,而不是将其应用于网站上的所有链接,因为正如你所说,在主页面导航等情况下,这样做会显得怪异。
感谢 Chris,你说得对,应该将它们分开处理。
事实上,我使用相同的填充方式来识别链接,例如文档、pdf、word 或其他格式的图标,甚至邮件链接,这些图标都位于链接的右侧。为了避免在图像链接上使用它,我使用了上面提到的类:
.imageLink {
padding-right: 0px;
background: none; }
这种方法效果很好,但添加的 padding-left: 0px 却无法与勾号一起使用。
我并不精通 CSS,但似乎将这些技巧混合应用到同一个链接上并不可行。
仍在寻找解决方案…
所以,如果我没弄错的话,Mike 的示例中没有图像,只有脚本?哇,这太酷了…
我一直以为它是图像。
只有一个问题:对于普通用户来说,它有效吗?
@Jermayn Parker: 是的,我认为 Mike 的勾号是通过类似于 after 选择器添加内容字形的脚本添加的。我认为它是脚本的原因是,在浏览他的 CSS 时,我没有看到任何 :after 选择器。使用图像的优点是,你不需要使用脚本,并且它可以在所有浏览器中正常工作,正如我在文章中提到的。
它对普通用户有效吗?你是说它对普通用户有用吗?是的,它对任何访问者都有效。你是说,普通用户会觉得它有用吗?我不知道,它会在已访问的链接旁边添加一个勾号。我认为这很有用。即使用户没有注意到它,也不会对他们造成任何伤害。
好的,我试着解释我的意思,抱歉!
勾号对普通用户有效吗?普通用户习惯了他们在网络上使用的工具(后退、链接的下划线等等),勾号会影响这些工具吗?
我个人更喜欢勾号,但我有点担心,勾号可能弊大于利。
@Jermayn Parker: 你说的“勾号”是指那个勾选标记吗?从功能上来说,它不会改变任何东西,所以我不认为它会造成任何**伤害**。
因为它是一个背景图像,所以你无法像添加一个真实字符那样选中它,这也是图像技巧的另一个优点,它也证实了这只是一个美观的补充,而不是功能上的调整。
哦,这太棒了。我得在我的新设计中试试。
很棒的文章,效果也很棒,但它在我的 Firefox 中不起作用。在 IE 中则可以正常工作。可能是某个 Firefox 扩展程序在干扰吗?
嘿,谢谢。很棒的小想法。在我的 FF 5.0 中可以正常工作。
今天我一直在思考这篇文章,思考添加这个“功能”会对可用性产生什么影响。我仔细观察了一下页面(示例页面和我的测试页面)来弄清楚,这个新添加的必要信息能为用户体验提供什么。
从我的角度来看,我有点困惑;我并没有从中得到任何益处。
从象征意义上来说,勾号对我意味着什么?我想它意味着“是”或“完成”。但这是互联网世界,它在这里意味着什么呢?
是“好的”链接,还是“网站工作正常”,或者功能列表中的勾选标记?
@James: 从字面上来说,勾号表示“嘿,你已经访问过这个链接”。我认为,在浏览页面时看到一个链接,这个功能会很有用。链接可以有作者想要的任何锚文本,但如果它指向同一个位置,你的网页浏览器会知道这一点,并将其标记为已访问。这样一来,如果你已经点击了“查看原始文章”链接,而文章后面还有指向同一个位置的“了解更多”链接,你就会收到通知,表示你已经看过这个链接了。
在 Firefox 中遇到了一些问题,希望我能解决它们…但这是一个很棒的想法,非常感谢!!1
@Chris: 不要误会我的意思,我知道你想要使用已访问链接的背景图像来表达什么,但我认为,这并不能清楚地向用户表明发生了什么。因此,我快速调查了一下(通过询问用户),结果似乎是,大家一致认为,它意味着链接“没问题”或“可以工作”,而我认为这与你想要表达的意思不同。从可用性的角度来看,这似乎很模糊。
哟,真是个好主意,我肯定会做。
谢谢,伙计!
感谢您提供这个很棒的想法!!!请给我们更多这样的想法!!
感谢您的宝贵建议!!!
完美的示例,让我试试。
我喜欢你对这个模板所做的改进,我给它打 10 分!
我会在我的一个网站上添加一个链接,这样我就能方便地回来查看更多 css 技巧。
很棒的信息。这在 Firefox 中有效吗?
如果我没弄错的话,如果你的链接打开一个新的活动页面(例如使用 _blank),则活动链接状态会显示在原始页面中。(即使用 _blank)。如果两个页面都还处于打开状态,它就会显示,所以如果你返回到原始页面,你就会知道点击了哪个链接打开了弹出窗口页面。
NP
这在 Firefox 3 和 IE8 中仍然有效吗?我注意到,在 Firefox 3 中,很多网站看起来都非常不同,有些甚至无法正常工作。我无法确定这是 Firefox 3 的问题,还是网页设计师不够细心。我一直很喜欢 Firefox 的一个原因是,任何网站都可以正常工作(即使代码很糟糕),但似乎在新版本中这种情况发生了变化。
哇!我以为伪选择器已经没有希望了。事实上,我过去常常删除或完全忽略涉及伪选择器的项目,因为我遇到过它们的问题,以及与浏览器相关的问题。
嗨,Chris,我只是想说一下,你的网站设计非常漂亮。我特别喜欢你底部添加的标签,非常酷。编辑器也很棒!
此致,
Jen
Petbrags 网站创始人 http://www.Petbrags.com
a:visited:before 似乎不再起作用了(至少在 Safari 或 Chrome 上不起作用)。
有人可以确认吗?
我也是这样 :/