2016-11-24 4 views
3

Ich habe eine "Wichtiger Hinweis" -Bar erstellt, wo ich den Text über den Bildschirm rollen soll.CSS-animierten Lauftext mit Text-Einrückung

Es wird durch die Animation der text-indent erreicht, die gut zu funktionieren schien, bis ich Text hatte, der länger als die Breite des Bildschirms war.

Hier ist der HTML:

<div class="sitemessage"> 
    dfgh hgsl;k sfghjh fgdlj dflgh sg jls sdfhsdkjldfjksg sdfg ksjdfhg klsjdfhg lksjdfhg klsjdhg lksjdhfg sldkfjgh sdflgkjsdfglk jsdfg klsdfgl jksdfgl jksdfg ljsdfgkjl dafglkj adfgkl sdfgkjh sdfgkhl sdfg kjlsdfgk lsdfgk jl sdfgkl adfgkl adfgklj sdfgklhj sdfgkl jdfg kljafdg ljkdfg klsdfgkhjl sdfgk jlsdfgkhj dfgkhl adfgkj adfkljg a 
</div> 

Und hier ist mein CSS:

.sitemessage { 
    width:100%; 
    max-width: 960px; 
    margin:auto; 
    white-space: nowrap; 
    overflow: hidden; 
    text-indent: 965px; 
    animation: floatText 15s infinite linear; 
} 

.sitemessage:hover { 
    -webkit-animation-play-state: paused; 
    -moz-animation-play-state: paused; 
    -o-animation-play-state: paused; 
    animation-play-state: paused; 
} 

@-webkit-keyframes floatText{ 
    from { 
     text-indent: 100%; 
    } 

    to { 
     text-indent: -100%; 
    } 
} 

@media screen and (min-width: 960px) { 
    @-webkit-keyframes floatText{ 
     from { 
      text-indent: 960px; 
     } 

     to { 
      text-indent: -100%; 
     } 
    } 
} 

Das Problem, das ich habe ist, dass die Länge des Textes im .sitemessage Behälter viel mehr oder viel sein könnte weniger als 100% der Bildschirmbreite, also text-indent von -100% wird nicht wirklich funktionieren.

Irgendwelche Ideen von etwas, das ich tun kann, ohne Javascript zu verwenden oder dem HTML hinzuzufügen.

+1

eine schnelle Geige des Verhaltens: https://jsfiddle.net/r2u8Ldkt/ –

+1

Recreating '' . im Jahr 2016, schön! https://developer.mozilla.org/en-US/docs/Web/HTML/Element/marquee – Roberrrt

Antwort

5

Sie können versuchen, transform anstelle von text-indent zu verwenden.

jsFiddle

.sitemessage { 
 
    display: inline-block; 
 
    white-space: nowrap; 
 
    animation: floatText 15s infinite linear; 
 
    padding-left: 100%; /*Initial offset*/ 
 
} 
 
.sitemessage:hover { 
 
    animation-play-state: paused; 
 
} 
 
@keyframes floatText { 
 
    to { 
 
    transform: translateX(-100%); 
 
    } 
 
}
<div class="sitemessage"> 
 
    START dfgh hgsl;k sfghjh fgdlj dflgh sg jls sdfhsdkjldfjksg sdfg ksjdfhg klsjdfhg lksjdfhg klsjdhg lksjdhfg sldkfjgh sdflgkjsdfglk jsdfg klsdfgl jksdfgl jksdfg ljsdfgkjl dafglkj adfgkl sdfgkjh END 
 
</div>

+0

Schließen, aber es animiert den Text innerhalb der div, die ich tun muss, anstatt das ganze div. Ich vermute, dass ich vielleicht ein wenig HTML hinzufügen muss, um dies in meinem Fall zu funktionieren, aber das ist nicht das Ende der Welt. – Tom

+0

Die meisten Prozentwerte beziehen sich auf die Breite des Containers und nicht auf die Breite des Elements selbst. Deshalb funktioniert die Transformation in diesem Fall. – Stickers