я пытаюсь реализовать эффект пульсации, подобный следующему
поскольку приведенный выше код хорошо работает только для круглых или квадратных форм, можем ли мы каким-либо образом добиться такого же эффекта для формы сердца svg?
<svg class = "heart" preserveAspectRatio = "xMidYMid meet" viewbox = "0 0 20 20"><path d = "M8.612,2.347L8,2.997l-0.612-0.65c-1.69-1.795-4.43-1.795-6.12,0c-1.69,1.795-1.69,4.706,0,6.502l0.612,0.65L8,16 l6.12-6.502l0.612-0.65c1.69-1.795,1.69-4.706,0-6.502C13.042,0.551,10.302,0.551,8.612,2.347z" fill = "#fff" transform = "scale( 0.954929658551372 )"></path></svg>
Самым быстрым решением было бы поменять местами box-shadow
на filter: drop-shadow
. Это будет работать для произвольных форм.
Однако это решение не совсем идеально; box-shadow
/ drop-shadow
дорого анимировать. Вместо этого вы можете использовать transform: scale
и opacity
, например:
@keyframes pulsing {
from {
opacity: 1;
transform: scale(1);
}
to {
opacity: 0;
transform: scale(3);
}
}
.element {
animation: pulsing 1000ms ease-out;
}
Другим подходом может быть анимация ширины обводки.
svg {
width: 40px;
margin: 40px;
overflow: visible;
}
use {
stroke: red;
opacity: 0;
animation: pulsing 1000ms ease-out infinite;
}
@keyframes pulsing {
from {
opacity: 0.5;
stroke-width: 0;
}
to {
opacity: 0;
stroke-width: 12px;
}
}
.element {
animation: pulsing 1000ms ease-out;
}
<svg class = "heart" preserveAspectRatio = "xMidYMid meet" viewbox = "0 0 20 20">
<use xlink:href = "#shape"/>
<path id = "shape" d = "M8.612,2.347L8,2.997l-0.612-0.65c-1.69-1.795-4.43-1.795-6.12,0c-1.69,1.795-1.69,4.706,0,6.502l0.612,0.65L8,16 l6.12-6.502l0.612-0.65c1.69-1.795,1.69-4.706,0-6.502C13.042,0.551,10.302,0.551,8.612,2.347z" fill = "#f00" transform = "scale( 0.954929658551372 )"></path>
</svg>
Сердце с пульсирующей анимацией: youtu.be/Jq4diUd10Zs