Ich habe ein Problem mit einer CSS3-Animation.
.child {
opacity: 0;
display: none;
-webkit-transition: opacity 0.5s ease-in-out;
-moz-transition: opacity 0.5s ease-in-out;
transition: opacity 0.5s ease-in-out;
}
.parent:hover .child {
opacity: 0.9;
display: block;
}
Dieser Code funktioniert nur, wenn ich die Änderung von entferne display
.
Ich möchte die Anzeige direkt nach dem Hover ändern, aber die Deckkraft sollte über den Übergang geändert werden.
Antworten:
Basierend auf Michaels Antwort ist dies der tatsächlich zu verwendende CSS-Code
quelle
Sie können mit CSS-Animationen arbeiten:
quelle
Wenn möglich -
visibility
anstelle von verwendendisplay
Zum Beispiel:
quelle
Diese Problemumgehung funktioniert:
Definieren Sie einen „Keyframe“:
Verwenden Sie diesen "Keyframe" für "Hover":
quelle
Ich habe das benutzt, um es zu erreichen. Sie verblassen beim Schweben, nehmen aber keinen Platz ein, wenn sie versteckt sind, perfekt!
quelle
Ich habe mich ein bisschen verändert, aber das Ergebnis ist wunderschön.
Dank an alle.
quelle
visibility: hidden;
.child /visibility:visible;
zum Schwebeflug hinzufügen und dies sollte das Problem mit dem Bildschirmleser behebenEs gibt eine andere gute Methode, um dies mithilfe von Zeigerereignissen zu erreichen:
Leider wird dies in IE10 und darunter nicht unterstützt.
quelle
Ich hatte das gleiche Problem. Ich habe versucht, Animationen anstelle von Übergängen zu verwenden - wie von @MichaelMullany und @Chris vorgeschlagen -, aber es funktionierte nur für Webkit-Browser, selbst wenn ich mit den Präfixen "-moz" und "-o" kopiert habe.
Ich konnte das Problem umgehen, indem ich
visibility
anstelle von verwendetedisplay
. Dies funktioniert bei mir, weil mein untergeordnetes Element so istposition: absolute
, dass der Dokumentenfluss nicht beeinträchtigt wird. Es könnte auch für andere funktionieren.So würde der ursprüngliche Code mit meiner Lösung aussehen:
quelle
Wenn Sie die Änderung mit JS auslösen, sagen wir beim Klicken, gibt es eine nette Problemumgehung.
Sie sehen, dass das Problem auftritt, weil die Animation bei der Anzeige ignoriert wird: Kein Element, aber der Browser wendet alle Änderungen gleichzeitig an und das Element wird nie angezeigt: Blockieren, während es nicht gleichzeitig animiert ist.
Der Trick besteht darin, den Browser zu bitten, den Rahmen nach dem Ändern der Sichtbarkeit, aber vor dem Auslösen der Animation zu rendern.
Hier ist ein JQuery-Beispiel:
quelle
Für absolute oder feste Elemente können Sie auch den Z-Index verwenden:
Andere Elemente sollten jetzt einen Z-Index zwischen -100 und 100 haben.
quelle
type=password
Feldern durcheinander gebracht . Es ist nicht sichtbar.Ich weiß, das ist keine wirkliche Lösung für Ihre Frage, weil Sie danach fragen
Mein Ansatz löst eine allgemeinere Frage, aber vielleicht war dies das Hintergrundproblem, das durch die Verwendung
display
in Kombination mit gelöst werden sollteopacity
.Mein Wunsch war es, das Element aus dem Weg zu räumen, wenn es nicht sichtbar ist. Diese Lösung macht genau das: Sie bewegt das Element aus dem Weg und kann für den Übergang verwendet werden:
Dieser Code enthält keine Browserpräfixe oder Abwärtskompatibilitäts-Hacks. Es zeigt nur das Konzept, wie das Element wegbewegt wird, da es nicht mehr benötigt wird.
Der interessante Teil sind die zwei unterschiedlichen Übergangsdefinitionen. Wenn sich der Mauszeiger über dem
.parent
Element befindet, muss das Element.child
sofort platziert werden, und dann wird die Deckkraft geändert:Wenn es keinen Hover gibt oder der Mauszeiger vom Element wegbewegt wurde, muss gewartet werden, bis die Deckkraftänderung abgeschlossen ist, bevor das Element vom Bildschirm wegbewegt werden kann:
Das Verschieben des Objekts ist eine praktikable Alternative in einem Fall, in dem die Einstellung
display:none
das Layout nicht beschädigen würde.Ich hoffe, ich habe bei dieser Frage den Nagel auf den Kopf getroffen, obwohl ich sie nicht beantwortet habe.
quelle
Eine Sache, die ich getan habe, war, den Rand des Anfangszustands auf "Rand-Links: -9999px" zu setzen, damit er nicht auf dem Bildschirm angezeigt wird, und dann "Rand-Links: 0" im Schwebezustand zurückzusetzen. Behalten Sie in diesem Fall "display: block" bei. Hab den Trick für mich gemacht :)
Bearbeiten: Status speichern und nicht zum vorherigen Schwebezustand zurückkehren? Ok hier brauchen wir JS:
quelle
Um Animation in beide Richtungen onHoverIn / Out zu haben, habe ich diese Lösung gemacht. Hoffe es wird jemandem helfen
quelle
WIE MAN OPACITY MIT CSS ANIMIERT:
Dies ist mein Code:
der CSS-Code
oder überprüfen Sie diese Demo-Datei
quelle
display
Eigenschaft einfach entfernt wurde.display:
ist nicht übertragbar. Sie müssen wahrscheinlich jQuery verwenden, um das zu tun, was Sie tun möchten.quelle