a:访问过img {display:none; }

时间:2013-11-19 14:21:55

标签: html css

我的HTML代码如下所示:

<article class="post">
  <a class="thumbnail" href="#">
    <img width="200" height="100" src="some.jpg" class="attachment-thumbnail">
  </a>
  <header>
    <h2 class="posttitle">
      <a href="#">Posttitle</a>
    </h2>
  </header>
</article>

当尚未访问链接时,仅需要显示第一个链接内的图像。如果访问了该链接,我将进行显示:无;

a:visited img {
  display: none !important;
  visibility: hidden !important;
  border: 1px solid red; * this is for testing*
}

http://jsfiddle.net/isherwood/rj394/2

但图像仍然显示。测试边框是红色的。如果我改变:访问到:悬停它会显示它应该显示(:悬停并且它已经消失)。 Firebus告诉我,图像是'display:none',但显然不是......

有人知道这个问题并知道可能的解决方案吗?

2 个答案:

答案 0 :(得分:12)

根据Mozilla的文件:

  

出于隐私原因,浏览器严格限制您可以应用的样式   使用这个伪类选择的元素:只有颜色,   背景色,边框色,边框底色,   border-left-color,border-right-color,border-top-color,   outline-color,column-rule-color,fill和stroke。还请注意   alpha组件将被忽略:alpha组件   改为使用未访问的规则(不透明度为0时,in   那种情况下整个颜色被忽略了,而一个未被访问过   使用规则。

     

虽然颜色可以改变,但getComputedStyle方法会有所不同   并始终返回未访问颜色的值。

因此,您无法更改display值。您可以看到here如何使用不同的属性作为border-color

您必须使用另一种方法作为JavaScript + LocalStorage(主要是supported)。

粗略解决方案可能是,使用jQuery:

$("a").on('click', function(){
    var $this = $(this);
    localStorage.setItem($this.attr('href'), true);
    $this.addClass('visited');
});

$( document ).ready(function() {
    $("a").each(function(index, elem){
        var item = $(elem);
        if (localStorage.getItem(item.attr('href'))){
            item.addClass('visited');
        }
    });
});

演示here

答案 1 :(得分:0)

因为:visited保存在浏览器中,所以 您可以为javascript点击的每个<a>设置Cookie,并隐藏<img