悬停在鼠标离开后仍然存在的 CSS 样式

Posted

技术标签:

【中文标题】悬停在鼠标离开后仍然存在的 CSS 样式【英文标题】:Hover CSS styling that persists after mouse away 【发布时间】:2016-02-18 05:27:46 【问题描述】:

我有一个 html ul 横幅,它有两个 li 子栏,在悬停时显示。但是,如果您将鼠标移开或悬停在另一个主条目上,悬停就会丢失。

我想知道是否有某种方法可以在鼠标离开后轻松保持这种悬停状态。这不是我可以扔掉的东西,所以我非常有兴趣扩展它以支持即使在鼠标离开几秒钟后也能保持它,但如果将鼠标悬停在不同的 li 元素上,则能够看到新信息。

这是我的 JSFiddle,其中包含一个非常简单的演示,其中包含我的 HTML/CSS 以及展示该功能的最低限度:JSFiddle

<body>
<div class="nav-outer-repeat">
    <div class="nav">
        <div class="table">
            <ul class="select">
                <li style="color: white;"> <a><b>Hover Test</b></a>

                    <div class="select_sub">
                        <ul class="sub">
                            <li style="color: white;"><a href="">Test</a>
                            </li>
                            <li style="color: white;"><a href="">Test</a>
                            </li>
                            <li style="color: white;"><a href="">Test</a>
                            </li>
                        </ul>
                        <ul class="sub">
                            <li style="color: white;"><a href="">Test</a>
                            </li>
                            <li style="color: white;"><a href="">Test</a>
                            </li>
                            <li style="color: white;"><a href="">Test</a>
                            </li>
                        </ul>
                    </div>
                </li>
            </ul>
        </div>
    </div>
    <div class="clear"></div>
    <div id="content-outer">
        <div id="content"></div>
    </div>

#content-outer  
background: url(../../core/images/shared/content_repeat.jpg) repeat-x;

#content    
    color: #333;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
    line-height: 18px;
    margin: 0 auto 0 auto;
    max-width: 100%;
    min-width: 780px;
    padding: 15px 0px 25px 0px;

.nav-outer-repeat   
    background: url(../../core/images/shared/nav/repeat.jpg) repeat-x;
    height: 77px;

.nav    
    float: left;
    font-family: Tahoma;
    font-size: 13px;
    height: 38px;
    position: relative;
    width: 1080px;
    min-width: 600px;
    z-index: 500;

.nav-divider    
    background: url(../../core/images/shared/nav/divider.jpg) top no-repeat;
    float: left;
    height: 40px;
    width: 15px;

.nav .select,
.nav .current   
    display: table-cell;
    float: left;
    list-style: none;
    margin: 0 0px 0 0;
    padding: 0;
    white-space: nowrap;

.nav li 
    float: left;
    height: auto;
    margin: 0;
    padding: 0;

.nav .select a  
    color: #fff;
    display: block;
    float: left;
    height: 37px;
    line-height: 35px;
    padding: 0 0px 0 0px; 
    text-decoration: none;
    white-space: nowrap;

.nav .select_sub    
    display: none;
    margin: 0 0 0 10px;

.nav .sub   
    display: table;
    list-style: none;
    padding: 0;

.nav .select :hover .select_sub, 
.nav .current .show 
    background: url(../../core/images/shared/nav/back_0.gif);
    height: 75px;
    display: block;
    left: 0;
    padding: 0;
    position: absolute;
    text-align: left;
    top: 37px;
    width: 1200px;
    z-index: 100;
    transition:0s 50s;


.nav .select :hover .sub li a, 
.nav .current .show .sub li a   
    background: transparent;
    border: 0;
    color: #fff;
    font-weight: bold;
    font-size: 13px;
    display: block;
    float: left;
    margin: 0;
    padding: 0 10px 0 10px;
    white-space: nowrap;

.clear  
    clear: both;
    font-size: 0px;
    height: 0;
    line-height: 0px;
    margin: 0px;
    padding: 0px;

我认为我最感兴趣的是某种时间延迟,它可以留在屏幕上,但我所有的尝试都失败了。我希望有人能给我一些指导,用我可能缺少的一些 CSS 或一些 jQuery 来解决这个问题?

【问题讨论】:

似乎在此之前已经回答了这个问题:***.com/questions/17100235/… 我只是无法在我的测试中通过转换完全复制它,只有几行 css 行,甚至放置了 transition:5s;毕竟,我看不出有什么区别。 【参考方案1】:

您可以在悬停和正常时添加不同的过渡。确保使用动画属性隐藏菜单!显示将不起作用,并且尝试从 height: 0px; 转到 height: auto; 时也要小心。

这是一种方法。

I've forked your fiddle。首先我删除了:hover 状态,然后我添加了:

.nav .select_sub
  display: block;

.nav .select:hover .select_sub, 
.nav .select:hover .sub li a
  margin-top: 0%;
  transition: all 0.2s;

.nav .select .select_sub, 
.nav .select .sub li a
  margin-top: -100%;
  transition: all 2s 3s;

您可以看到我已将您的菜单以较大的上边距隐藏。当您将鼠标悬停在 .select 上时,边距在 0.2 秒内变为零,这应该足够快,以获得良好的用户体验。

当您停止悬停时,子菜单会保持三秒钟,然后以十倍的速度返回。

【讨论】:

哇,这对我来说很有意义,你是如何做到的,它也适用于多个 ul 元素,也适用于成熟的网站。非常感谢您的宝贵时间,我会调整计时器,看看效果如何!【参考方案2】:

类似的东西..但是我试过了。

HTML:

     <div class="menu">
        <p>Hover</p>
        <ul class="menu-content">
            <li>
                <ul>
                    <li>Menu 1</li>
                    <li>Menu 1</li>
                    <li>Menu 1</li>
                    <li>Menu 1</li>
                </ul>
            </li>
            <li>
                <ul>
                    <li>Menu 2</li>
                    <li>Menu 2</li>
                    <li>Menu 2</li>
                    <li>Menu 2</li>
                </ul>
            </li>   
        </ul>
    </div>

CSS:

.menu 
    width: 98%;
    text-align: center;
    padding: 20px 1%;
    background-color: #eee;
    overflow:  hidden;


.menu p 
    margin: 20px 0;
    color: #096847;
    font-size: 1.3em;


.menu:hover .menu-content 
    margin-top: 0;


.menu-content 
    margin-top: -100%;
    overflow: hidden;
    transition: all 1s ease-in;


.menu-content li 
    list-style-type: none;


.menu-content > li > ul > li 
    width: 25%;
    float: left;
    padding: 20px 0;
    background-color: #2aa87c;
    outline: 1px solid #ddd;
    cursor: pointer;
    color: #fff;

结果:

EXAMPLE

【讨论】:

这看起来很酷,我会尽力理解它的所有功能 - 谢谢!【参考方案3】:

在纯 CSS3 中,您可以使用过渡延迟:https://developer.mozilla.org/en-US/docs/Web/CSS/transition-delay 为下拉菜单的不透明度设置动画。 如果您不能使用 CSS3,则必须使用 JS(不一定是 jquery)

【讨论】:

以上是关于悬停在鼠标离开后仍然存在的 CSS 样式的主要内容,如果未能解决你的问题,请参考以下文章

将鼠标悬停在缩略图上以启动新图像;悬停结束后新图像仍然存在

如何在鼠标离开元素后继续CSS动画:悬停?

单击外部链接后悬停效果仍然存在

如何让 jquery 像 CSS 悬停一样悬停?

用于离开悬停的 CSS 伪类

css如何设置鼠标悬停时每行显示的字数?