CSS 只有子菜单在鼠标移出时关闭

CSS only sub-menu closing on a mouseout

即使将鼠标悬停在子菜单本身上,如何让子菜单保持不变?现在子菜单关闭,因为它链接到 a 元素的 :hover。

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<style type="text/css">
.flex
{
    display:flex;
    flex-direction: row;
}    
#top-menu-1 > div
{
    position:relative;
}
#top-menu-1 > div > a
{
    font-size: 24px;
    padding:15px 15px;
    color:#000;
    text-decoration:none;    
}

#top-menu-1 > div > a:hover + div
{
    display:block;
}

#top-menu-1 > div > div
{    
    position: absolute;
    margin-top:10px;    
    display:none;
    box-sizing: border-box;
    width: 900px;
    height: 327px;
    border-radius: 6px;
    box-shadow: 0 0 17px 0 rgba(0, 0, 0, 0.22);    
    background-color: #ffffff;
    padding:20px;
    z-index: 1;

}
</style>
</head>
<body>
<div id="top-menu-1" class="flex">
    <div>
        <a href="#">Menu 1</a>
        <div>                    
            Sub-Menu Content                    
        </div>                            
    </div>
    <div>
        <a href="#">Menu 2</a>
    </div>
    <div>
        <a href="#">Menu 3</a>
    </div>
    <div>
        <a href="#">Menu 4</a>                        
    </div>                        
</div>
</body>
</html>

https://codepen.io/anjanesh/pen/xxVJmLv

.flex {
  display: flex;
  flex-direction: row;
}

#top-menu-1>div {
  position: relative;
}

#top-menu-1>div>a {
  font-size: 24px;
  padding: 15px 15px;
  color: #000;
  text-decoration: none;
}

#top-menu-1>div>a:hover+div {
  display: block;
}

#sub-menu:hover {
  display: block;
}

#top-menu-1>div>div {
  position: absolute;
  margin-top: 10px;
  display: none;
  box-sizing: border-box;
  width: 900px;
  height: 327px;
  border-radius: 6px;
  box-shadow: 0 0 17px 0 rgba(0, 0, 0, 0.22);
  background-color: #ffffff;
  padding: 20px;
  z-index: 1;

}
<!DOCTYPE html>
<html lang="en" dir="ltr">

<head>
</head>

<body>
  <div id="top-menu-1" class="flex">
    <div>
      <a href="#">Menu 1</a>
      <div id="sub-menu">
        Sub-Menu Content
      </div>
    </div>
    <div>
      <a href="#">Menu 2</a>
    </div>
    <div>
      <a href="#">Menu 3</a>
    </div>
    <div>
      <a href="#">Menu 4</a>
    </div>
  </div>
</body>

</html>

请更换。

#top-menu-1 > div > a:hover + div
{
    display:block;
}

通过

#top-menu-1 > div:hover > div{ display: block; }

请检查这是否适合您。 此行为背后的原因是,一旦 <a> 的范围结束,悬停效果就不再运行并消失 div,因此为了访问 div 的内部内容,您可以在它的悬停范围内也为 div 复制 display:block

.flex
{
    display:flex;
    flex-direction: row;
}    
#top-menu-1 > div
{
    position:relative;
}
#top-menu-1 > div > a
{
    font-size: 24px;
    padding:15px 15px;
    color:#000;
    text-decoration:none;    
}

#top-menu-1 > div > a:hover + div,
#top-menu-1 > div > a + div:hover
{
    display:block;
}

#top-menu-1 > div > div
{    
    position: absolute;
    margin-top:10px;    
    display:none;
    box-sizing: border-box;
    width: 900px;
    height: 327px;
    border-radius: 6px;
    box-shadow: 0 0 17px 0 rgba(0, 0, 0, 0.22);    
    background-color: #ffffff;
    padding:20px;
    z-index: 1;

}
  <div id="top-menu-1" class="flex">
    <div>
        <a href="#">Menu 1</a>
        <div>                    
            Sub-Menu Content                    
        </div>                            
    </div>
    <div>
        <a href="#">Menu 2</a>
    </div>
    <div>
        <a href="#">Menu 3</a>
    </div>
    <div>
        <a href="#">Menu 4</a>                        
    </div>                        
</div>