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 :

Défilement horizontal en CSS, d'un texte sans saccades [CSS 3]


Sujet :

CSS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Homme Profil pro
    Retraité informatique
    Inscrit en
    Juin 2012
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 519
    Par défaut Défilement horizontal en CSS, d'un texte sans saccades
    Bonjour à tous les passionnés.

    A force de regarder le code, je ne vois pas où se situe le problème.
    Juste un défilement d'un texte horizontalement, mais j'obtiens, par moment, des saccades désagréables.
    J'ai fait une vue sur codepen http://codepen.io/JefReb/pen/jyNYpw

    Je pense à une longueur du texte ou à un width non adapté, mais je ne comprends pas.

    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
    html, body {
    	margin: 0;
    	padding: 0;
    	font-size: 100%;
    }
    body {
    	font-family: "Times New Roman", Times, verdana, arial, sans-serif;
    	background-color: #fff;
    	font-size: 100%;
    }
    body {
    	width: 800px;
    	margin: 0 auto;
    }
    /* Texte défilant */
    .content {
    	display: block;
    	margin: 40px auto;
    	padding: 0;
    	overflow: hidden;
    	position: relative;
    	/*	table-layout: fixed;*/
    	width: 650px;
    	height: 60px;
    }
    .message {
    	display: block;
    	margin-left: -100%;
    	padding: 0 5px;
    	font-size: 2rem;
    	text-align: left;
    	animation: defilement 20s infinite linear;
    }
    .message:after {
    	content: attr(data-text);
    	position: absolute;
    	white-space: nowrap;
    	padding-left: 10px;
    }
     @keyframes defilement {
     0%, 100% {
    margin-left:0;
    }
     99.99% {
    margin-left:-100%;
    }
    }
    et
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <div class="content"><span class="message">Voici un texte qui doit défiler horizontalement --- </span> </div>
    <div class="content"><span class="message" data-text="Voici un texte qui doit défiler horizontalement --- ">Voici un texte qui doit défiler horizontalement --- </span></div>
    Le
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .message:after {
    	content: attr(data-text); ... }
    a été rajouter pour éviter un temps trop long avant la réapparition du message.
    Mais peut-être est-ce ce code qui provoque les saccades.

    Une idée serait appréciée. Merci d'avance à tous.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Cela peut venir du navigateur, essaies sur plusieurs navigateurs pour voir (firefox et chrome par exemple).

  3. #3
    Membre émérite
    Homme Profil pro
    Retraité informatique
    Inscrit en
    Juin 2012
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 519
    Par défaut
    Merci, mais cela fait la même chose dans Chrome, Firefox et IExplore. Je pense que cela devrait faire la même chose sous opera ou safari, mais je ne peux le tester.
    La saccade se passe à la fin, au moment où le texte reprend depuis le début.
    Je continue à chercher ...

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    Bonjour,
    ton soucis provient de la position de ton élément :after par rapport à son conteneur parent.

    Commençons par la régle @keyframe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     @keyframes defilement {
        0% {
            margin-left:0;
        }
        100% {
            margin-left:-100%;
        }
    }
    est très largement suffisant.
    pour la classe mesage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    .message {
        display: inline-block;  /* pour un meilleur alignement */
        position:relative;      /* pour servir de référent à :after */
        min-width:100%;         /* dimension minimum */
        /*margin-left: -100%;   /* OUT pas nécessaire */
        /*padding: 0 5px;       /* OUT pas nécessaire */
        background:#cde;        /* pour voir l'espace occupé */
        font-size: 2rem;
        text-align: left;
        animation: defilement 20s infinite linear;
    }
    maintenant le :after
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .message:after {
        content: attr(data-text);
        position: absolute;
        left:100%;              /* placement à droite toute */
        white-space: nowrap;
        /*padding-left: 10px    /* OUT pas nécessaire ou mettre même valeur que conteneur */
    }
    pour bien voir tes positionnements de départ n'hésite pas à désactiver l'animation et les « hidden » le tout en associant des couleurs de background différentes.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    le défi m'a plu : http://codepen.io/jreaux62/pen/EZYBeW

    Astuce(s) :
    • le <div> prend la longueur du texte (c'est la longueur de référence pour le défilement).
      Il est en absolu : le texte peut sans problème être plus long que le conteneur "content"
    • on décale l'animation du 2ème texte (data-text) pour un effet "défilement en continu".

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div class="messagedefilant">
      <div data-text="Voici un texte qui doit défiler horizontalement. Il peut etre encore plus long !---"><span>Voici un texte qui doit défiler horizontalement. Il peut etre encore plus long !---</span></div>
    </div>
     
    <div class="messagedefilant">
      <div data-text="texte très court !---"><span>texte très court !---</span></div>
    </div>
    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
    /* Texte défilant */
    .messagedefilant {
      display: block;
      margin: 40px auto;
      padding: 0;
      overflow: hidden;
      position: relative;
      width: 50%;
      max-width: 640px;
      height: 60px;
    }
     
    .messagedefilant div {
      position: absolute;
      min-width: 100%; /* au minimum la largeur du conteneur */
    }
     
    .messagedefilant div span, 
    .messagedefilant div:after {
      position: relative;
      display: inline-block;
      font-size: 2rem;
      white-space: nowrap;
      top:0;
    }
     
    .messagedefilant div span {
      animation: defilement 10s infinite linear;
      background: #cde;
    }
     
    .messagedefilant div:after {
      position: absolute;
      top:0; left:0;
      content:attr(data-text);
      animation: defilement2 10s infinite linear;
      background: #edc;
    }
     
    @keyframes defilement {
      0% { margin-left: 0; }
      100% { margin-left: -100%; }
    }
     
    @keyframes defilement2 {
      0% { margin-left: 100%; }
      100% { margin-left: 0%; }
    }
    Dernière modification par Invité ; 02/01/2017 à 21h11.

  6. #6
    Membre émérite
    Homme Profil pro
    Retraité informatique
    Inscrit en
    Juin 2012
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 519
    Par défaut
    Ha super aux 2 réponses.
    Je reviens juste ce soir pour voir ça de suite.
    Mille merci. moi aussi c'est un peu un défit. a bientôt pour clore ...

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

Discussions similaires

  1. Scrollviewer défilement horizontal sans ascenseur
    Par SIC83 dans le forum Silverlight
    Réponses: 2
    Dernier message: 29/05/2012, 09h37
  2. Taille Input Text sans Css
    Par Neilime05 dans le forum Zend_Form
    Réponses: 4
    Dernier message: 12/05/2009, 09h17
  3. Menu horizontal en CSS sans Javascript...
    Par Décibel dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 17/11/2008, 23h14
  4. Fichiers texte sans accents
    Par mika dans le forum Langage
    Réponses: 5
    Dernier message: 03/11/2004, 16h42
  5. Insérer de texte sans un JtextArea
    Par OxN dans le forum Débuter
    Réponses: 7
    Dernier message: 11/06/2004, 12h16

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