CSS-Übergang funktioniert nicht mit oben, unten, links, rechts
Lesezeit: 4 Minuten
php_nub_qq
Ich habe ein Element mit Stil
position: relative;
transition: all 2s ease 0s;
Dann möchte ich seine Position nach dem Anklicken fließend ändern, aber wenn ich die Stiländerung hinzufüge, findet der Übergang nicht statt, stattdessen bewegt sich das Element sofort.
Was könnte die Ursache dafür sein? Gibt es Eigenschaften, die nicht „übergangsweise“ sind?
BEARBEITEN: Ich denke, ich hätte erwähnen sollen, dass dies nicht jQuery ist, sondern eine andere Bibliothek. Der Code scheint wie beabsichtigt zu funktionieren, Stile werden hinzugefügt, aber der Übergang funktioniert nur im zweiten Fall?
Angenommen, $$ ist ein Alias für jQuery [0] gibt ein natives dom-Objekt zurück (im Gegensatz zu einem jquery-Objekt) und hat keines .on() Methode. Wenn nicht – was ist $$?
– xec
4. Dezember 2013 um 18:48 Uhr
Nichts davon ist gültig, wenn Sie jQuery verwenden, gibt es nichts namens style(), und in nativem JS funktioniert es sicherlich nicht so.
– adeneo
4. Dezember 2013 um 18:49 Uhr
Es gibt eine Reihe von Regeln, die übergangsfähig sind. sehen W3-Spezifikation
– Goldentoa11
4. Dezember 2013 um 18:51 Uhr
@Goldentoa11 top scheint in der Liste zu sein, was meine Zweifel beseitigt top nicht für Übergänge zur Verfügung stehen.
– php_nub_qq
4. Dezember 2013 um 18:53 Uhr
@php_nub_qq Überprüfen Sie die Antwort von adaneo und meinen Kommentar dazu, so wie es aussieht, müssen Sie mit a beginnen top Wert gesetzt (zum Beispiel auf 0), bevor Sie ihn ändern (auf 200 oder was auch immer)
– xec
4. Dezember 2013 um 18:54 Uhr
xec
Versuchen Sie, einen Standardwert für festzulegen top im CSS, um ihm mitzuteilen, wo er vor dem Übergang beginnen soll:
CSS
position: relative;
transition: top 2s ease 0s; /* only transition top property */
top: 0; /* start transitioning from position '0' instead of 'auto' */
Es ist auch eine gute Übung, Geben Sie genau an, was Sie überführen möchten (nur top Anstatt von all) sowohl aus Leistungsgründen als auch, damit Sie nichts anderes (wie color) unbeabsichtigt.
Guter Punkt! Ich habe die Antwort ein wenig konkretisiert, da sie 8 Jahre später immer noch Aufmerksamkeit erregt 🙂
– xec
6. Mai 2021 um 9:24 Uhr
Vielleicht müssen Sie in Ihrem CSS-Regelsatz einen Höchstwert angeben, damit er weiß, welcher Wert animiert werden soll aus.
In meinem Fall war die div-Position behoben, das Hinzufügen der linken Position war nicht genug, es begann erst nach dem Hinzufügen des Anzeigeblocks zu funktionieren
left:0;
display:block;
LWCris
Etwas, das für das OP nicht relevant ist, aber vielleicht für jemand anderen in der Zukunft:
Für Pixel (px), wenn der Wert “0” ist, kann die Einheit weggelassen werden: right: 0 und right: 0px beide arbeiten.
Ich habe jedoch festgestellt, dass dies in Firefox und Chrome der Fall ist nicht der Fall für die Sekundeneinheit (s). Während transition: right 1s ease 0s funktioniert, transition: right 1s ease 0 (fehlende Einheit s für letzten Wert transition-delay) tut nicht (es tut funktionieren jedoch in Edge).
Im folgenden Beispiel sehen Sie das right funktioniert für beide 0px und 0aber transition funktioniert nur für 0s und es geht nicht mit 0.
Angenommen, $$ ist ein Alias für jQuery [0] gibt ein natives dom-Objekt zurück (im Gegensatz zu einem jquery-Objekt) und hat keines
.on()
Methode. Wenn nicht – was ist $$?– xec
4. Dezember 2013 um 18:48 Uhr
Nichts davon ist gültig, wenn Sie jQuery verwenden, gibt es nichts namens style(), und in nativem JS funktioniert es sicherlich nicht so.
– adeneo
4. Dezember 2013 um 18:49 Uhr
Es gibt eine Reihe von Regeln, die übergangsfähig sind. sehen W3-Spezifikation
– Goldentoa11
4. Dezember 2013 um 18:51 Uhr
@Goldentoa11
top
scheint in der Liste zu sein, was meine Zweifel beseitigttop
nicht für Übergänge zur Verfügung stehen.– php_nub_qq
4. Dezember 2013 um 18:53 Uhr
@php_nub_qq Überprüfen Sie die Antwort von adaneo und meinen Kommentar dazu, so wie es aussieht, müssen Sie mit a beginnen
top
Wert gesetzt (zum Beispiel auf 0), bevor Sie ihn ändern (auf 200 oder was auch immer)– xec
4. Dezember 2013 um 18:54 Uhr