0

a:link、a:visited、a:hover、a:active如何正确使用

1.首先说一说<a>标签的作用是什么。



<a> 标签定义超链接,用于从一张页面链接到另一张页面。



<a> 元素最重要的属性是 href 属性,它指示链接的目标。



在所有浏览器中,链接的默认外观是:

  • 未被访问的链接带有下划线而且是蓝色的
  • 已被访问的链接带有下划线而且是紫色的
  • 活动链接带有下划线而且是红色的



<a>标签有一个很重要的属性:target,它用于规定在何处打开链接文档,取值有:_blank;_parent;_self;_top。这个我后面也会小小地总结一下。


  1. a链接的四种状态



    先普及一个概念:伪类——它的作用是CSS 用于向某些选择器添加特殊的效果,是css内植类css内部本身赋予它一些特性和功能。



    a标签中有四个伪类,分别是:link、visited、hover、active



    (1)link   作用:设置标签a在未被访问前的样式表属性。

    (2)visited  作用:设置标签a在其链接地址已被访问过时的样式表属性。

    (3)hover   作用:设置标签a在鼠标悬停时的样式表属性。

    (4)active   作用:设置标签a在被用户激活(在鼠标点击与释放之间发生的事件)时的样式表属性。



    定义CSS时候的顺序不同,也会直接导致链接显示的效果不同。原因可能在于浏览器解释CSS时遵循的“就近原则”。正确的顺序:a:link、a:visited、a:hover、a:active





    3.举个例子,如果想让未访问链接颜色为蓝色,活动链接为绿色,已访问链接为红色:



    第一种情况:我定义的顺序是a:visited、a:hover、a:link,这时会发现:把鼠标放到未访问过的蓝色链接上时,它并不变成绿色,只有放在已访问的红色链接上,链接才会变绿。



    第二种情况:我把CSS定义顺序调整为:a:link、a:visited、a:hover,这时,无论你鼠标经过的链接有没有被访问过,它都会变成绿色啦。



    这是因为,一个鼠标经过的未访问链接同时拥有a:link、a:hover两种属性,在第一种情况下,a:link离它最近,所以它优先满足a:link,而放弃a:hover的重复定义。在第二种情况,无论链接有没有被访问过,它首先要检查是否符合a:hover的标准(即是否有鼠标经过它),满足,则变成绿色,不满足,则继续向上查找,一直找到满足条件的定义为止。

    下面是样式代码,可以自己试一下

    
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>css Demo</title>
    <style type="text/css">
    /*第一种情况css顺序*/
    a:visited {color: #FF0000} /* 已访问过的状态,红色 */
    a:hover {color: #00FF00} /* 鼠标按下去时的状态,绿色 */ 
    a:link {color: #0000FF} /* 未访问时的状态,蓝色 */

/第二种情况css顺序/
/*
a:link {color: #0000FF} 
a:visited {color: #FF0000} 
a:hover {color: #00FF00} 
*/
</style>
</head>

<body>
<a href="http://www.jbsage.com";>我是超链接</a>
<a href="" target="_self">点我</a>
</body>
</html>


总而言之,在CSS中,如果对于相同元素有针对不同条件的定义,宜将最一般的条件放在最上面,并依次向下,保证最下面的是最特殊的条件。这样,浏览器在显示元素时,才会从特殊到一般、逐级向上验证条件,才会使你的每一个CSS语句都起到效果。当然,如果故意打乱顺序,也会造成一些特殊的效果。比如,可以为链接制造出下划线颜色与文字颜色的差异。





其实这个CSS问题早已有高人提出啦,还是个老外呢。他给总结了一个便于记忆的“爱恨原则”(LoVe/HAte),即四种伪类的首字母:LVHA。



再重复一遍正确的顺序:a:link、a:visited、a:hover、a:active .



最后经验补充:



1.鼠标经过的“未访问链接”同时拥有a:link、a:hover两种属性,后面的属性会覆盖前面的属性定义;



2.鼠标经过的“已访问链接”同时拥有a:visited、a:hover两种属性,后面的属性会覆盖前面的属性定义;



所以说,a:hover定义一定要放在a:link、a:visited的后面!