При наведении вертикально вращающегося якоря, если мышь не находится рядом с центром изображения, анимированное преобразование мерцает, используя следующий код:
@keyframes spin {0% {transform: rotateX(0deg);} 100% {transform: rotateX(360deg);}}
a:focus, a:hover {animation: spin 0.9s 1 linear;}
Как предотвратить мерцание без изменения HTML?






Чтобы :hover не выводился из a и не мерцал, вы можете переместить :hover из a в его родителя:
@keyframes spin {
100% {
transform: rotateX(360deg);
}
}
ul {
display: flex;
flex-direction: column;
align-items: flex-start;
}
li:hover {
cursor: pointer;
}
a:focus,
li:hover a {
animation: spin 0.9s 1 linear;
}
ul a {
color: #000;
display: inline-block;
height: 50px;
}
ul a:focus,
ul li:hover a {
background-image: radial-gradient(ellipse at center, #777 0%, #222 100%);
color: #fff;
}<ul>
<li><a href = "admin/">Admin</a></li>
<li><a href = "appointments/">Appointments</a></li>
<li><a href = "blog/">Blog</a></li>
<li><a href = "calendar/">Calendar</a></li>
<li><a href = "contact/">Contact</a></li>
<li><a href = "events/">Events</a></li>
<li><a href = "forms/">Forms</a></li>
<li><a href = "forums/">Forums</a></li>
<li><a href = "guestbook/">Guestbook</a></li>
<li><a href = "mail/">Mail</a></li>
<li><a href = "members/">Members</a></li>
<li><a href = "newsletter/">Newsletter</a></li>
<li><a href = "notifications/">Notifications</a></li>
<li><a href = "search/">Search</a></li>
</ul>Работало, хотя это будет работать только с двумя элементами; меню будут работать, хотя в примере они не будут привязаны к абзацам. Есть и другие анимации CSS, которые можно сделать, и вопрос сводится к согласованности. Я опубликовал HTML с элементами li, поэтому технически вы не меняли HTML, поэтому я принял его как ответ. Единственный способ улучшить это — сделать это с якорем внутри абзаца, в то время как все еще не будет мерцать или добавлять другой элемент. Большое тебе спасибо!
Идея без изменения html состоит в том, чтобы переместить анимацию в псевдоэлемент, и вы избежите потери наведения, поскольку основной элемент не будет вращаться:
Вы также можете упростить свою логику, используя переход вместо анимации:
p a {
color: #000;
display: inline-block;
height: 50px;
z-index:0;
position:relative;
color:transparent;
}
p a:before {
content:attr(data-text);
position:absolute;
z-index:-1;
top:0;
left:0;
right:0;
bottom:0;
color:#000;
transition:transform 0.9s linear;
}
p a:focus::before,
p a:hover::before {
transform: rotateX(360deg);
background: radial-gradient(ellipse at center, #777 0%, #222 100%);
color: #fff;
}<p>some content here <a href = "admin/" data-text = "Admin">Admin</a> and more here</p>
Попробуйте дать
padding-topнаul aи проверьте.