如何清除 :target 选择?

How to clear a :target choice?

我有 link 使用 :target 选择器。单击时,对应的段落会突出显示。问题是:一旦点击,就无法清除选择。 我希望再次点击选中的项目时取消选中。

例如:如果 link 1 被选中,我再次点击它,它就会变成未选中状态。

jsfiddle

body {
  background: #fefefe;  
}

:target {
   background-color: #ccff66;
}
<a href="#link1">Link 1</a>
<a href="#link2">Link 2</a>
<a href="#link3">Link 3</a>
<a href="#link4">Link 4</a>

<p id="link1">This is a text A</p>
<p id="link2">This is a text B</p>
<p id="link3">This is a text C</p>
<p id="link4">This is a text D</p>

备注

所以,这会做你想做的事,但我不确定从语义的角度来看这是最明智的做法。 :target 选择器用于设置 id 与 URL 中的 hash/fragment 相匹配的元素的样式。如果您单击其散列与该片段匹配的 link,下面的代码将删除该散列。但是,这与 <a href="#hash">a</a> 与 "supposed" 的做法背道而驰,即将您带到 ID 为 "hash" 的元素所在的位置。所以,慎用。

var anchors = document.getElementsByTagName('a');
for (var i = 0, z = anchors.length; i < z; i++) {
  var anchor = anchors[i];
  anchor.onclick = function (e) {
    if (e.target.hash === location.hash) {
      location.hash = '';
      e.preventDefault();
    }
  };
}
body {
  background: #fefefe;  
}

:target {
   background-color: #ccff66;
}
<a href="#link1">Link 1</a>
<a href="#link2">Link 2</a>
<a href="#link3">Link 3</a>
<a href="#link4">Link 4</a>

<p id="link1">This is a text A</p>
<p id="link2">This is a text B</p>
<p id="link3">This is a text C</p>
<p id="link4">This is a text D</p>

你不能用一个 link 来真正打开和关闭目标,但是(作为一个纯粹的 CSS 解决方法)你可以同时使用 showhide link 并且总是只显示其中一个:

.hide, .show, .list {
    padding: 10px;
    display:block;
    border: 1px solid #000;
}

.list,
.show,
.hide:target {
     display: none;
}

.hide:target + .show,
.hide:target ~ .list {
    display:block;
}
  <div>
    <a href="#hide" class="hide" id="hide">Show menu</a>
    <a href="#show" class="show" id="show">Hide menu</a>
    <div  id="drop" class="list">
        <ul>
          <li>Item 1</li>
          <li>Item 2</li>
          <li>Item 3</li>
        </ul>
    </div>
</div>