IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mise en page CSS Discussion :

Animation avec un clip-path laisse des "traces"


Sujet :

Animation en CSS

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 275
    Points : 113
    Points
    113
    Par défaut Animation avec un clip-path laisse des "traces"
    Bonjour,

    je tente une petite animation en css: un arc de cercle rouge d'une certaine taille qui disparaît en 10 secondes ( recouvert par un autre arc de cercle ).
    J'ai ajouté une aiguille qui suit la disparition et heureusement, car sans aiguille il reste une petit "filet" rouge de l'arc de cercle !

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="style.css">
        <title>camembert</title>
    </head>
    <body>
     
        <div class="camembert">
          <div class="aiguille"></div>
          <div class="part part1"></div>
          <div class="part part2"></div>
        </div>
    </body>
    </html>

    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }
     
    .camembert {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        width: 200px;
        height: 200px;
        border-radius: 50%;
      }
     
    .aiguille {
      z-index: 10;
      position: absolute;
      left: 50%;
      width: 2px;
      height: 100%;
      background: linear-gradient(blue 50%, white 50%);
      transform: translate(-50%, 0) rotateZ(30deg);
      transform-origin: center;
      animation: rebour 10s linear forwards;
    }
     
    .part {
      position: absolute;
      width: 100%;
      height: 100%;
      border-radius: 50%;
      clip-path: polygon(50% 50%, 50% 0%, 100% 0, 100% 50%, 100% 100%, 50% 100%);
    }
     
    .part1 {
      background-color: #e74c3c;
      /* border: 1px solid white; */
    }
     
    .part2 {
      animation: rebour 10s linear forwards;
      background-color: white;
      transform: rotateZ(30deg);
    }
     
    @keyframes rebour {
      to {
        transform: rotateZ(0deg);
      }
    }

    Essayez en commentant la div aiguille et la bordure de la classe "part1", qui servent à masquer le problème

    Dans ce cas , à la fin de l'animation, vous devriez voir apparaître un beau demi cercle blanc entouré d'une très fine bordure rouge !
    Si quelqu'un sait pourquoi on obtient ce résultat et s'il y a un moyen simple de corriger ça, je le remercie d'avance.
    Pour l'instant, ma solution me convient, mais je ne m'attendais pas à ce résultat, qui ne me semble pas logique.

    Merci d'avance,

    Laurent.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 112
    Points
    44 112
    Par défaut
    Bonjour,
    encore visiblement un problème lié aux contexte d'empilement et la façon dont les couleurs qui se chevauchent seront mélangées.

    J'ai ajouté une aiguille qui suit la disparition et heureusement, car sans aiguille il reste une petit "filet" rouge de l'arc de cercle !
    Ton autre « pansement » avec l'ajout d'une bordure sur ton élément .part1 semble plus efficace que l'ajout de ton .aiguille.


    Pour l'instant, ma solution me convient, mais je ne m'attendais pas à ce résultat, qui ne me semble pas logique.
    Un exemple plus simple, enfin je crois :
    HTML
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div class="conteneur">
      <div class="secteur"></div>
    </div>
    CSS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    :root {
      --delay: 5s;
    }
    .conteneur {
      width: 200px;
      height: 200px;
      clip-path: polygon(50% 0,100% 0,100% 100%,50% 100%);  /* on masque la moitié gauche du conteneur */
    }
    .secteur {
      --deb: 30deg;
      --alpha: calc(180deg + var(--deb));
      width: 100%;
      height: 100%;
      border-radius: 50%;
      background-color: blue;
      animation: animRetour var(--delay) linear forwards;
      transform: rotate(var(--alpha));
      clip-path: polygon(50% 0,100% 0,100% 100%,50% 100%);
    }
     
    @keyframes animRetour {
      to {
        transform: rotate(180deg);
      }
    }
    c'est une autre approche dérivée de ce que j'avais exploré il y a quelque temps :


    Ceci étant, pour les petits angles tu peux faire plus simple !
    HTML
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div class="conteneur no-clip-path">
      <div class="secteur_2"></div>
    </div>

    CSS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    .conteneur {
      width: 200px;
      height: 200px;
      clip-path: polygon(50% 0,100% 0,100% 100%,50% 100%);
    }
    .no-clip-path {
      clip-path: none;
    }
    .secteur_2 {
      width: 100%;
      height: 100%;
      border-radius: 50%;
      background-color: green;
      animation: animRetour_2 var(--delay) linear forwards;
      clip-path: polygon(50% 0, 78.88% 0, 50% 50%);       /* calcul d'après tg 30° */
    }
     
    @keyframes animRetour_2 {
      to {
        clip-path: polygon(50% 0, 50% 0, 50% 50%);
      }
    }
    ici on ne joue qu'avec le clip-path sur l'élément

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 275
    Points : 113
    Points
    113
    Par défaut
    Bonjour,

    merci du retour, comme d'habitude
    Le but final de cet exercice est de construire une montre/chronomètre avec des paramètres choisis par un(une) utilisateur(trice) (couleurs, alarme, début de compte à rebours...)
    en utilisant de façon optimale html/CSS/Javascript: le maximum en html/CSS et le reste en javascript ( en particulier le code répétitif! ).

    Donc j'ai commencé petit: j'ai d'abord fait les petits angles, comme toi !

    Il me faudra de toute façon une aiguille, donc autant m'en servir.
    Bonne idée les rectangles à la place des cercles pour cacher: moins de points.

    Dans ta façon de faire, il y a aussi des traces: un petit trait dans la hauteur sur la fin de l'animation. Heureusement que je mets une aiguille.
    Par curiosité, peut-on faire sans ?

    Il faut que je retienne l'utilisation des "data-value" et "attr" que tu montres dans le progress-bar circulaire, je n'y pense jamais.

    Merci donc,

    Laurent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HighCharts] Tooltip qui laisse des traces
    Par Invité dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 23/03/2014, 17h38
  2. CrossCursor qui laisse des traces
    Par mtloper dans le forum Langage
    Réponses: 0
    Dernier message: 02/02/2008, 18h21
  3. [MFC] RedrawWindow laisse des traces!
    Par Tuizi dans le forum Visual C++
    Réponses: 9
    Dernier message: 01/05/2007, 14h20
  4. [FLASH MX2004] Lancer une anim avec des paramètres ??
    Par gchanteux dans le forum Flash
    Réponses: 4
    Dernier message: 23/03/2005, 17h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo