Vous pouvez me contacter via Facebook (questions, critiques constructives) : page Facebook relative à mon site
Thème : un rond devient de plus en plus gros et de plus en plus opaque puis c'est l'inverse.
On ne peut plus simple.
@keyframes animer { 0% {fill-opacity:0.1; transform :scale(1); fill:red ;} 50% {fill-opacity :1 ; transform :scale(20) ; fill : green ; } 100% {fill-opacity:0.1; transform :scale(1); fill: red ;} } circle {animation : animer 20s 0s infinite linear;transform-origin : 50% 50%;}
Pour qu'il y ait seulement changement de rayon il faut règler l'origine de la transformation au centre du canevas avec la propriété transform-origin. En effet par défaut l'origine d'un transformation pour un canevas SVG est l'angle haut gauche.
On aurait pu écrire l'animation CSS autrement :
@keyframes animer { from {fill-opacity:0.1; transform :scale(1); fill:red ;} to{fill-opacity :1 ; transform :scale(20) ; fill : green ; } } circle {animation : animer 10s 0s infinite linear alternate;transform-origin : 50% 50%;}
Quelques explications sont nécessaires ...
Au lieu d'une animation de 20 secondes qui agrandit puis réduit le rond je me contente d'écrire un "keyframes" qui se contente d'agrandir le rond.
Mais quand j'applique ce "keyframes" à l'objet SVG circle je précise une animation de 10 secondes mais en "alternate".
alternate veut dire que le sens de lecture du modèle d'animation change à chaque cycle (sens normal puis sens inversé puis de nouveau sens normal
et ainsi de suite.
svg{background : linear-gradient( 75deg, navy, aqua,white );} text{font-family : arial ; font-weight : bold ; font-size : 60px ; text-shadow : 5px 5px 5px grey ;fill : navy; } @keyframes deplace { 0% {transform:translateX(-900px); } 50%{transform : translateX(0px);} 100% {transform : translateX(900px);} } text{animation : deplace 10s 0s infinite linear alternate;}
La balise SVG est un élémént HTML a qui on peut appliquer un dégradé linéaire CSS.
Le texte change de direction car dans la propriété animation il y a le paramètre alternate.
Après s'être habitué à animer des objets HTML via CSS on peut être tenté d'intégrer dans un "keyframes" devant s'appliquer à un objet SVG
des propriétés de style telles box-shadow, background, position, top, left et d'autres. Or ces propriétés CSS ne sont pas reconnues par le format SVG !
Pour un élément SVG et à la place de "background", il faut utiliser la propriété "fill".
par contre, comme nous l'avons vu ci-dessus, on peut appliquer à du texte SVG la propriété "text-shadow".
Pour créer cette animation j'ai d'abord utilisé l'application en ligne Boxy SVG pour dessiner, ciel, arbres, route,etc.
Attention comme le fichier SVG contient des liens vers d'autres images, l'insertion dans la page de cette animation ne peut se faire qu'avec la balise object. J'ai donc écrit dans cette page web le code suivant :
Ci-dessous un jet qui atterit sur la piste.
L'animation 3D correspond à un fichier SVG. Je vous communique le code de ce fichier ci-dessous.
Ce fichier SVG comprend non seulement du SVG mais aussi du CSS.
Rappel : dans le cadre d'un code SVG externe (fichier SVG) les "namespaces" xmlns="http://www.w3.org/2000/svg" & xmlns:xlink="http://www.w3.org/1999/xlink" sont obligatoires. Codez un document SVG sans ces "namespaces" et demandez une exécution avec un navigateur vous verrez ...
Le canevas SVG a pour background une image vectorielle qui a été produite avec Inkscape (piste.svg).
Le document SVG comprend une feuille de style avec un "keyframes" ; ce modèle d'animation est appliqué à l'objet SVG identifié "jet".
Cet objet "jet" est le clone d'un modèle défini et identifié "avion".
Un autre clone pour représenter un avion sur le tarmac.
Notez que le modèle d'animation repose sur la propriété transform avec ici la fonction scale() qui provoque de facto une translation puisque le point d'origine de la transformation dans un canevas SVG est le coin haut gauche du canevas !
Pour les mêmes raisons que l'exemple précédent, la balise IMG ne convient pas. Il faut utiliser la balise OBJECT pour insérer le fichier SVG dans la page.