Sie wissen bereits, dass Inline-Styles eine „schlechte Praxis“ sind. Inline-Styles sind nicht wiederverwendbar wie CSS in separaten Dateien und somit ineffizient aufgebläht. Es sei denn, es ist nicht so. Es gibt einige Fälle, in denen Inline-Styles absolut Sinn machen. Vielleicht haben Sie eine Anwendung, in der Benutzer ihre Lieblingsfarbe auswählen und Sie dann den Hintergrund des Körpers darauf einstellen. Die Verwendung eines Inline-Styles ist in diesem Fall tatsächlich effizienter als externes CSS, da es sich um einen einzelnen Benutzer und ein einzelnes Element handelt.
Nehmen wir nun an, Sie möchten zu einem Wert animieren, der in einem Inline-Style festgelegt ist. Sagen wir, Sie möchten eine Fortschrittsanzeige animieren. Sie beginnen bei Null und müssen zu einem beliebigen beliebigen Wert hochgehen. Vielleicht sagt Ihnen ein Aufruf an den Server, wie vollständig ein Upload ist, und Sie legen den Wert davon fest.

In einem Beitrag, den ich vor fast einem Jahr veröffentlicht habe, beklagte ich, dass man nicht zu einem Inline-Style animieren kann. Sie können keine Keyframe-Animationen in Inline-Styles deklarieren und Sie wissen nicht, welchen Endwert Sie in externem CSS animieren sollen. Leider lag ich falsch, da ich diesen handfesten kleinen CSS-Trick noch nicht kannte.
<div class="progress-bar">
<div style="width: 75%">Upload is 75% complete.</div>
</div>
Hier ist der Trick: Lassen Sie einfach die Deklaration to oder 100% im @keyframes weglassen
@-webkit-keyframes progress-bar {
0% { width: 0; }
}
@-moz-keyframes progress-bar {
0% { width: 0; }
}
keyframes progress-bar {
0% { width: 0; }
}
Dann rufen Sie die Animation auf der Fortschrittsanzeige auf
.progress-bar > div {
-webkit-animation: progress-bar 2s;
-moz-animation: progress-bar 2s;
animation: progress-bar 2s;
}
Und schon animiert sich die Fortschrittsanzeige bis zum durch den Inline-Style festgelegten Wert.
Siehe den Pen Animate to an Inline Style von Chris Coyier (@chriscoyier) auf CodePen.
Besonderer Dank geht an Michael Paryna, der mir dies per E-Mail geschickt hat und mich dazu gebracht hat, es auszuprobieren.
Das ist cool.
Ich werde es irgendwo verwenden.
Wissen Sie was, ich dachte, ich wüsste alles über CSS-Animationen! Gut gemacht, Chris!
Ich habe mit Ihrem Dabblet-Link herumgespielt und die Animation bricht durch den Container-Div, wenn Sie den Inline-Style auf width: 100% setzen. Ich habe versucht, ihn auf width: auto zu setzen, aber das löst die Animation nicht aus. Ich habe auch versucht, den Body-Padding auf 0px zu setzen und es bricht immer noch... Irgendwelche Ideen?
Wenn Sie die Breite des Fortschrittselements auf 100% setzen, müssen Sie das Padding am Fortschrittselement ändern, nicht am Padding des Körpers. Das Problem ist, dass „width: 100%“ nicht wirklich das tut, was wir wollen. Ich habe hier darüber geschrieben.
In diesem Fall sieht der Text jedoch ohne das Padding umständlich aus, daher habe ich es behoben, indem ich ein Absatz-Element hinzugefügt habe, auf dem Sie sicher Padding hinzufügen können (da der Absatz keine feste Breite hat)
http://dabblet.com/gist/1687523
Und während ich diesen Kommentar schreibe, habe ich festgestellt, dass Sie dies sogar noch schneller mit
box-sizingbeheben können, sodass eine Zeile dies behebt, ohne ein Absatz-Elementhttp://dabblet.com/gist/1687552
Dies liegt am Box-Modell (das Padding ist der Schuldige). Es kann leicht durch Verwendung von
box-sizing: border-box;behoben werden (dies funktioniert ab IE7, Sie müssen jedoch Webkit- und Moz-Präfixe verwenden).Dies bietet auch eine Möglichkeit, etwas beim anfänglichen Laden einer Seite zu animieren, ohne andere Zustandsänderungen wie Klick oder Hover. Ich erinnere mich, dass ich das kürzlich recherchiert habe und die allgemeine Meinung war, dass man das nicht kann. Aber Sie wussten es wahrscheinlich sowieso besser...
Sollte das nicht ein Fortschrittselement sein? Toller Trick aber.
Ich würde sagen ja, aber es ist SO schwer, <meter> und <progress> zu stylen. Ganz zu schweigen vom Animieren. Wann bekommen wir dafür proper Shadow DOM? ;)
Siehe hier
http://blog.oldworld.fr/index.php?post/2011/07/The-HTML5-progress-element-in-Firefox
http://www.useragentman.com/blog/2012/01/03/cross-browser-html5-progress-bars-in-depth/
Vielleicht kann es mit jQuery und "on.load" verwendet werden, wie
Nur wenn wir die Ladezeit der Seite kennen...
Adam Khoury von developphp.com hat kürzlich etwas dazu gemacht, er hat JavaScript und HTML5 zusammen verwendet, um einen animierten Uploader zu erstellen. Hier ist der Link zu seiner Video-Lektion http://www.developphp.com/view.php?tid=1228
Ups, das ist developphp.com
Entschuldigung für den falschen Link! :P
Das ist nett, aber so wurde es immer gemacht. Das Coole daran ist, dass es reines CSS ist.
Das ist großartig, gut erklärt... danke fürs Teilen...
Das ist ziemlich genial.
Ich liebe es, dass Sie einen Fehler, den Sie vor einem Jahr gemacht haben, genommen und ihn in einen weiteren großartigen Blogbeitrag verwandelt haben :)
Von Ihnen gibt es mehr zu lernen als nur CSS-Tricks.
Hallo, Chris, ich habe auch vor ein paar Tagen etwas Ähnliches veröffentlicht ^_^
Ooh!
Das sieht wirklich gut aus! Lesezeichen.
Obwohl... ich sehe einen kleinen Fehler in Chrome. Die gestreifte Überlagerung liegt „über“ dem abgerundeten Balken. Die Maske ist also wohl kaputt.
Ja, ich weiß nicht warum. Ich habe
overflow:hiddenhinzugefügt, aber es funktioniert immer noch nicht T_TMuss ich
relativePositionierung stattabsoluteverwenden?Bearbeitung: Ich habe die absolute Positionierung nur auf das Pseudo-Element angewendet, während die Elemente darin nicht modifiziert wurden. Das verwirrt mich, warum
overflow:hiddennicht funktioniert.Das war nichts Interessantes.. bitte lernen Sie, wie man einen Upload-Fortschritt mit PHP und JS erstellt .. oder so etwas..
Tolle Weitergabe, ich werde das in Zukunft ausprobieren müssen. CSS-Animation ist großartig.
Cool, es gefällt mir, danke
Ich habe es ein wenig gestylt und kam zu folgendem Ergebnis
Dabblet
Verwenden Sie `overflow: hidden;` für `.progress-bar` http://dabblet.com/gist/1697531
Dieser Teil könnte nützlich sein, um ihn zum inneren Div hinzuzufügen
.progress-bar > div { max-width: 100%!important; }sehr cool. Danke für die Hilfe!
Hallo Chris, ich habe auch vor ein paar Monaten etwas Ähnliches gepostet...
Progress Bar CSS3
Der Prozess ist leicht unterschiedlich.
Diese sind nett. Das ist genau das Szenario, über das ich gesprochen habe. In Ihrem Fall müssen Sie wissen, zu welchem % Sie im externen CSS animieren. Ziemlich cool, diesen Wert stattdessen einfach als Inline-Style festzulegen.
Vielen Dank für dieses Tutorial! Ich habe wirklich neue, großartige Tricks gelernt.
Ich liebe Ihre Tutorials und Ihre sauberen Layouts.
Wow... das ist großartig..., aber wie sieht es mit dem IE-Browser aus? Funktioniert es?
Microsoft wird CSS3-Animationen auf IE10 Windows 8 unterstützen.
Für ältere Browser, die keine CSS3-Animationen unterstützen, können Sie JavaScript-Feedback verwenden.
Wirklich schön, es gefällt mir. Ich liebe Ihre Tutorials und Ihre sauberen Layouts.
Ich liebe es, wie Sie Dabblet in Ihren CSS-Demos überall verwenden. Wirklich großartige App!
Ist es möglich, die Animation bei z. B. 50% der Animation zum Inline-Style zu animieren?