代码之家  ›  专栏  ›  技术社区  ›  train_lviv_19

CSS悬停不起作用(由于伪元素)?[副本]

  •  0
  • train_lviv_19  · 技术社区  · 2 年前

    我在摆弄SVG和CSS效果,以获得类似于游戏“limbo”的外观。

    谷物和倾斜移动效果如预期的那样工作,但我不能再触发svg元素上的悬停行为了。我做错了什么?

    使用Firefox检查器,当我选择元素时,我可以触发悬停。所以我怀疑是伪元素挡住了svg元素上的悬停。

    .grain {
      display: flex;
      justify-content: center;
      align-items: center;
      width: 100%;
      height: auto;
      background-position: center
    }
    
    .grain:after {
      content: "";
      background-image: url("https://upload.wikimedia.org/wikipedia/commons/7/76/1k_Dissolve_Noise_Texture.png");
      height: 300%;
      width: 300%;
      position: fixed;
      opacity: 0.1;
      animation: animateGrain 8s steps(10) infinite;
    }
    
    @keyframes animateGrain {
      0%,
      100% {
        transform: translate(0, 0)
      }
      10% {
        transform: translate(-5%, -10%)
      }
      20% {
        transform: translate(-15%, -20%)
      }
      30% {
        transform: translate(-5%, -10%)
      }
      40% {
        transform: translate(-15%, -20%)
      }
      50% {
        transform: translate(-5%, -10%)
      }
      60% {
        transform: translate(-15%, -20%)
      }
      70% {
        transform: translate(-5%, -10%)
      }
      80% {
        transform: translate(-15%, -20%)
      }
      90% {
        transform: translate(-5%, -10%)
      }
      100% {
        transform: translate(-15%, -20%)
      }
    }
    
    .tiltshift:after {
      content: '';
      position: absolute;
      top: 0;
      right: 0;
      bottom: 0;
      left: 0;
      backdrop-filter: blur(26px);
      animation: clip-fade 12s infinite alternate;
    }
    
    .tiltshift {
      border: 1px solid red;
    }
    
    @keyframes clip-fade {
      0% {
        mask-image: linear-gradient(204deg, rgba(0, 0, 0, 1), transparent 100%);
      }
      100% {
        mask-image: linear-gradient(0deg, rgba(0, 0, 0, 1), transparent 100%);
      }
    }
    
    #rect1 {
      fill: red !important;
    }
    
    #rect1:hover {
      transform: scale(1.07) !important;
    }
    <div class="tiltshift">
      <div class="grain">
        <svg>...</svg>
      </div>
    </div>
    1 回复  |  直到 2 年前
        1
  •  0
  •   Billuc    2 年前

    你的直觉是对的,伪元素正在干扰悬停事件。事实上,由于他们占据了所有的屏幕空间,所以他们是在rect元素之前“捕捉”悬停事件的人。

    您可以通过添加来解决此问题 pointer-events: none 规则到伪元素。这样,它们就不会再捕捉气垫了,矩形现在可以自由地受到它的影响。

    看见 https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events

    推荐文章