将光标悬停在一个菜单项上后,如果在变换完成之前稍微移动光标,变换将再次开始。当你摇动你在菜单项上移动一点时,它会一次又一次地发生。 我怎样才能克服这个问题?
<ul id="menu-1">
<li><a href="#">Menu Item 1</a></li>
<li><a href="#">Menu Item 2</a></li>
<li><a href="#">Menu Item 3</a></li>
<li><a href="#">Menu Item 4</a></li>
<li><a href="#">Menu Item 5</a></li>
<li><a href="#">Menu Item 6</a></li>
</ul>
ul#menu-1 {
list-style: none;
margin-left: 0;
width:100%
}
ul#menu-1 li{
background: #000;
display: inline-block;
margin-bottom: 0.25em;
min-width: 15.87%;
animation: elmtoFront 1.2s linear normal forwards;
}
ul#menu-1 li a {
display:block;
color: #fff;
padding: 0.5em 1.5em;
text-decoration:none;
}
ul#menu-1 li a:hover{
transition: 1.2s ease-in-out;
transform-style: preserve-3d;
transform: rotateY(-360deg);
animation:elmtoBack 1.2s linear normal forwards;
}
@keyframes elmtoBack {
0% {z-index:0;}
100% {z-index:1;}
}
@keyframes elmtoFront {
0% {z-index:1;}
100% {z-index:0;}
}
答案 0 :(得分:1)
答案 1 :(得分:1)
为该物业提供另类选择,如下所示
将ul#menu-1 li a:hover
更改为ul#menu-1 li:hover a
ul#menu-1 li:hover a{
transition: 1s ease-in-out;
transform-style: preserve-3d;
transform: rotateY(-360deg);
animation:elmtoBack 1.2s linear normal forwards;
}
答案 2 :(得分:1)
我不会专注于解决方案,因为已经在其他答案中对此进行了描述,但是他们没有解释为什么会这样发生。所以,我会解释一下。
<强>原因:强>
这是因为您在rotateY
元素上使用a
转换。当使用这种变换时,元素的边界随着元素的旋转而变得越来越小。因此,当我们在转换过程中移动光标时,我们实际上悬停然后返回元素的可能性很高。如您所知,这将重新触发hover
选择器以应用,从而重新启动转换。
例如,看看下面的代码片段,看看元素的边框在转换发生时如何缩小。当您从框的边缘悬停时,重启效果将会发音,因为当光标尺寸缩小时,光标会快速移出框。
.transformed {
height: 200px;
width: 200px;
background: yellowgreen;
border: 3px solid black;
transition: all 1s;
}
.transformed:hover {
transform: rotateY(-360deg);
]
&#13;
<div class='transformed'>Some content</div>
&#13;
<强>解决方案:强>
正如其他答案中所述,将:hover
放在li
上,并在a
悬停时设置li
的样式。完成此操作后,li
边界永远不会改变,因此光标位置实际上永远不会超出元素。因此,:hover
选择器没有重新触发,也没有重启。
ul#menu-1 {
list-style: none;
margin-left: 0;
width: 100%
}
ul#menu-1 li {
background: #000;
display: inline-block;
margin-bottom: 0.25em;
min-width: 15.87%;
animation: elmtoFront 1.2s linear normal forwards;
}
ul#menu-1 li a {
display: block;
color: #fff;
padding: 0.5em 1.5em;
text-decoration: none;
}
ul#menu-1 li:hover a {
transition: 1.2s ease-in-out;
transform-style: preserve-3d;
transform: rotateY(-360deg);
animation: elmtoBack 1.2s linear normal forwards;
}
@keyframes elmtoBack {
0% {
z-index: 0;
}
100% {
z-index: 1;
}
}
@keyframes elmtoFront {
0% {
z-index: 1;
}
100% {
z-index: 0;
}
}
&#13;
<ul id="menu-1">
<li><a href="#">Menu Item 1</a>
</li>
<li><a href="#">Menu Item 2</a>
</li>
<li><a href="#">Menu Item 3</a>
</li>
<li><a href="#">Menu Item 4</a>
</li>
<li><a href="#">Menu Item 5</a>
</li>
<li><a href="#">Menu Item 6</a>
</li>
</ul>
&#13;