尝试在绝对定位元素下方的元素上使用悬停

Trying to use hover on a element below an absolute positioned element

所以我尝试在两个元素上使用悬停效果。其中一个元素具有绝对位置,该元素悬停后需要重新着色背景。这似乎可行,但是我无法使背面图像相应地缩放。我认为这与第一个 div 的绝对定位有关。但我找不到解决这个问题的方法。我一直在尝试使用 pointer-event 修复它,但我无法做到这一点。

<style>
  .master {
    width: 1200px;
    overflow: hidden;
    position: relative;
  }
  
  img {
    width: 100%;
  }
  
  img:hover {
    transform: scale(1.2)
  }
  
  .hover {
    position: absolute;
    height: 100%;
    width: 100%;
  }
  
  .hover:hover {
    background: rgba(255, 0, 0, 0.5);
  }
</style>

<div class="master">
  <div class="hover">

  </div>
  <img src="http://via.placeholder.com/1200x350" alt="">
</div>

这是我现在得到的代码

您没有在图像上获得悬停事件是正确的,因为绝对定位的 <div> 覆盖了它。但是由于 <img> 元素紧跟在 HTML 层次结构中的 <div> 元素之后,您可以使用 Adjacent Sibling Combinator 来定位它。

<style>
  .master {
    width: 1200px;
    overflow: hidden;
    position: relative;
  }
  
  img {
    width: 100%;
  }
  
  .hover {
    position: absolute;
    height: 100%;
    width: 100%;
    z-index: 1;
  }
  
  .hover:hover {
    background: rgba(255, 0, 0, 0.5);
  }

  .hover:hover + img {
    transform: scale(1.2)
  }
</style>

<div class="master">
  <div class="hover">

  </div>
  <img src="http://via.placeholder.com/1200x350" alt="">
</div>

您不能同时在两个堆叠元素上获得悬停效果。但是,如果您希望能够将后面的元素悬停在另一个元素之后,您可以在前景中的元素上使用pointer-events: none;,允许鼠标操作“通过它”,因此影响后面的元素:

<style>
  .master {
    width: 1200px;
    overflow: hidden;
    position: relative;
  }
  
  img {
    width: 100%;
  }
  
  img:hover {
    transform: scale(1.2)
  }
  
  .hover {
    position: absolute;
    height: 100%;
    width: 100%;
    pointer-events: none;
  }
  
  .hover:hover {
    background: rgba(255, 0, 0, 0.5);
  }
</style>

<div class="master">
  <div class="hover">

  </div>
  <img src="http://via.placeholder.com/1200x350" alt="">
</div>

我发现将悬停效果移动到 .master 而不是单独的元素似乎有效。

    <style>
    .master {
        width: 1200px;
        overflow: hidden;
        position: relative;
    }
    img {
        width: 100%;
        z-index: 50;
    }

    .master:hover img{
        transform: scale(1.2)
    }

    .hover {
        position: absolute;
        height: 100%;
        width: 100%;
        opacity: 0.8;
        z-index: 100;
    }

    .master:hover .hover {
        background: rgba(255,0,0, 0.5);
    }
</style>

<div class="master">
    <div class="hover">
        test
    </div>
    <img src="http://via.placeholder.com/1200x350" alt="">
</div>

悬停和绝对位置没有问题

您的问题是 img 标签位于 .hover 的顶部,这是绝对位置的原因。

所以你的悬停 div 在你的图像后面,鼠标悬停在图像标签上。

希望对您有所帮助

您需要将 :hover 设置为具有 class 的绝对元素 .hover:

.hover:hover + img {
    transform: scale(1.2);
}

此外,为没有 :hover 的相同 class 设置 z-index

此外,我还为 transformbackground 添加了转换。

.master {
    width: 1200px;
    overflow: hidden;
    position: relative;
    display: inline-flex;
}

.hover {
    position: absolute;
    height: 100%;
    width: 100%;
    z-index: 9999;
    transition: background .5s;
}

img {
    width: 100%;
    transition: transform .5s;
}

.hover:hover + img {
    transform: scale(1.2);
}

.hover:hover {
    background: rgba(255, 0, 0, 0.5);
}
<div class="master">
  <div class="hover"></div>
  <img src="http://via.placeholder.com/1200x350" alt="">
</div>

您可以将 pointers-event: none; 添加到 img 并且您的指针将忽略该图像,但这只是为了防止您以后没有任何计划在图像上添加一些鼠标操作