第二次单击时从元素中删除活动和焦点

Bog*_*kyi 7 css

我正在尝试制作带有信息的交互式地图。当您单击一个点时,它会调整大小并显示一些联系人。这是因为元素获得了:active:focus伪类。

有没有办法在第二次单击元素时从元素中删除伪类?实际上,是否可以在再次单击时关闭元素?

.distribution-map {
  position: relative;
  width: 100%;
  padding: 20px;
  box-sizing: border-box;
  margin: 0 auto;
}
.distribution-map .map-point {
  cursor: pointer;
  outline: none;
  top: 20px;
  position: absolute;
  width: 40px;
  height: 40px;
  border-radius: 20px;
}
.distribution-map .map-point:active,
.distribution-map .map-point:focus {
  margin: 0;
  padding: 0;
  filter: opacity: 1;
  width: 300px;
  height: 220px;
  color: #e5e5e5;
  z-index: 1;
  -webkit-transition: opacity 0.25s ease-in-out, width 0.25s ease-in-out, height 0.25s ease-in-out;
  transition: opacity 0.25s ease-in-out, width 0.25s ease-in-out, height 0.25s ease-in-out;
}
Run Code Online (Sandbox Code Playgroud)
<div class="distribution-map">
  <button class="map-point">
  </button>
</div>
Run Code Online (Sandbox Code Playgroud)

Hid*_*bes 7

这可以通过 pointer-events: none;

通过添加pointer-events: none;到获得焦点的元素,您可以有效地停止元素上的鼠标交互,使其在下一次单击时不再聚焦。

需要进行以下修改:

  • 添加pointer-events: none;.distribution-map .map-point:active, .distribution-map .map-point:focus

.distribution-map {
  position: relative;
  width: 100%;
  padding: 20px;
  box-sizing: border-box;
  margin: 0 auto;
}
.distribution-map .map-point {
  cursor: pointer;
  outline: none;
  top: 20px;
  position: absolute;
  width: 40px;
  height: 40px;
  border-radius: 20px;
}
.distribution-map .map-point:active,
.distribution-map .map-point:focus {
  margin: 0;
  padding: 0;
  filter: opacity: 1;
  width: 300px;
  height: 220px;
  color: #e5e5e5;
  z-index: 1;
  -webkit-transition: opacity 0.25s ease-in-out, width 0.25s ease-in-out, height 0.25s ease-in-out;
  transition: opacity 0.25s ease-in-out, width 0.25s ease-in-out, height 0.25s ease-in-out;
  pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)
<div class="distribution-map">
  <button class="map-point">
  </button>
</div>
Run Code Online (Sandbox Code Playgroud)