#animation #svg #geometry #hover
#Анимация #svg #геометрия #наведите курсор
Вопрос:
Atm я пытаюсь воссоздать анимацию круга 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>
Это мой первый вопрос здесь, поэтому поделитесь со мной, если я собрал его более запутанным способом. 🙂
Комментарии:
1. Вы пересекаете границу shadow-dom с помощью вашего CSS-селектора. Это недопустимо.
2. Поскольку я занимаюсь разработкой всего 4 недели, я не совсем понимаю ваш ответ. Не могли бы вы рассказать об этом новичку вроде меня. (sry)
3. навигатор: hover .svg-container .symbol частично ссылается на символ, а частично на родителей символа, вы не можете этого сделать и заставить его работать.
4. Значит, я должен ссылаться на него только на символ?
5. Могут быть и другие проблемы, кажется, там много чего, возможно, вы могли бы сократить это дальше.
Ответ №1:
Я вижу одну проблему: у вас есть div
элемент в качестве дочернего элемента списка ul
. Это недопустимый HTML.
Я бы поместил svg внутри a
элемента рядом с текстом и сделал
a:hover > svg .symbol{
stroke-dashoffset: 0;
}
Также значение для stroke-dasharray
и для stroke-dashoffset
слишком велико. В вашем случае будет использоваться значение: 25.13
. Чтобы узнать, какое значение использовать, вы можете рассчитать периметр круга как 2 * Математическое значение.PI * 4, где 4 — радиус окружности.
Еще одна ошибка связана с размером элемента svg: width="100" height:"100"
когда круг имеет радиус r="4"
, я бы использовал элемент svg размером 20×20.
Для наглядности я упростил ваш код:
ul li{display:inline-block; text-align:center;padding:0 1em;}
a{color:white;}
body{background:black;color:white}
.symbol {
stroke: white;
stroke-dasharray: 25.13;
stroke-dashoffset: 25.13;
transition: all 1s linear;
}
a:hover > svg .symbol{
stroke-dashoffset: 0;
}
<ul>
<li>
<a href="#"><span>aaaaaaa</span><br>
<svg width="20" height="20" class="svg">
<circle cx="10" cy="10" r="4" stroke-width="1" class="symbol" stroke="gold" fill="none"/>
</svg></a>
</li>
<li>
<a href="#"><span>bbbbbbb</span><br>
<svg width="20" height="20" class="svg">
<circle cx="10" cy="10" r="4" stroke-width="1" class="symbol" fill="none"/>
</svg></a>
</li>
</ul>
Комментарии:
1. Я не понимаю, почему такой хороший ответ, на мой взгляд, с подробными объяснениями, остался без голосов «За». Поддержка хороших ответов всегда вдохновляет на написание новых ответов