Mit mehr Macht kommt mehr Verantwortung.
Eines der Dinge, die CSS Ihnen erlaubt zu steuern, ist der Hover-Zustand vieler Objekte, am bemerkenswertesten Links (<a>-Elemente). Typischerweise wird der Hover-Zustand mit Farbänderungen oder vielleicht etwas Aufwändigerem wie einer Hintergrundbildänderung (oder einer Hintergrundpositionsänderung, siehe CSS Sprites) gestaltet.
Aber das ist nicht alles, was Sie ändern können. Ebenso leicht können Sie Schriftstärke, Außenabstand, Innenabstand oder buchstäblich Höhe und Breite ändern, wenn Sie mit einem Block-Element arbeiten. Die Änderung all dieser Dinge beim Hovern bringt Sie in **gefährliches Terrain**.
Warum gefährlich? Weil Sie den klickbaren Bereich des Elements verändern. Wenn der neue klickbare Bereich so positioniert ist, dass der Cursor außerhalb liegt, wird das Hover-Ereignis ausgelöst und springt zu seinem Standardstil zurück, was den klickbaren Bereich wieder ändert, was dazu führt, dass Ihr Cursor wieder darin liegt, was den Stil wieder ändert, was..... Sie verstehen es, "CSS Jitter".
"CSS Jitter" kann jederzeit auftreten, wenn Sie die Größe eines Objekts beim Hovern ändern.
Es ist so einfach. Wenn Sie CSS Jitter vermeiden wollen, gestalten Sie die Hover-Zustände von Objekten nicht so, dass sich ihre Größe in irgendeiner Weise ändert.
Es gibt einige Beispiele, bei denen die Größenänderung sicher ist. Grundsätzlich, wenn der klickbare Bereich in allen Richtungen größer wird beim Darüberfahren. Zum Beispiel, das Hervorheben von Text beim Darüberfahren. Da die Fettung dazu führt, dass das Objekt in allen Richtungen größer wird, werden Sie nie einen Jitter auslösen. Wenn Sie jedoch das Gegenteil tun würden, unboldierter Text beim Darüberfahren, würde der klickbare Bereich kleiner werden und fast sicher einen Jitter auslösen.
Hier sind einige Hover-Stile, die "CSS Jitter" auslösen könnten
- Text hervorheben/unhervorheben
- Außen- oder Innenabstand ändern
- Rahmengröße ändern
- Breite oder Höhe ändern
- Zeilenhöhe ändern
Schauen Sie sich CSS Jitter-Man an.
Okay, das ist wirklich albern, aber nur um genau zu veranschaulichen, was ich meine, habe ich CSS Jitter-Man erstellt. Jitter-Man ist ein Anker-Element, das standardmäßig 246 Pixel breit ist, aber beim Darüberfahren auf 212 Pixel Breite schrumpft. Wenn Sie also mit der Maus von rechts oder links auf Jitter-Man fahren, wird er schrumpfen. Das verkleinert den klickbaren Bereich, wodurch Ihre Maus außerhalb landet, und er wird wieder größer... und somit der Jitter. Schauen Sie sich das Beispiel an.
Das ist wirklich keine riesige Epidemie oder so, es ist nur etwas, dessen man sich bewusst sein sollte. Es wird wahrscheinlich auf subtilere Weise auftauchen, was tatsächlich der Ursprung meiner Idee ist. Ich hatte eine `border-bottom` für meine Anker-Elemente verwendet, um dem Unterstrich etwas Abstand nach unten zu geben. Dann habe ich beim Darüberfahren diesen Abstand um einen Pixel reduziert, sodass der Unterstrich ein wenig nach oben sprang, was ein schöner Effekt war. Aber was das verursacht hat, war ein ein Pixel breiter Bereich, in dem CSS Jitter auftreten konnte. Nicht gut. Letztendlich habe ich für das Hover-Ereignis eine andere Methode gewählt.

Ich habe laut gelacht, als ich Jitter Man bei seiner Aktion sah!
Ich schätze, das könnte auch zu Ihrem Vorteil funktionieren, wie Sie erwähnen, es erzeugt einen coolen Effekt, wenn es kontrolliert wird.
Chris
Ich liebte deinen Jitter-Man! :p
Super! Ich bin froh, dass jemand Freude daran hatte =). Ich habe es gepostet und litt dabei, weil ich dachte, die Leute würden es so dumm finden.
Oh, Jitter-Man glaubt, er kann fliegen, indem er mit den Armen wedelt...
Toller Beitrag.
lol
Jitter Man ist großartig! ;-)
Dieses Hover-Springen ist wirklich ärgerlich. Als ich mit CSS anfing, gab es dieses Problem, immer wenn ich den Rand von Blockelementen beim Hovern änderte. Ich weiß nicht, ob es der beste Weg ist, dies zu tun, aber jetzt füge ich einfach einen Rand zum Blockelement selbst hinzu, der der Hintergrundfarbe entspricht & das Ändern der Randfarbe beim Hovern erledigt dann die Aufgabe perfekt, kein Springen mehr.
Grüße
LOL@Jitter Man Tanz. Das ist gut.
Ich denke, der Grund, warum Jitter Man tanzt, ist, dass die Bildabmessungen und die Div-Abmessungen nicht gleich groß sind.
guter Tipp, danke!
Ich lese das spät wegen der Feiertage, aber ein guter Lacher am Montagmorgen :lol
In Bezug auf die Aussage, dass man es effektiv für einen Hover-Zustand nutzen könnte, indem man ihn ein oder zwei Pixel "jittern" lässt, würde ich widersprechen, da dies Probleme bei Menschen mit elpelyte verursachen würde und auch die gesamte Seite verschieben/jittern lassen könnte, was für den Betrachter störend wäre..
Der Trick hier ist, eine Technik wie Sprite-Hintergründe zu verwenden (http://www.alistapart.com/articles/sprites).
Entschuldigung, ydx, aber das Jitter-Problem wird nicht dadurch verursacht, dass Bildabmessungen und Division-Abmessungen unterschiedlich sind.
Krumpet
Ups, eigentlich hätte ich diesen Link einreichen sollen
http://wellstyled.com/css-nopreload-rollovers.html
Das ist eigentlich, woher die Idee stammt. A List Apart hat sie nur erweitert.
Krumpet
Wir haben auch über CSS Sprites hier berichtet.
LOL... toller Artikel.
Das ist großartig. Ist das der offizielle Name oder nur einer, den ihr verwendet? Das hat mich schon eine Weile gestört, aber ich wusste nie, wie ich es nennen oder warum es passiert sollte. Danke!
Ich hätte tatsächlich gerne einige Informationen gehabt, WIE man verhindert, dass Elemente herumspringen (z.B. wenn das aktive Element einen gepunkteten Rahmen anzeigt). Es ist absolut klar, dass ich es vermeiden sollte, das muss mir nicht gesagt werden. Aber die Frage ist WIE?
Grüße,
Vielen Dank für all Ihre guten Ratschläge zur CSS-Manipulation.
Ist dieses Problem immer noch relevant? Der Artikel ist aus dem Jahr 2007.
Ich stoße auf Probleme mit zufälligen Inhalten, die beim Skalieren eines CSS-Kreises mit einem Hover-Effekt (Übergang, Transformation) jittern.
Gibt es eine Lösung für diese Art von Problem?
Vielen Dank,
Ich habe diesen Artikel gefunden, während ich nach einer Lösung für dieses Problem gesucht habe. Da dieser Artikel keine Lösung bot, musste ich weiter suchen. Das Problem, mit dem ich konfrontiert war, war Jitter aufgrund des Hinzufügens eines Rahmens beim Hovern. Die Lösung, die ich fand, war einfach, den für den Hover-Zustand vorgesehenen Stil dem inhärenten Zustand des Elements hinzuzufügen, aber auf eine Weise, die nicht sichtbar ist. Zum Beispiel, einen Standard `border-bottom:1px solid transparent;` zu haben; dann `border-bottom:1px solid red;` im Hover-Zustand.
Ich würde annehmen, dass ähnliche Ansätze für die anderen Jitter-verursachenden Probleme verwendet werden könnten.
Tatsächlich gibt es eine Lösung, um Text beim Hovern fett zu machen, sie funktioniert so
Das Beispiel ist mit dem `<a>-Tag, also wäre das HTML dafür so
Was passiert ist – weil wir `a:before` mit demselben Text verwenden, aber fett und transparent – stellen wir sicher, dass der `<a>-Tag seine Breite entsprechend der Breite hat, die er beim Hovern erhalten würde.
Chris Silverman schrieb und teilte seinen Artikel Fixing the jitter bug. 11 Jahre später!