2016-05-23 12 views
1

Einstellung mag ich das Menü in der gleichen Dauer schließen es dauert es zu öffnen. Aus irgendeinem Grund gibt es eine Verzögerung vor dem Schließen, zusammen mit etwas mehr Platz, ich habe keine Ahnung, woher es kommt. HierUnerwünschte CSS Verzögerung beim Übergang Dauer

ist die jsfiddle: https://jsfiddle.net/m9pd8bjh/7/

Hier ist die CSS-Code, falls Sie etwas falsch sehen sofort:

.hide { 
    visibility: hidden; 
    overflow: hidden; 
    max-height: 0; 
} 

input[type=checkbox]:checked~.toggleable { 
    visibility: visible; 
    overflow: visible; 
    max-height: 1000px; 
} 

.toggleable { 
    transition: visibility 5s ease-in-out, overflow 2.5s ease-in-out, max-height 2.5s ease-in-out; 
} 

Ich verwende eine Checkbox-Label-Kombination das Öffnen und Schließen des auszulösen Speisekarte.

+0

"max-height 2.5s Mühelosigkeit-in-out" - entfernen das 's' nach 2.5 hier – Sampada

+0

@Sampada tut nichts für mich. Macht die ganze Zeile ungültig. Was ist der Zweck, dies zu tun? – yaharga

+1

, das reduziert den zusätzlichen Speicherplatz, den Sie am Ende des ersten Klick auf Menü haben. Außerdem ist Überlauf keine animierbare CSS-Eigenschaft. Ref this - http://oli.jp/2010/css-animatable-properties/ – Sampada

Antwort

4

Das erste, was Sie verstehen müssen, ist, dass die visibility Eigenschaft in CSS kann nicht animiert werden. Dies liegt daran, dass es nur zwei Zustände hat (entweder sichtbar oder versteckt, nichts dazwischen, um die Animation zu erleichtern).

Wenn Sie einen Fade-In-Effekt erstellen möchten, können Sie opacity:0; zu opacity:1; verwenden und stattdessen einen Übergang angeben.

Die nächste Sache zu beachten ist, dass Ihre Animationszeit sehr lang ist, und wenn Sie eine max-width animieren, müssen Sie die Animationszeit verkürzen, um anzupassen.

Siehe Geige: https://jsfiddle.net/m9pd8bjh/12/

und CSS:

.toggleable { 
    transition: max-height 0.25s ease-in-out; 
} 

Wenn Sie speziell möchten, dass lange Animation Zeitraum, dann werden Sie etwas anderes als eine max-height-Lösung verwenden.

Dies würde dann zu einem neuen Weg zu nähern, wie Sie JavaScript, jQuery oder eine andere solche Framework verwenden müssten.

Für die Zukunft, hier eine Geige ist jQuery das gleiche zu tun mit: https://jsfiddle.net/m9pd8bjh/15/

Und hier ist der jQuery-Code:

$('.toggler').click(function(){ 
    $('.hide').slideToggle(); 
}); 
+0

Ich habe 5s zu Testzwecken verwendet (ich habe eine kleine Zahl eingestellt, damit die Benutzer die nahtlose Animation genießen können, ohne warten zu müssen), so dass ich es langsam sehen könnte. Ich danke Ihnen für Ihre Erklärung. Also, ich nehme an, dass CSS-Eigenschaften ohne numerische Werte nicht umgestellt werden können? – yaharga

+1

Jederzeit :) Ja, das ist eine große Faustregel zu verwenden.CSS-Übergänge sind nur für Dinge nützlich, die numerisch gemessen werden können. I.E. Es kann eine hexadezimale Codefarbe verwendet werden (von # 000000 zu # 8fbce3), da sie immer noch in einem hexadezimalen numerischen System gemessen werden kann. – Frits

+0

Tatsächlich wurde mir klar, warum es gelöst wurde, als du das Spiel gemacht hast. Die maximale Höhe war 1000, sehr langsam von 1000 auf 0, während beim Öffnen schnell alles angezeigt wurde, da die Elemente bei ~ 50px auftauchen. Wenn Sie es auf 100px einstellen, wurde es viel schneller geöffnet. Vielen Dank! – yaharga

2

füge ich einen weiteren Übergang, wenn Sie das Menü zu schließen, und ich nahm die anfängliche Marge des ul Element. Ist das für dich ok?

CSS-Code geändert

.hide { 
    visibility: hidden; 
    overflow: hidden; 
    max-height: 0; 
    transition: visibility 0.5s ease-in-out, overflow 0.5s ease-in-out, max-height 0.5s ease-in-out; 
} 
#menu-main { margin: 0; padding: 10px 40px } 

input[type=checkbox]:checked ~ .toggleable { 
    visibility: visible; 
    overflow: visible; 
    max-height: 1000px; 
    transition: visibility 2.5s ease-in-out, overflow 2.5s ease-in-out, max-height 2.5s ease-in-out; 
} 

See this fiddle

+0

Es gibt immer noch ein bisschen Verzögerung, wenn es schließt. – yaharga