Ich entwerfe derzeit ein CSS-Mega-Dropdown-Menü - im Grunde ein reguläres Nur-CSS-Dropdown-Menü, das jedoch verschiedene Arten von Inhalten enthält.
Im Moment scheinen CSS 3-Übergänge nicht für die Eigenschaft 'display' zu gelten , dh Sie können keinen Übergang von display: none
zu display: block
(oder eine beliebige Kombination) durchführen.
Gibt es eine Möglichkeit für das Menü der zweiten Ebene aus dem obigen Beispiel, "einzublenden", wenn jemand über einem der Menüelemente der obersten Ebene schwebt?
Ich bin mir bewusst, dass Sie Übergänge auf dem visibility:
Grundstück verwenden können, aber ich kann mir keine Möglichkeit vorstellen, dies effektiv zu nutzen.
Ich habe auch versucht, Höhe zu verwenden, aber das ist kläglich gescheitert.
Ich bin mir auch bewusst, dass es trivial ist, dies mit JavaScript zu erreichen, aber ich wollte mich herausfordern, nur CSS zu verwenden, und ich denke, ich komme ein wenig zu kurz.
quelle
z-index:0
.visibility: hidden
sei denn, Sie möchten, dass Bildschirmleser es lesen (während typische Browser dies nicht tun ). Es definiert nur die Sichtbarkeit des Elements (wie gesagtopacity: 0
), und es ist immer noch auswählbar, anklickbar und was auch immer es war; es ist einfach nicht sichtbar.pointer-events
in IE 8,9,10, daher ist es nicht immer in OrdnungAntworten:
Sie können zwei oder mehr Übergänge verketten
visibility
. Diesmal ist dies praktisch.(Vergessen Sie nicht die Herstellerpräfixe der
transition
Eigenschaft.)Weitere Details finden Sie in diesem Artikel .
quelle
Sie müssen das Element auf andere Weise ausblenden, damit dies funktioniert.
Ich habe den Effekt erreicht, indem ich beide
<div>
s absolut positioniert und das versteckte auf gesetzt habeopacity: 0
.Wenn Sie sogar Toggle die
display
Eigenschaft aus ,none
umblock
Ihren Übergang auf andere Elemente werden nicht auftreten.Um dies zu umgehen, lassen Sie das Element immer zu
display: block
, verbergen Sie es jedoch, indem Sie eine der folgenden Methoden anpassen:height
auf0
.opacity
auf0
.overflow: hidden
.Es gibt wahrscheinlich mehr Lösungen, aber Sie können keinen Übergang ausführen, wenn Sie das Element auf umschalten
display: none
. Sie können beispielsweise versuchen, Folgendes zu versuchen:Das wird aber nicht funktionieren. Aus meiner Erfahrung habe ich festgestellt, dass dies nichts tut.
Aus diesem Grund müssen Sie das Element immer behalten
display: block
- aber Sie können es umgehen, indem Sie Folgendes tun:quelle
visibility:hidden; opacity:0; -webkit-transition: all .2s ease-in-out;
Dies geht nicht nur nicht richtig über, sondern das Zielelement wird niemals angezeigt. Die Qualitätssicherung wird Sie, mich und Ihre Mutter im Stich lassen.height: 0;
und ihn nicht ändern, funktioniert der Übergang nicht. Ich habe dies versucht, nur um die Deckkraft zu ändern. Ich musste denheight: 0;
overflow: hidden
Sie sich vielmals bedankt haben!Zum Zeitpunkt dieses Beitrags deaktivieren alle gängigen Browser CSS-Übergänge, wenn Sie versuchen, die
display
Eigenschaft zu ändern. CSS-Animationen funktionieren jedoch weiterhin einwandfrei, sodass wir sie als Problemumgehung verwenden können.Beispielcode (Sie können ihn entsprechend auf Ihr Menü anwenden) Demo :
Fügen Sie Ihrem Stylesheet das folgende CSS hinzu:
Wenden Sie dann die
fadeIn
Animation auf das Kind an, wenn Sie den Mauszeiger bewegen (und natürlich festlegendisplay: block
):Update 2019 - Methode, die auch das Ausblenden unterstützt:
(Etwas JavaScript-Code ist erforderlich)
quelle
height: 0
oben erwähnte Trick (für Übergänge) scheint nicht zu funktionieren, da die Höhe beim Ausblenden des Übergangs auf 0 gesetzt wird, aber dieser Trick scheint gut zu funktionieren.display
Eigenschaft nutzen - es gibt wirklich keinen Grund dafür. Und selbst wenn sie taten , warum sollte Animationen arbeiten dann? Sie können diedisplay
Eigenschaft auch nicht in CSS-Animationen verwenden.Ich vermute, dass der Grund dafür, dass Übergänge deaktiviert werden, wenn sie
display
geändert werden, darin liegt, was die Anzeige tatsächlich tut. Es ist nicht alles ändern , die möglicherweise reibungslos animiert werden könnten.display: none;
undvisibility: hidden;
sind zwei völlig verschiedene Dinge.Beide haben den Effekt, dass das Element unsichtbar gemacht wird, aber
visibility: hidden;
es wird immer noch im Layout gerendert, aber nur nicht sichtbar .Das versteckte Element nimmt immer noch Platz ein und wird immer noch inline oder als Block oder Block-Inline oder Tabelle oder was auch immer das
display
Element zum Rendern vorschreibt, und nimmt entsprechend Platz ein.Andere Elemente bewegen sich nicht automatisch, um diesen Raum einzunehmen. Das versteckte Element rendert einfach nicht seine tatsächlichen Pixel für die Ausgabe.
display: none
Auf der anderen Seite wird tatsächlich verhindert, dass das Element vollständig gerendert wird .Es nimmt keinen Layoutplatz ein.
Andere Elemente, die einen Teil oder den gesamten von diesem Element eingenommenen Raum belegt hätten, passen sich jetzt an, um diesen Raum zu belegen, als ob das Element einfach überhaupt nicht existiert hätte .
display
ist nicht nur ein weiteres visuelles Attribut.Er stellt den gesamten Rendering - Modus des Elements, wie etwa , ob es ein
block
,inline
,inline-block
,table
,table-row
,table-cell
,list-item
, oder was auch immer!Jedes dieser Elemente hat sehr unterschiedliche Auswirkungen auf das Layout, und es gibt keine vernünftige Möglichkeit, sie zu animieren oder reibungslos zu übergehen (stellen Sie sich beispielsweise einen reibungslosen Übergang von
block
nachinline
oder umgekehrt vor!).Aus diesem Grund werden Übergänge deaktiviert, wenn sich die Anzeige ändert (auch wenn die Änderung von oder nach erfolgt
none
- diesnone
ist nicht nur Unsichtbarkeit, sondern ein eigener Element-Rendering-Modus, der überhaupt kein Rendering bedeutet!).quelle
display
können nicht wie andere Eigenschaften reibungslos übertragen werden, aber das bedeutet nicht, dass das Timing nicht wichtig ist. Es ist sehr wichtig zu kontrollieren, wann der Übergang vondisply:block
zu stattfindetdisplay:none
. Genau wie @CurtisYallop es beschrieben hat. Wenn ich aus , um den Übergang willopacity:1
zuopacity:0
und dann Wechseldisplay:block
zu ,display:none
ich soll es tun können.Anstelle von Rückrufen, die in CSS nicht vorhanden sind, können wir
transition-delay
Eigenschaften verwenden.Also, was ist hier los?
Wenn eine
visible
Klasse hinzugefügt wird, starten beideheight
undopacity
starten die Animation ohne Verzögerung (0 ms), benötigen jedochheight
0 ms, um die Animation abzuschließen (entsprichtdisplay: block
) undopacity
600 ms.Wenn die
visible
Klasse entfernt wird, wirdopacity
die Animation gestartet (0 ms Verzögerung, 400 ms Dauer) und die Höhe wartet 400 ms. Erst dann (0 ms) wird der Anfangswert wiederhergestellt (entsprichtdisplay: none
dem Animationsrückruf).Beachten Sie, dass dieser Ansatz besser ist als der, der verwendet wird
visibility
. In solchen Fällen nimmt das Element immer noch den Platz auf der Seite ein und ist nicht immer geeignet.Weitere Beispiele finden Sie in diesem Artikel .
quelle
height:100%
denen das Layout in einigen Fällen zerstört werden kann. Tolle Lösung, wenn das kein Problem ist. Eine der wenigen bidirektional arbeitenden.transition: height 0ms 0ms, opacity 600ms 0ms
, habe ich nur benutzttransition-delay: 0s
.display
ist keine der Eigenschaften, auf die der Übergang wirkt.Unter Animierbare CSS-Eigenschaften finden Sie eine Liste der CSS-Eigenschaften, auf die Übergänge angewendet werden können. Siehe CSS Werte und Einheiten des Moduls 4, Kombinieren Werte: Interpolation, Addition, und Akkumulation , wie sie interpoliert werden.
Bis zu CSS 3 wurde in 9.1 aufgeführt. Eigenschaften aus CSS (schließen Sie einfach das Warn-Popup)
Das letzte Mal, als ich dies tun musste, habe ich
max-height
stattdessen eine animierbare Eigenschaft verwendet (obwohl es ein bisschen wie ein Hack war, hat es funktioniert), aber Vorsicht, es kann für komplexe Seiten oder Benutzer mit Low-End-Mobilgeräten sehr ruckelig sein Geräte.quelle
Sie können der Blockeigenschaft jetzt eine benutzerdefinierte Animation hinzufügen.
Demo
In dieser Demo wechselt das Untermenü von
display:none
zudisplay:block
und kann immer noch ausgeblendet werden.quelle
myfirst
seinshowNav
hier? Und was ist mit Firefox? Leider kann ich auf der von Ihnen erwähnten Demoseite nichts Ähnliches finden.Laut W3C Working Draft ist der 19. November 2013
display
keine animierbare Eigenschaft . Zum Glückvisibility
ist animierbar. Sie können den Übergang mit einem Übergang der Deckkraft ( JSFiddle ) verketten :HTML:
CSS:
JavaScript zum Testen:
Beachten Sie, dass der Link
visibility: hidden
anklickbar bleibt , wenn Sie ihn nur ohne Einstellung transparent machen .quelle
0
habe0s
. Anscheinend hat der Browser, den ich zum Testen verwendet habe, in der Vergangenheit einheitlose Nullzeiten unterstützt. Zeiten ohne Einheit sind jedoch nicht Teil der W3C-Kandidatenempfehlung vom 29. September 2016 .Bearbeiten: Anzeige keine wird in diesem Beispiel nicht angewendet.
Was oben passiert, ist, dass 99% der Animationsanzeige so eingestellt sind, dass sie blockiert, während die Deckkraft ausgeblendet wird. Im letzten Moment wird die Anzeigeeigenschaft auf none gesetzt.
Und das Wichtigste ist, das letzte Bild nach dem Ende der Animation im Animationsfüllmodus beizubehalten: vorwärts
Hier sind zwei Beispiele: https://jsfiddle.net/qwnz9tqg/3/
quelle
display: none
funktioniert dann nicht?display: none
, wird, nie wirklich implementiert. jsfiddle.net/3e6sduqhMein netter JavaScript-Trick besteht darin, das gesamte Szenario in zwei verschiedene Funktionen zu unterteilen !
Zur Vorbereitung wird eine globale Variable deklariert und ein Ereignishandler definiert:
Wenn ich dann ein Element verstecke, verwende ich so etwas:
Um das Element wieder zu sehen, mache ich so etwas:
Es funktioniert soweit!
quelle
Ich
position: fixed
bin heute darauf gestoßen , mit einem Modal, das ich wiederverwendete. Ich konnte es nicht behaltendisplay: none
und dann animieren, da es gerade in Erscheinung trat undz-index
(negative Werte usw.) auch seltsame Dinge tat.Ich habe auch ein
height: 0
to verwendetheight: 100%
, aber es hat nur funktioniert, als das Modal erschien. Dies ist das gleiche, als ob Sie verwendet habenleft: -100%
oder so.Dann fiel mir auf, dass es eine einfache Antwort gab. Et voila:
Erstens dein verstecktes Modal. Beachten Sie das
height
ist0
und überprüfen Sie dieheight
Deklaration in Übergängen ... es hat ein500ms
, das länger ist als meinopacity
Übergang . Denken Sie daran, dass dies Auswirkungen auf den ausgehenden Ausblendübergang hat: Zurücksetzen des Modals in seinen Standardzustand.Zweitens Ihr sichtbares Modal. Angenommen, Sie setzen ein
.modal-active
aufbody
. Jetztheight
ist das100%
, und mein Übergang hat sich auch geändert. Ich möchte dasheight
sofort geändert werden, und dasopacity
zu übernehmen300ms
.Das war's, es funktioniert wie ein Zauber.
quelle
Ausgehend von einigen dieser Antworten und einigen anderen Vorschlägen eignet sich das Folgende hervorragend für Hover-Menüs (ich verwende dies speziell für Bootstrap 3):
Sie können auch
height
anstelle von verwenden,max-height
wenn Sie beide Werte angeben, daheight:auto
dies mittransition
s nicht zulässig ist . Der Schwebewert vonmax-height
muss größer sein als derheight
des Menüs.quelle
Ich habe einen besseren Weg für dieses Problem gefunden. Sie können CSS-Animation verwenden und Ihren fantastischen Effekt für das Anzeigen von Elementen erzielen.
quelle
Ich bin mehrmals auf dieses Problem gestoßen und habe mich jetzt einfach für Folgendes entschieden:
Durch Hinzufügen der Klasse
block--invisible
können nicht alle Elemente angeklickt werden, aber alle dahinter stehenden Elemente werden aufgrundpointer-events:none
dessen von allen gängigen Browsern unterstützt (kein IE <11).quelle
pointer-events
Wechseln Sie
overflow:hidden
zuoverflow:visible
. Es funktioniert besser. Ich benutze so:visible
ist besser, weiloverflow:hidden
genau wie ein handelndisplay:none
.quelle
JavaScript ist nicht erforderlich, und es wird keine unglaublich große maximale Höhe benötigt. Legen Sie stattdessen
max-height
Ihre Textelemente fest und verwenden Sie eine relative Schriftarteinheit wierem
oderem
. Auf diese Weise können Sie eine maximale Höhe festlegen, die größer als Ihr Container ist, und gleichzeitig eine Verzögerung oder ein "Knallen" vermeiden, wenn das Menü geschlossen wird:HTML
CSS
Ein Beispiel finden Sie hier: http://codepen.io/mindfullsilence/pen/DtzjE
quelle
Nachdem die akzeptierte Antwort von Guillermo geschrieben wurde, hat die CSS-Übergangsspezifikation vom 03.04.2012 das Verhalten des Sichtbarkeitsübergangs geändert. Jetzt ist es möglich, dieses Problem auf kürzere Weise ohne Verwendung einer Übergangsverzögerung zu lösen :
Die für beide Übergänge angegebene Laufzeit sollte normalerweise identisch sein (obwohl eine etwas längere Sichtbarkeit kein Problem darstellt).
Eine laufende Version finden Sie in meinem Blogbeitrag CSS Transition Visibility .
Schreiben Sie den Titel der Frage "Übergänge auf dem Display: Eigenschaft" und als Antwort auf Kommentare von Rui Marques und Josh auf die akzeptierte Antwort:
Diese Lösung funktioniert in Fällen, in denen es irrelevant ist, ob die Anzeige- oder Sichtbarkeitseigenschaft verwendet wird (wie dies in dieser Frage wahrscheinlich der Fall war).
Das Element wird nicht vollständig entfernt
display:none
, sondern nur unsichtbar gemacht. Es bleibt jedoch im Dokumentfluss und beeinflusst die Position der folgenden Elemente.Übergänge, bei denen das Element ähnlich wie vollständig vollständig entfernt wird,
display:none
können mithilfe der Höhe (wie in anderen Antworten und Kommentaren angegeben), der maximalen Höhe oder des oberen oder unteren Randbereichs durchgeführt werden. Siehe auch Wie kann ich die Übergangshöhe: 0; zur Höhe: auto; mit CSS? und mein Blogbeitrag Problemumgehungen für CSS-Übergänge in den Eigenschaften Anzeige und Höhe .Antwort auf einen Kommentar von GeorgeMillo: Beide Eigenschaften und beide Übergänge werden benötigt: Die Opazitätseigenschaft wird verwendet, um eine Ein- und Ausblendanimation zu erstellen, und die Sichtbarkeitseigenschaft, um zu vermeiden, dass das Element immer noch auf Mausereignisse reagiert. Für die Deckkraft des visuellen Effekts und die Sichtbarkeit sind Übergänge erforderlich, um das Ausblenden zu verzögern, bis das Ausblenden abgeschlossen ist.
quelle
Ich fand schließlich eine Lösung für mich, durch die Kombination
opacity
mitposition absolute
(nicht Raum zu besetzen , wenn versteckt).quelle
Ich vermute, dass jeder, der gerade CSS-Übergänge startet, schnell feststellt, dass sie nicht funktionieren, wenn Sie gleichzeitig die Anzeigeeigenschaft (block / none) ändern. Eine Problemumgehung, die noch nicht erwähnt wurde, besteht darin, dass Sie
display:block/none
das Element weiterhin zum Ausblenden / Anzeigen verwenden können, seine Deckkraft jedoch auf 0 setzen, sodass es auch danndisplay:block
noch unsichtbar ist , wenn es angezeigt wird.Fügen Sie dann zum Einblenden eine weitere CSS-Klasse wie "Ein" hinzu, die die Deckkraft auf 1 setzt und den Übergang für die Deckkraft definiert. Wie Sie sich vielleicht vorgestellt haben, müssen Sie JavaScript verwenden, um diese "on" -Klasse zum Element hinzuzufügen, aber zumindest verwenden Sie immer noch CSS für den eigentlichen Übergang.
PS Wenn Sie sich in einer Situation befinden, in der Sie beides tun
display:block
und gleichzeitig die Klasse "on" hinzufügen müssen, verschieben Sie diese mithilfe von setTimeout. Andernfalls sieht der Browser nur beide Dinge gleichzeitig und deaktiviert den Übergang.quelle
display:none
.Es ist so einfach wie das folgende :)
Lass es verblassen und mach es dann
height 0;
. Stellen Sie außerdem sicher, dass Sie Forwards verwenden, damit es im Endzustand bleibt.quelle
Diese Lösung ist hervorragend kompatibel und ich habe sie noch nicht gesehen:
Erläuterung : Es wird der
visibility: hidden
Trick verwendet (der in einem Schritt mit "Anzeigen und Animieren" kompatibel ist), aber es wird die Kombination verwendetposition: absolute; z-index: -1; pointer-events: none;
, um sicherzustellen, dass der versteckte Container keinen Platz beansprucht und nicht auf Benutzerinteraktionen reagiert .quelle
position
Still wird das Element ruckeln lassen, nein?position: absolute
bedeutet, dass das Element keinen Platz einnimmt, wie in der Erklärung beschrieben. Wenn es zu wechseltposition: static
und angezeigt wird, nimmt es wie ein normales Element Platz ein, worum es bei dieser Frage geht. Ich schlage vor, Sie versuchen es!Sie können dies so erreichen, wie Sie es erwartet haben - mithilfe der Anzeige -, aber Sie müssen den Browser drosseln, damit es funktioniert, entweder mit Javascript oder wie andere einen ausgefallenen Trick mit einem Tag in einem anderen vorgeschlagen haben. Das innere Tag ist mir egal, da es CSS und Dimensionen weiter verkompliziert. Hier ist die Javascript-Lösung:
https://jsfiddle.net/b9chris/hweyecu4/17/
Beginnend mit einer Box wie:
Eine versteckte Kiste.
Wir werden einen Trick verwenden, der in einem verwandten Q / A gefunden wird, und OffsetHeight überprüfen, um den Browser sofort zu drosseln:
https://stackoverflow.com/a/16575811/176877
Zunächst eine Bibliothek, die den obigen Trick formalisiert:
Als nächstes werden wir es verwenden, um eine Box zu enthüllen und sie einzublenden:
Dadurch wird die Box ein- und ausgeblendet. Deaktiviert also
.noTrnsn()
Übergänge, dann entfernen wir diehidden
Klasse, diedisplay
vonnone
ihrer Standardeinstellung wechseltblock
. Wir setzen dann die Deckkraft auf 0, um uns auf das Einblenden vorzubereiten. Nachdem wir die Bühne eingerichtet haben, schalten wir die Übergänge mit wieder ein.resumeTrnsn()
. Beginnen Sie den Übergang, indem Sie die Deckkraft auf 1 setzen.Ohne die Bibliothek hätten sowohl die Änderung der Anzeige als auch die Änderung der Deckkraft zu unerwünschten Ergebnissen geführt. Wenn wir die Bibliotheksaufrufe einfach entfernen würden, würden wir überhaupt keine Übergänge erhalten.
Beachten Sie, dass die Anzeige am Ende der Ausblendanimation nicht erneut auf "Keine" gesetzt wird. Wir können aber schicker werden. Lassen Sie uns dies mit einem tun, der einblendet und von 0 an an Höhe zunimmt.
Schick!
https://jsfiddle.net/b9chris/hweyecu4/22/
Wir wechseln jetzt sowohl Höhe als auch Deckkraft. Beachten Sie, dass wir keine Höhe einstellen, was bedeutet, dass dies die Standardeinstellung ist
auto
. Herkömmlicherweise kann dies nicht geändert werden. Wenn Sie von Auto zu einem Pixelwert (wie 0) wechseln, erhalten Sie keinen Übergang. Wir werden das mit der Bibliothek und einer weiteren Bibliotheksmethode umgehen:Dies ist eine praktische Methode, mit der wir an der vorhandenen fx / animation-Warteschlange von jQuery teilnehmen können, ohne das Animationsframework zu benötigen, das jetzt in jQuery 3.x ausgeschlossen ist. Ich werde nicht erklären, wie jQuery funktioniert, aber es reicht zu sagen, dass die von jQuery bereitgestellten
.queue()
und.stop()
Installationen uns dabei helfen, zu verhindern, dass unsere Animationen aufeinander treten.Animieren wir den Slide-Down-Effekt.
Dieser Code beginnt mit der Überprüfung
#box
und ob er derzeit ausgeblendet ist, indem er seine Klasse überprüft. Mit demwait()
Bibliotheksaufruf wird jedoch mehr erreicht , indem diehidden
Klasse am Ende der Slideout- / Fade-Animation hinzugefügt wird, die Sie erwarten würden, wenn sie tatsächlich ausgeblendet ist - etwas, das das obige einfachere Beispiel nicht kann. Dies ermöglicht auch das wiederholte Ein- und Ausblenden des Elements, was im vorherigen Beispiel ein Fehler war, da die versteckte Klasse nie wiederhergestellt wurde.Sie können auch sehen, dass CSS- und Klassenänderungen aufgerufen werden,
.noTrnsn()
um im Allgemeinen die Bühne für Animationen festzulegen, einschließlich Messungen, z. B. Messen der endgültigen Höhe,#box
ohne dies dem Benutzer zu zeigen, bevor Sie aufrufen.resumeTrnsn()
, und Animieren von diesem vollständigen Satz Stufe zu seinem Ziel CSS-Werte.Alte Antwort
https://jsfiddle.net/b9chris/hweyecu4/1/
Sie können den Übergang per Mausklick mit:
Das CSS ist das, was Sie vermuten würden:
Der Schlüssel drosselt die Anzeigeeigenschaft. Wenn Sie die versteckte Klasse entfernen und dann 50 ms warten und dann den Übergang über die hinzugefügte Klasse starten, wird sie angezeigt und dann wie gewünscht erweitert, anstatt nur ohne Animation auf den Bildschirm zu blättern. Ähnliches geschieht in die andere Richtung, außer dass wir warten, bis die Animation beendet ist, bevor wir versteckt anwenden.
Hinweis: Ich missbrauche
.animate(maxWidth)
hier, umsetTimeout
Rennbedingungen zu vermeiden .setTimeout
Es ist schnell, versteckte Fehler einzuführen, wenn Sie oder jemand anderes Code aufnimmt, ohne es zu wissen..animate()
kann leicht mit getötet werden.stop()
. Ich benutze es nur, um eine Verzögerung von 50 ms oder 2000 ms in die Standard-FX-Warteschlange zu setzen, wo es von anderen Codierern, die darauf aufbauen, leicht zu finden / aufzulösen ist.quelle
Ich hatte ein ähnliches Problem, auf das ich keine Antwort finden konnte. Einige Google-Suchanfragen führten mich später hierher. Da ich nicht die einfache Antwort gefunden hatte, auf die ich gehofft hatte, stieß ich auf eine Lösung, die sowohl elegant als auch effektiv ist.
Es stellt sich heraus, dass die
visibility
CSS-Eigenschaft einen Wert hat,collapse
der im Allgemeinen für Tabellenelemente verwendet wird. Wenn es jedoch für andere Elemente verwendet wird, werden sie effektiv als ausgeblendet dargestellt , ähnlich wiedisplay: hidden
mit der zusätzlichen Fähigkeit, dass das Element keinen Platz einnimmt und Sie das betreffende Element dennoch animieren können.Unten finden Sie ein einfaches Beispiel dafür in Aktion.
quelle
Die einfachste universelle Lösung für das Problem lautet: Sie können es gerne
display:none
in Ihrem CSS angeben. Sie müssen es jedochblock
mithilfe von JavaScript in (oder was auch immer) ändern , und dann müssen Sie Ihrem betreffenden Element eine Klasse hinzufügen, die tatsächlich vorhanden ist führt den Übergang mit setTimeout () durch . Das ist alles.Dh:
Dies wurde in den neuesten vernünftigen Browsern getestet. Offensichtlich sollte es in Internet Explorer 9 oder früher nicht funktionieren.
quelle
Ich denke, SalmanPK hat die naheliegendste Antwort. Mit den folgenden CSS-Animationen wird ein Element ein- oder ausgeblendet. Die Anzeigeeigenschaft wird jedoch nicht reibungslos animiert, sondern nur die Deckkraft.
Wenn Sie das Element animieren möchten, das vom Anzeigeblock zum Anzeigeblock wechselt, kann ich nicht sehen, dass dies derzeit nur mit CSS möglich ist. Sie müssen die Höhe ermitteln und eine CSS-Animation verwenden, um die Höhe zu verringern. Dies ist mit CSS möglich, wie im folgenden Beispiel gezeigt. Es wäre jedoch schwierig, die genauen Höhenwerte zu kennen, die Sie zum Animieren eines Elements benötigen.
jsFiddle Beispiel
CSS
JavaScript
quelle
Sie können dies mit Übergangsereignissen tun, sodass Sie zwei CSS-Klassen für den Übergang erstellen, von denen eine die Animation und die andere den Status "Keine Anzeige" enthält. Und Sie wechseln sie, nachdem die Animation beendet ist? In meinem Fall kann ich die Divs erneut anzeigen, wenn ich eine Taste drücke, und beide Klassen entfernen.
Probieren Sie das folgende Snippet aus ...
quelle
Wenn Sie Ihre Klassen mit jQuery festlegen, funktioniert dies zu 100%:
Natürlich können Sie auch nur jQuery
.fadeIn()
und.fadeOut()
Funktionen verwenden, aber der Vorteil des Festlegens von Klassen besteht darin, dass Sie zu einem anderen Anzeigewert alsblock
(wie bei.fadeIn()
und.fadeOut()
) standardmäßig wechseln möchten .Hier wechsle ich zur Anzeige
flex
mit einem schönen Fade-Effekt.quelle
Anstatt zu verwenden, können
display
Sie das Element "außerhalb des Bildschirms" speichern, bis Sie es benötigen, und dann seine Position an der gewünschten Stelle festlegen und gleichzeitig transformieren. Dies wirft jedoch eine ganze Reihe anderer Designprobleme auf, sodass Ihr Kilometerstand variieren kann.Sie möchten es wahrscheinlich
display
sowieso nicht verwenden , da Sie möchten, dass der Inhalt für Bildschirmleser zugänglich ist, die größtenteils versuchen, die Regeln für die Sichtbarkeit einzuhalten - dh wenn er für das Auge nicht sichtbar sein sollte, ist dies der Fall wird dem Agenten nicht als Inhalt angezeigt.quelle
Sie können einfach die CSS- Sichtbarkeit verwenden : versteckt / sichtbar anstelle von Anzeige : keine / Block
quelle
Ich habe ein Open-Source-Skelettprojekt namens Toggle Display Animate gestartet .
Mit diesem Skeleton-Helfer können Sie das Ein- und Ausblenden von jQuery problemlos nachahmen, jedoch mit CSS 3-Übergangsanimationen.
Es werden Klassenumschaltungen verwendet, sodass Sie neben der Anzeige auch beliebige CSS-Methoden für Elemente verwenden können: none | block | table | inline usw. sowie andere alternative Verwendungszwecke, die sich ausdenken lassen.
Der Hauptentwurfszweck ist das Umschalten von Elementen und es wird ein Wiederherstellungszustand unterstützt, bei dem Sie durch Ausblenden des Objekts Ihren Keyframe in umgekehrter Reihenfolge ausführen oder eine alternative Animation zum Ausblenden des Elements abspielen können.
Der größte Teil des Markups für das Konzept, an dem ich arbeite, ist CSS, und es wird nur sehr wenig JavaScript verwendet.
Hier gibt es eine Demo: http://marcnewton.co.uk/projects/toggle-display-animate/
quelle