Bonsoir,
Comme je ne sais pas exactement d'où vient le problème - CSS ou JS - je poste le sujet en "débutant", mais j'ai tout de même l'impression que mon problème est lié au CSS.
Il s'agit de la compatibilité avec Chrome v111 ou inférieur pour une animation SVG.
Tout est partit de cet article posté sur CSS-Tricks où il s'agit de simuler le dessin de SVGs avec les propriétés CSS stroke-dasharray et stroke-dashoffset. Cet article m'a inspiré et j'ai eu envie d'aller jusqu'au bout en créant un script permettant d'animer n'importe quel SVG, même s'il est très complexe.
Vous pourrez vous donner une idée du résultat obtenu en consultant cette page 404 : Page 404 avec une animation sur le SVG.
Ça fonctionne aussi au scroll, lorsque vous arrivez au niveau de chaque SVG animable, comme sur cette page, grâce à un `IntersectionObserver`.
Ça fonctionne aussi sur les Sprites SVG car j'injecte préalablement le contenu du symbole du sprite en SVG en ligne grâce à une fonction `svgSpriteToInline()` de mon cru (pour info voir la fonction ici : Github).
Donc j'étais bien content du résultat obtenu avant de voir que j'ai un bug sur un Chrome v111 que j'ai au boulot : le SVG n'est pas colorisé, il est donc invisible pour l'utilisateur.
Je n'ai pas d'erreur JavaScript, à priori les SVG sont tous bien retournés en inline, si besoin est, par la fonction `svgSpriteToInline()`, j'ai donc l'impression que ça pêche côté CSS mais sans trouver pourquoi. Un problème de compatibilité avec une règle CSS ? Mais alors laquelle ? J'ai fais le tour et il me semble qu'elles sont toutes supportées :
Le JavaScript qui calcule la longueur des paths - et qui donc permet l'animation correcte via les styles CSS - est un peu conséquent ; je vous le met en lien : svgAnimation.js (Github).
Si l'un d'entre-vous y voit plus clair que moi... Merci à lui.
Modifié par Olivier C (03 Sep 2024 - 01:00)
Comme je ne sais pas exactement d'où vient le problème - CSS ou JS - je poste le sujet en "débutant", mais j'ai tout de même l'impression que mon problème est lié au CSS.
Il s'agit de la compatibilité avec Chrome v111 ou inférieur pour une animation SVG.
Tout est partit de cet article posté sur CSS-Tricks où il s'agit de simuler le dessin de SVGs avec les propriétés CSS stroke-dasharray et stroke-dashoffset. Cet article m'a inspiré et j'ai eu envie d'aller jusqu'au bout en créant un script permettant d'animer n'importe quel SVG, même s'il est très complexe.
Vous pourrez vous donner une idée du résultat obtenu en consultant cette page 404 : Page 404 avec une animation sur le SVG.
Ça fonctionne aussi au scroll, lorsque vous arrivez au niveau de chaque SVG animable, comme sur cette page, grâce à un `IntersectionObserver`.
Ça fonctionne aussi sur les Sprites SVG car j'injecte préalablement le contenu du symbole du sprite en SVG en ligne grâce à une fonction `svgSpriteToInline()` de mon cru (pour info voir la fonction ici : Github).
Donc j'étais bien content du résultat obtenu avant de voir que j'ai un bug sur un Chrome v111 que j'ai au boulot : le SVG n'est pas colorisé, il est donc invisible pour l'utilisateur.
Je n'ai pas d'erreur JavaScript, à priori les SVG sont tous bien retournés en inline, si besoin est, par la fonction `svgSpriteToInline()`, j'ai donc l'impression que ça pêche côté CSS mais sans trouver pourquoi. Un problème de compatibilité avec une règle CSS ? Mais alors laquelle ? J'ai fais le tour et il me semble qu'elles sont toutes supportées :
@media (scripting: enabled) and (prefers-reduced-motion: no-preference) {
.invisible-if-animation {
visibility: hidden;
}
.svg-animation.active {
& :where(path, circle, ellipse, line, polygon, polyline, rect, text, textPath, tref, tspan) {
stroke-width: 1;
fill: transparent;
stroke: var(--colorG38);
animation: anim-svg var(--anim-svg, 5s) cubic-bezier(0.5, 0, 1, 0) forwards;
}
}
@keyframes anim-svg {
90% {
stroke: var(--colorG38);
}
to {
stroke-dashoffset: 0;
stroke: var(--colorT2);
}
}
}
Le JavaScript qui calcule la longueur des paths - et qui donc permet l'animation correcte via les styles CSS - est un peu conséquent ; je vous le met en lien : svgAnimation.js (Github).
Si l'un d'entre-vous y voit plus clair que moi... Merci à lui.
Modifié par Olivier C (03 Sep 2024 - 01:00)