CSS :hover on button 在已经悬停的 div 中不起作用

Posted

技术标签:

【中文标题】CSS :hover on button 在已经悬停的 div 中不起作用【英文标题】:CSS :hover on button not working within already hovered div 【发布时间】:2020-10-10 16:07:27 【问题描述】:

当我将图像本身悬停时,图像顶部会出现一个 div。 div 包含两个 div(按钮),它们还有一个 :hover 可以改变它们的颜色并将光标设置为指针。

问题是悬停在按钮上不会触发悬停。

此外,似乎将鼠标悬停在 btn_container 将出现的底部的图像上不会触发第一个 :hover 并且不会使 btn_container 出现。

//html
 <div class="container">
  <img src="src">
  <div class="btn_container">
    <div class=" btn">
      <p>Select</p>
    </div>
    <div class="btn">
      <p>Preview</p>
    </div>
  </div>
      
//SCSS
.container 
  position: relative;
  width: 100%;
  img 
    width: 100%;
    height: auto;
  

  .btn_container 
    position: absolute;
    width: 100%;
    height: 40px;
    background-color: var(--dark-purple-trans);
    bottom: 0;
    left: 0;
    align-items: center;
    display: none;
    position: absolute;
  
  img:hover + .btn_container,
  .btn_container > * 
    display: flex;
    border: none;
    text-align: center;
    justify-content: space-around;
  

  .btn 
    padding: 6px 12px;
    height: 14px;
    background: var(--yellow-medium);
    border-radius: 8px;
    display: flex;
    justify-content: space-evenly;
    align-items: center;
    color: var(--white);
    font-family: roboto;
    &:hover 
      cursor: pointer;
      background: var(--red);
      color: var(--white);
    
  

预览,按钮悬停不起作用:

如果我使用检查器强制将鼠标悬停在 img 上,则悬停按钮似乎可以工作:

【问题讨论】:

【参考方案1】:

问题出在 img:hover + .btn_container.btn_container &gt; * 类中。

这是更新后的 scss:

.container 
  position: relative;
  width: 100%;

  img 
    display: block;
    width: 100%;
    height: auto;
    border: 0;
  

  &:hover .btn_container 
    display: flex;
  

  .btn_container 
    position: absolute;
    bottom: 0;
    left: 0;
    display: none;
    align-items: center;
    justify-content: space-around;
    width: 100%;
    height: 40px;
    text-align: center;
    background-color: var(--dark-purple-trans);
    border: none;
  

  .btn 
    display: flex;
    align-items: center;
    justify-content: space-evenly;
    height: 14px;
    padding: 6px 12px;
    color: var(--white);
    font-family: roboto;
    background-color: var(--yellow-medium);
    border-radius: 8px;
    cursor: pointer;

    &:hover 
      color: var(--white);
      background-color: var(--red);
    
  

您可以在此处查看实际操作:Codepen

【讨论】:

这个有效。通过将 :hover 直接附加到容器而不是 img 来解决问题。【参考方案2】:

我尝试使用 opacity 而不是 display 来切换 btn_container 的可见性,并为 btn_container 添加了悬停,它似乎有效:https://jsfiddle.net/pr8dxe2g/1/

  .btn_container 
    width: 500px;
    height: 100px;
    background-color: var(--dark-purple-trans);
    bottom: 0;
    left: 0;
    align-items: center;
    opacity: 0;
    position: absolute;
  

  img:hover + .btn_container,
  .btn_container:hover,
  .btn_container > * 
    display: flex;
    opacity: 1;
    border: 1px solid blue;
    text-align: center;
    justify-content: space-around;
  

您当前的代码可能存在一些问题,如果显示最初设置为 none,img div 具有更高的堆栈顺序,但是我不确定,所以如果有人知道,我想知道为什么情况也是如此。

【讨论】:

以上是关于CSS :hover on button 在已经悬停的 div 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

css中a.other:hover,这个是啥意思?

是否可以 - on:hover 暂停 css3 动画并更改其背景颜色?

CSS Hover TranslateY 与 Fluid Motion 而不是立即重置? [复制]

如何使用`on()`委派`hover()`功能[重复]

el-button鼠标放上去调整颜色hover

CSS On Hover - 将元素 ID1 更改为 ID2