Один из способов - использовать несколько путей с разной длиной тире и разной прозрачностью.Пока массивы тире имеют одинаковую общую длину, а смещения тире и первый элемент массива тире имеют одинаковое значение для каждого пути, концы тире будут находиться в одинаковом положении:
#path {
stroke-dasharray: 10 90;
animation: dash 5s linear alternate infinite;
stroke: black;
stroke-width: 5;
}
#path2 {
stroke-dasharray: 20 80;
animation: dash2 5s linear alternate infinite;
stroke: rgba(0,0,0,0.5);
stroke-width: 5;
}
@keyframes dash {
from {
stroke-dashoffset: 100;
}
to {
stroke-dashoffset: 0;
}
}
@keyframes dash2 {
from {
stroke-dashoffset: 110;
}
to {
stroke-dashoffset: 10;
}
}
Постоянно добавлять больше CSS - это немного хлопотно, поэтому я автоматизировал создание CSS, используя некоторый javascript здесь: https://jsfiddle.net/aqwg7ed6/
Эта скрипка автоматически создает 32 пути, что создает приятный эффект.