Изменение свойства ключевых кадров stroke-dashoffset
на 1
вместо 0
, кажется, решает проблему.Я также очистил ваш синтаксис SVG от ненужного кода, и теперь он также адаптивен (это означает, что он регулирует высоту SVG в соответствии с родительским объектом.
Что касается вашего первого вопроса, SVG - это путь,и он чрезвычайно популярен для таких виджетов, гораздо более популярных, чем CANVAS, просто потому, что с ним легче работать. SVG в плане производительности вполне подходит.
svg {
height: 90vh;
margin: auto;
display: block;
}
path {
stroke-linecap: round;
stroke-width: 6;
}
path.grey {
stroke: #e7e7e8;
}
path.purple {
stroke: url(#gradient);
stroke-dasharray: 198;
stroke-dashoffset: 198;
animation: dash 3s ease-out forwards;
}
path.white {
stroke: #ffffff;
stroke-dasharray: 0px, 198px;
stroke-dashoffset: 198;
stroke-width: 3.5px;
animation: dash 3s ease-out forwards;
}
@keyframes dash {
to {
stroke-dashoffset: 1; /* <---- changed to "1" from "0" */
}
}
<svg viewbox="0 0 100 100">
<linearGradient id="gradient" x1="0" y1="0" x2="0" y2="100%">
<stop offset="0%" stop-color="#56c4fb" />
<stop offset="100%" stop-color="#0baeff" />
</linearGradient>
<path class="grey" d="M30,90 A40,40 0 1,1 80,90" fill='none' />
<path id="purple" fill='none' class="purple" d="M30,90 A40,40 0 1,1 80,90" />
<path id="white" fill='none' class="white" d="M30,90 A40,40 0 1,1 80,90" />
</svg>