• (经验)在CSS中定义超链接样式a:link、a:visited、a:hover、a:active的顺序


    文章来自:http://www.qianyunlai.com/post-2.html

    以前用CSS一直没有遇到过这个问题,在最近给一个本科同学做的项目里面。出现一些问题,搜索引擎查了一些网站和资料,发现很多人问到这个问题,给出的结果我试了试,大部分都不正确。

    给出我试的顺序,可能会对大家有一些帮助:

    01 a:link {
    02     color: #000000;
    03     text-decoration: none
    04 }
    05 a:visited {
    06     color: #000000;
    07     text-decoration: none
    08 }
    09 a:hover {
    10     color: #ff7f24;
    11     text-decoration: underline;
    12 }
    13 a:active {
    14     color: #ff7f24;
    15     text-decoration: underline;
    16 }

    a :link、a:hover、a:visited这几个元素,定义CSS时候的顺序不同,也会直接导致链接显示的效果不同。

    我想,原因就在于浏览器解释CSS时遵循的“就近原则”。

    举例来说:

    我想让未访问链接颜色为蓝色,活动链接为绿色,已访问链接为红色:

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

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

    这是因为,一个鼠标经过的未访问链接同时拥有a:link、a:hover两种属性,在第一种情况下,a:link离它最近,所以它优先满足a:link,而放弃a:hover的重复定义。

    在第二种情况,无论链接有没有被访问过,它首先要检查是否符合a:hover的标准(即是否有鼠标经过它),满足,则变成绿色,不满足,则继续向上查找,一直找到满足条件的定义为止。

    一句话:在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的后面,,,

    温故而知新:

      • a:link 设置 a 对象在未被访问前的样式。
      • a:visited 设置 a 对象在其链接地址已被访问过时的样式。
      • a:hover 设置 a 对象在其鼠标悬停时的样式。
      • a:acitve 设置 a 对象在被用户激活(在鼠标点击与释放之间发生的事件)时的样式。
  • 相关阅读:
    OpenStack安装及监控配置视频教程
    具有可视化的功能的一款开源软件Gource
    Ubuntu 12.04使用演示
    VisualRoute for Mac OS 体验
    P1006-传纸条
    Leetcode-1157 Online Majority Element In Subarray(子数组中占绝大多数的元素)
    Leetcode-1156 Swap For Maximum Repeated Substring(单字符重复子串的最大长度)
    Leetcode-1155 Number of Dice Rolls With Target Sum(掷骰子的N种方法)
    Leetcode-1154 Ordinal Number Of Date(一年中的第几天)
    P1508-Likecloud-吃、吃、吃
  • 原文地址:https://www.cnblogs.com/lyc-hp/p/3510069.html
Copyright © 2020-2023  润新知