POP hat diese coolen Hover-Effekte in den Boxen, aus denen ihre Homepage besteht. Die Boxen haben standardmäßig einen weißen Hintergrund, und wenn man mit der Maus darüber fährt, gleitet ein dunkler Hintergrund darunter, die Textfarben ändern sich und der Text "springt" ein wenig nach oben. Wenn man die Maus wegnimmt, gleitet der dunkle Hintergrund weg, die Textfarben ändern sich zurück und der Text springt nach unten. Ich dachte, ich versuche, das zu replizieren, weil, Sie wissen schon, verdammt nochmal Hover-Effekte.
Demo
Check out this Pen!
HTML
Jeder Bereich ist eine "Box"
<a href="#" class="box">
<h2><span>Breaking news -</span> hippos are sorta dangerous</h2>
<h3>Tonight at nine</h3>
</a>
CSS (Hintergründe)
Das Styling der Standardbox ist trivial. Die Hover-Effekte sind der interessante Teil. POP macht das Hintergrundgleiten, indem es ein tatsächliches Element animiert, dessen Position. Wenn wir damit einverstanden sind, dass dieses Feature nur in Browsern funktioniert, die Verläufe unterstützen, können wir dieses Element weglassen und nur die Hintergrundposition animieren.
Ein halb weißer und halb schwarzer Hintergrund ist einfach
background: linear-gradient(
white, white 50%, black 50%, black
);
Dann machen wir ihn doppelt so groß wie das Element selbst
background-size: 100% 200%;
So wie das

Tatsächlich werden wir den Hintergrund etwas größer als 200 % machen, da bei genau 200 % immer noch ein kleiner Teil des Hintergrunds im Element sichtbar war (in Chrome).
.box {
background: linear-gradient(
white, white 50%, #333 50%, #333
);
transition: all 0.2s ease;
}
.box:hover {
background-position: 100% 100%;
}
CSS (Farben)
Die Standardtextfarbe ist schwarz, daher ist hier überhaupt kein CSS erforderlich. Beim Hovern passen wir die Farben an. Das Ändern des Spans ist nur eine lustige Überraschung und bringt mehr "Pop" in die Party.
.box:hover h2 {
color: #48ad26;
}
.box:hover h2 span {
color: white;
}
.box:hover h3 {
color: #999;
}
CSS (Hüpfen)
Der knifflige Teil hier ist, dass der "Sprung" in *unterschiedliche Richtungen* erfolgt, je nachdem, ob es sich um ein Hovern-Ein oder Hovern-Aus handelt. Die Tatsache, dass sich der Text ein wenig bewegt und dann in seine ursprüngliche Position zurückkehrt, bedeutet, dass ein Übergang uns hier auch nicht helfen wird, das ist Animationsbereich. Wir erstellen eine @keyframes für den Aufwärtssprung und eine weitere für den Abwärtssprung. Ein wenig Padding wird uns helfen, da unsere Box-Sizing-Wahl die Höhe jeder Box gleich hält.
@keyframes up-bump {
0% { padding-top: 2em; }
50% { padding-top: 1.5em; }
100% { padding-top: 2em; }
}
@keyframes down-bump {
0% { padding-top: 2em; }
50% { padding-top: 2.5em; }
100% { padding-top: 2em; }
}
Standardmäßig (wird beim Hovern-Aus ausgelöst) erhält die `.box` den Abwärtssprung und das `:hover` erhält den Aufwärtssprung. Dies entspricht der Richtung, in der der Hintergrund ein- und ausgleitet.
.box {
animation: down-bump 0.4s ease;
}
.box:hover {
animation: up-bump 0.4s ease;
}
Anfangssprung-Fix
Das Hinzufügen dieser Animation im Anfangszustand lässt sie sofort beim Laden der Seite laufen. Könnte ein schöner Effekt sein, könnte nervig sein. Die POP-Website führt sie nicht beim Laden aus. Matt Boldt hatte die gute Idee, den Aus-Sprung nur beim Hovern-Aus hinzuzufügen (über eine Klasse), damit er anfangs nicht läuft.
Check out this Pen!
Auf Geräten ohne Hover...
Es sind Links und keine wichtigen Inhalte sind verborgen, also keine große Sache.
Süßer Effekt. Touch-Geräte sind nicht die einzige Stolperfalle – für reine Tastaturnutzer scheinen die Ergebnisse nicht konsistent zu greifen. Jemand muss eventuell noch etwas nacharbeiten, bevor die Implementierung erfolgt, falls eine Verpflichtung gegenüber diesem Publikum besteht.
Sie könnten den Effekt auch auf den :active-Zustand anwenden.
Loooooveeeeee. (Offensichtlich).
Vielleicht möchten Sie eine Umrandung für die gesamte Box bei :focus hinzufügen, um das Tastaturproblem zu lösen und die Animationen ganz wegzulassen. Das ist etwas, worüber ich nachdenke: Ob Tastaturnutzer mit einem einfacheren Effekt/Zustand besser bedient wären. Ich kann einige Anwendungsfälle dafür finden, warum es so wäre und auch einige, warum es nicht so wäre.
Gibt es eigentlich eine Möglichkeit, reine Tastaturnutzer anzusprechen? Mir fällt eine sehr komplizierte Lösung ein, aber das ist wahrscheinlich nicht die beste.
Ich bin mir nicht sicher, aber tatsächlich könnte man einen Event-Handler anhängen und prüfen, ob er "keydown" auslöst, und für jeden Div tabindex hinzufügen, so etwas in der Art
$(“#myid”).on(“keydown”, function(event){
if (event.keyCode == 9 )
{
//etc
}
});
Schön!
Ich dachte, ein Pseudo-Element ':before' wäre eine gute Möglichkeit, dies zu tun, aber Übergänge scheinen bei ihnen nicht zu funktionieren.
Eff yeah hovers, in der Tat.
Aber die Textbewegung stoppt nach ständigen Versuchen beim Hovern.
Ja, das gleiche Problem. Wenn ich meine Maus einfach wild über diese fliegen lasse, bricht es zusammen und springt nicht mehr nach oben, wenn man darüber fährt.
Gibt es eine Lösung?
Ich kann es hier nicht replizieren. Aber ich bin mir nicht sicher, ob viel getan werden kann. Ich weiß, dass diese Art von Sache im jQuery-Animationszeitalter üblich war, wo man vorsichtig sein musste, vorherige Animationen zu stoppen und die Dinge im Allgemeinen intelligenter zu handhaben. Aber hier passiert nur eine CSS-Animation, die entweder angewendet wird oder nicht. Ich bin sicher, wenn Sie einen Screencast des Bruchs bekommen könnten, wäre das eine großartige Sache, um es als Fehler an den jeweiligen Browser zu melden.
Habe das schon früher gepostet. Aber es ging aus irgendeinem Grund nicht. Ich glaube, es hat etwas mit der E-Mail-Adressendomäne zu tun, die ich verwendet habe. @gmail funktioniert gut, aber meine Arbeitsadresse scheint nicht zu funktionieren, Chris. Vielleicht wurde mein vorheriger Beitrag in die Moderationswarteschlange gestellt?
Wie auch immer, hier ist ein Screencast, den ich gemacht habe. Er repliziert das Problem, das Solomon angesprochen hat. Ich bin auf FX20.
http://www.screenr.com/fkJ7
Ich rate jedem dringend davon ab, dies in realen Szenarien zu tun. Aus UX-Sicht: 1. Der Textsprung-Effekt dient keinem Zweck, trägt keine Botschaft, dient nicht als Übergang zu irgendetwas 2. Text sollte nicht auf und ab springen (besonders während sich die Textfarbe und der Hintergrund ändern). Persönlich tut es meinen Augen weh, wie wenn man auf ein Foto schaut, das gerade unscharf ist.
Ach, sei kein Miesepeter!
Natürlich dient er keinem Zweck, es ist nur ein lustiges interaktives Erlebnis. Das Web wäre eine langweilige Angelegenheit, wenn sich nichts bewegen oder uns überraschen würde.
Es ist sehr schwierig, eine UX-Beurteilung vorzunehmen, wenn eine solche Erfahrung subjektiv ist. Sie zum Beispiel fanden die Übergänge zwecklos. Ich fand sie als visuell interessante Art zu zeigen, dass die Elemente auf der Seite nicht einfach statisch, sondern mit weiteren Informationen verknüpft waren.
Dieser Effekt war (für mich) ansprechender, als er den gesamten Container abdeckte, anstatt nur die Hälfte. Letzteres fand ich sogar etwas visuell störend.
Ich habe auch kein Problem mit dem springenden Text gesehen. Ich würde nicht sagen, dass es etwas strukturell Wichtiges hinzufügt – aber keine Website oder App ist rein "Funktion". Ein gewisses Maß an Anpassung muss für "Form" erlaubt sein.
Obwohl ich verstehe, was Sie sagen, habe ich das Gefühl, dass, wenn Sie dieses Argument zu seiner vollen Schlussfolgerung treiben würden, wir ein Internet voller völlig effektiver, aber wirklich langweiliger Websites hätten. Sparsam und mit guter Platzierung eingesetzt, kann das "Warum nicht" das sein, was eine Website braucht, um sie interessant zu machen.
Niemand braucht Zuckerguss. Aber es schmeckt gut und ich mag es.
Visuell ansprechend zu sein, ist ein Zweck an sich.
Das ist sehr wahr.
Wo ist der "Gefällt mir"-Button für diesen Kommentar? ;)
Hallo, liebe die Seite Chris, großer Fan, deine Podcasts sind KLASSE, ich wäre auch nicht dort, wo ich jetzt in der CSS / WordPress Welt bin, ohne den Lodge, wollte das nur auf der Website www. protest.eu Website sagen, dort haben sie einen ähnlichen Effekt auf ihren Infoboxen, es sieht so aus, als ob die Box beim Hover / Fokus aufklappt, ich mag auch die Art und Weise, wie die Slider nach links scrollen, während man die Seite nach unten scrollt, ich glaube, das wurde mit jQuery gemacht, was meint ihr dazu?
Ja... nun, da das Web so ist, wie es ist, und die Philosophie "erst der Inhalt" respektiert, finde ich diesen Effekt, der dafür sorgt, dass es spielerisch zugeht, besonders in diesem Teil...
Waka waka!!!!!
Mein persönlicher Favorit!
Liebe es!
Ich habe es immer geliebt, wie du Dinge mit CSS darstellst/entwickelst. Ich fange gerade an, CSS zu lernen und teile mein Wissen auf meiner neu erstellten Website csshacks.org. Ich möchte eigentlich wissen: "Gibt es eine Möglichkeit, eine Übergangs-Effekt-Schleife zu erstellen? Das heißt, die Übergangseffekte wiederholen?"
Danke
Danke nochmals für einen coolen neuen CSS-Trick. Es ist erstaunlich, dass das ohne jQuery gemacht werden kann. Weiß jemand etwas über die Browserunterstützung für diesen Trick? Er funktioniert in aktuellen Versionen von Chrome, Safari und Firefox unter Mac. Ich habe gelesen, dass IE 10 Verläufe unterstützt. Ich nehme an, Sie können für nicht konforme Browser eine Farbänderung des Hintergrunds bereitstellen.
Schöner Effekt. Ich denke nicht, dass es zu schwer wäre, dies an Touch-Events anzupassen.
Wenn die Anfangsbox eine visuelle Darstellung hätte und beim Hovern eine Nachricht enthüllen würde – wie sie bei POP verwendet wird – dann hätte ich unzählige Anwendungsmöglichkeiten dafür. Wie kann ich das erreichen? Bin neu hier.
Hey Chris, guter Trick!!! :)
Danke!!
Hallo Chris,
Netter Trick. Ich habe das auf meiner Website etwa ein Jahr lang ausprobiert, um ein schönes Menü anzuzeigen. Die Anfangsbox zeigt die ICONs und beim Hovern würde sie die Anfangsbox hochfahren und die zugehörigen Links anzeigen. Beim Hovern weg – Verwandte Links gehen runter und Box kommt von oben nach unten. Ich habe `-webkit-transition` für die Animation verwendet.
Es sah sehr schön aus, aber der einzige Nachteil dabei war, dass viele Leute nicht auf die Links klickten, da sie unter der ursprünglichen DIV verborgen waren. Nur Leute, die das bemerkten und wussten, dass darunter etwas verborgen war, klickten.
Ich habe gerade ein Pen auf Codepen erstellt, um zu zeigen, was ich auf meiner Website zevolving.com implementiert habe.
Codepen zum ersten Mal benutzt, es ist super!
Kann nicht einreichen?
Wirklich großartig! Ich denke, es hat einige wirklich großartige reale Implementierungen. Ich bin dafür, dass der Benutzer die Seite erlebt, anstatt sie nur zu sehen! Ich hoffe, solche Dinge immer öfter zu sehen :)
Ich habe einen Button mit ähnlichem Effekt gemacht: http://codepen.io/burnandbass/pen/dvaql
Ich beginne mich zu fragen, wie sicher die Haltung "... und dann kümmern wir uns nicht um kein Hovern auf Geräten ohne Hover" ist.
Ich denke, hier ist es in Ordnung, da, wie Sie erwähnen, kein Verlust entsteht. Aber es ist etwas, das bei solchen Entscheidungen sorgfältig bedacht werden sollte.
Ansonsten vielen Dank für eine gründliche und leicht verständliche Beschreibung eines großartigen Effekts, es gibt einige Details, die ich verpasst hätte und die ihn wirklich bereichern.
Sie sagen, ein Übergang funktioniert wegen des 'Hüpfens' nicht, aber vielleicht würde eine benutzerdefinierte `cubic-bezier`-Timing-Funktion den Trick machen, z.B. http://cubic-bezier.com/#.4,1.4,.39,1.5
Schöner Effekt und toll, mehr über CSS-Animationen und Übergänge zu lernen.
Aus diesem Code habe ich ihn kopiert, um ihn zu modifizieren und mehr zu lernen
http://codepen.io/daveb/pen/qIikx
Ich habe ein "Mehr lesen" in jede Box eingefügt, nur zum Ausprobieren.
Das "Mehr lesen" verwendet eine Div (ja, ich weiß, es ist nicht sehr semantisch) mit absoluter Position, und ich habe `.box` `position:relative` und `overflow:hidden` hinzugefügt.
Aber ich bekomme es nicht richtig zum Laufen, es hat einen seltsamen Effekt, wenn man über die zweite Box hovers: die dritte verschwindet während des Übergangs.
Ohne die Animationseigenschaft in `.box:hover` scheint es gut zu funktionieren, aber es ist offensichtlich nicht dasselbe.
Toller kleiner Trick, Kumpel!
Das ist schön, Chris. Ich werde nach einem Vorwand suchen, dies so schnell wie möglich zu verwenden! Danke :)
Liebe den Effekt, Chris.
Ich habe in der Vergangenheit jQuery für ähnliche Techniken verwendet, aber es ist gut, eine CSS-Alternative zu sehen, danke!
Ich habe auch das Problem bemerkt, dass die Textanimation verloren geht. Es scheint zu passieren, sobald man mit dem Mauszeiger ein wenig verrückt geworden ist. Ich habe auch festgestellt, dass CSS-Animationen über verschiedene Browser hinweg etwas unvorhersehbar sind, daher benutze ich immer noch jQuery. Tsk tsk.
jQuery kann fehlschlagen, wenn man die Maus fast mit Lichtgeschwindigkeit bewegt, aber es gibt einige gute Workarounds, die das tun, was Chris gesagt hat: die vorherige Aktion abbrechen, bevor eine neue gestartet wird.
Hier ist ein Gist mit dem Code, den ich verwende, um eine .hover-Klasse hinzuzufügen, wenn ich den :hover-Pseudo-Selektor nicht verwenden kann/werde. Ich frage mich, ob dies verwendet wurde, um eine Klasse hinzuzufügen, dann war die Animation an die Klassenänderung gebunden, wenn das Verhalten zuverlässiger wäre.
https://gist.github.com/ryanburnette/5337314
Hier ist ein Pen mit demselben Code, aber unter Verwendung des zuverlässigeren jQuery-Hovers. Wer weiß, vielleicht hilft es.
http://codepen.io/ryanburnette/pen/JxcEo
Entschuldige meine Unwissenheit, aber... h2 innerhalb von Ankern? Sollte das so sein?
Sicher. HTML5 ist damit einverstanden.
Wirklich cooler Code, den du gegeben hast
Ich liebe es! Danke!
Cooler Effekt, aber ich schätze, er hat in seiner aktuellen Form eine begrenzte Nutzbarkeit, und wenn jeder anfängt, ihn zu verwenden, dann wird er nichts Interessantes/Besonderes mehr sein. Ich glaube jedoch, dass dies ein interessantes Thema ist, über das man nachdenken und neue Implementierungsmöglichkeiten finden kann. Damit lässt sich viel machen.
Ich hatte eine kleine CSS-Form zu bewegen, 'margin' war das, was es für mich getan hat
Nein danke