为什么不这样:访问过css风格的工作?

时间:2011-11-30 19:24:08

标签: css cross-browser

有什么理由说这不能在Internet Explorer或Chrome上运行:

<html>
    <head>
        <style>
            A {font-weight: bold; color:black;}
            A:visited {font-weight: normal; color: black; }
            .Empty {font-weight: bold; color: black; }
        </style>
    </head>

    <body>
        <a href="http://mysite">click me</a>
    </body>
</html>

我点击的链接永远不会正常,只是保持粗体。在一些其他浏览器上它可以工作。

修改:更改案例不会影响它。

修改:将a更改为:链接不会影响它。

修改:更改颜色,但不是字体重量。

修改:解决方法是更改​​辅助功能以忽略网页颜色。我无法访问源代码,所以我必须这样做。

8 个答案:

答案 0 :(得分:30)

实际上,这与区分大小写无关。这是一项安全功能。 :visited伪类的功能在许多现代浏览器(Fx4,IE9,Chrome)中受到限制,以防止CSS利用:阅读它here

如今,这些浏览器中的getComputedStyle()通常会返回访问过的链接的值,就好像它们没有被访问过一样。但是,我可以简单地想象一下:对于访问过的链接使用font-weight,元素的宽度会发生变化,因此允许更改font-weight :visited链接的浏览器实际上不会修复安全漏洞

因此,此问题没有解决方法。

答案 1 :(得分:2)

从2020年开始,仍然可以使用:visited的一个有用属性是background-color。所以尝试:

:visited {background-color:red !important;}

:visited也可用于非元素。

(注意:如果可以,请删除!important。不好的做法。请在此处快速使用它。)

答案 2 :(得分:2)

我遇到了同样的问题。我注意到当您在浏览器中以访客身份登录时会出现此问题(我使用 Chrome)。因此,您的代码没有问题。

所以解决方案很简单:

<块引用>

只需在 Web 浏览器中登录您的任何帐户(我再一次只讨论 Google Chrome)

答案 3 :(得分:1)

CSS本身不区分大小写,但如果使用此样式的HTML文件具有XML声明和XHTML doctype,则该CSS不起作用,因为标签区分大小写。您必须将“a”标记设置为小写。

在这里解释: http://reference.sitepoint.com/css/casesensitivity

答案 4 :(得分:0)

也许尝试更改颜色属性,看看它是否有效果。

要进行问题排查,您可能需要尝试使用chrome中的开发人员工具来查看应用的样式。

答案 5 :(得分:0)

您需要为:link,a:visited,a:active等

单独声明

删除第一个不包含冒号的样式。它压倒一切。替换为:link。

答案 6 :(得分:0)

我通过将链接保存到cookie或会话中,然后手动将访问类添加到我的php导航脚本中,为我的网站解决了这个问题。只需制作一个像这样的uri数组:

//Script that loads on every page to save visited pages
$_COOKIE['uris'] = array ('uri/page1', 'uri/page2', 'uri/page3');

//The below script must reside on every navigation script
$uris = $_COOKIE['uris'];
if(in_array($link['uri'], $uris) {
  echo '<a class="visited" href="'.$link['uri'].'">'.$link['name'].'</a>';
} else {
  echo '<a href="'.$link['uri'].'">'.$link['name'].'</a>';
}

答案 7 :(得分:0)

问题与历史嗅探有关,由于隐私问题,已禁用更改的css属性。

我想出了以下解决方法以达到预期效果。 可以更改访问链接的背景颜色。

解决方案非常简单:

  1. 在链接上设置背景图像,其高度与链接相同 和1px宽度并水平重复图像
  2. 图像与链接背景颜色相同
  3. 使该图像的一个像素透明,在垂直中间
  4. on:visited state只需将该链接的backgroundcolor更改为链接的文本颜色
  5. 只有背景颜色的一行可见,因为背景图像正在掩盖它
  6. 以下是一个例子:

    a:link {
        color:#000;
        background:#FFF url('../img/linethrough.png') repeat-x top left;
    }
    
    a:visited {
        background-color:#000;
        color:#000;
    }