Круговая анимация SVG при наведении курсора не работает
Я пытаюсь создать анимацию круга SVG, при наведении курсора на кнопки меню навигации, как показано на этом сайте: https://5scontent.com/. На моем сайте кружок появляется при обновлении и затем исчезает.
* {
margin: 0;
padding: 0;
font-family: 'Alata';
}
.container {
width: 100%;
min-height: 100vh;
background-position: center center;
background-repeat: no-repeat;
background-attachment: fixed;
background-size: cover;
background-color: black;
position: relative;
z-index: 1;
}
.navbar {
width: 90%;
height: 10vh;
margin: auto;
display: flex;
align-items: center;
}
.logo {
width: 120px;
cursor: pointer;
}
nav {
flex: 1;
text-align: right;
}
.svg-container{
position: absolute;
}
.svg{
position: absolute;
top: 0px;
left: 1125px;
}
.symbol {
fill: transparent;
stroke: white;
stroke-width: 1px;
stroke-dasharray: 150;
stroke-miterlimit: 10;
stroke-dashoffset: 150;
transition: all 3s linear;
}
nav ul li a:hover + .svg-container .symbol{
stroke-dashoffset: 0;
}
nav ul li {
list-style: none;
display: inline-block;
margin-left: 60px;
}
nav ul li a{
text-decoration: none;
color: white;
font-size: 14px;
padding: 5px 2px;
}
<body>
</div>
<div class="container">
<div class="navbar">
<nav>
<ul>
<li><a href="#">Home</a></li>
<div class="svg-container">
<svg width="100" height="100" class="svg">
<circle cx="50" cy="10" r="4" stroke-width="4" class="symbol"/>
</svg>
</div>
<li><a href="#">Work</a></li>
</ul>
</nav>
Как сделать анимацию бордюра круга при наведении на пункт меню?
Свободный перевод вопроса SVG circle animation on hover doesn't work от участника @Andreas Dahl Trankjær.
Ответы (1 шт):
Я вижу одну проблему: у вас есть элемент div, как дочерний элемент списка ul. Это недопустимо в HTML.
Я бы поместил svg внутри элемента a рядом с текстом и сделал
a:hover > svg .symbol{
stroke-dashoffset: 0;
}
Также значение для stroke-dasharray и для stroke-dashoffset слишком велико. В вашем случае будет использоваться значение: 50.24. Чтобы узнать, какое значение использовать, вы можете рассчитать периметр круга как 2 * Math.PI * 8, где 8 - радиус круга.
Для ясности я упростил ваш код:
ul li{display:inline-block; text-align:center;padding:0 1em;}
a{color:white;}
body{background:black;color:white}
.symbol {
stroke: white;
stroke-dasharray: 50.24;
stroke-dashoffset: 50.24;
transition: all 1s linear;
}
a:hover > svg .symbol{
stroke-dashoffset: 0;
}
<ul>
<li>
<a href="#"><span>Work</span><br>
<svg width="23" height="23" class="svg">
<circle cx="11" cy="14" r="8" stroke-width="1" class="symbol" stroke="cyan" fill="none"/>
</svg></a>
</li>
<li>
<li>
<a href="#"><span>Work</span><br>
<svg width="23" height="23" class="svg">
<circle cx="11" cy="14" r="8" stroke-width="1" class="symbol" stroke="cyan" fill="none"/>
</svg></a>
</li>
</ul>