2015-06-08 4 views
6

Wir haben einige Felder, um einige Daten zum Hover anzuzeigen. Wenn wir also die Maus über ein Element bewegen, sollte es sich erweitern, vor andere Elemente treten und die versteckten Daten anzeigen.CSS: Verhindern, dass eine Eigenschaft Auswirkungen auf das Element bis zum Ende des Übergangs hat

Ich habe so etwas wie dies:

box:hover { 
    z-index: 50; 
} 

Aber es gibt ein Problem; Wenn wir die Maus auf einen anderen äußeren Leerraum bewegen, wird der z-index wieder auf den Wert zurückgesetzt, wie bei anderen auch. Es ist also sichtbar, dass das Element schweben in der unteren Ebene liegt.

Wie kann verhindert werden, dass eine Eigenschaft bis zum Ende des Übergangs angewendet wird?

Hier ist meine jsFiddle. Versuchen Sie, auf einem Element zu schweben, bewegen Sie die Maus aus dem Element heraus und das Hintergrundbild anderer Elemente wird vor dem Ende des Übergangs vor unserem Element mit dem Schweben liegen.

Update: Dies ist der Screenshot des Problems. Dies ist der Zeitpunkt, an dem wir uns von Elementen lösen. background-image eines anderen Elements kommen vor unserem schwebenden Element.

Our problem! Check the jsFiddle link above

+0

Es kann ein Artefakt von meinem Browser (Safari Mac), aber ich habe nicht das Problem, das Sie beschreiben. Mit Chrome bekomme ich jedoch einen roten Hintergrund, also vermute ich, dass das CSS wackelig ist. –

+0

@MAGNAWS Screenshot hinzugefügt, um die Situation besser zu beschreiben – mrReiha

+0

Das passiert nicht in meinen Browsern (Safari, Chrome oder Firefox auf Mac). Safari zeigt jedoch den Hintergrund des Hauptfensters als weiß an. Ich vermute, dass das CSS kaputt ist. Mit "gebrochen" meine ich nicht unbedingt "falsch". Es kann in einem undefinierten Bereich sein; wo verschiedene Browser anders reagieren. Was ich normalerweise in diesen Fällen tue, ist zu versuchen, in die einfachste mögliche Form umzuformen; manchmal gibt man dabei etwas Phantasie auf (Es ist ein schöner Effekt, BTW). –

Antwort

2

einen Übergang hinzufügen auch für z-index, aber nur eine Verzögerung einzufügen, wenn .box im Normalzustand ist.

Doing so die z-index wird istantly auf schweben ändern, während auf der gegenüberliegenden Aktion („unhover“) die z-index seinen Anfangswert nehmen, sondern erst nach 0.5 Sekunden (die Dauer der expandierenden Wirkung sind 0.4 Sekunden)

.box { 
    ... 
    z-index: 1; 
    -webkit-transition: z-index 0s .5s; 
     -moz-transition: z-index 0s .5s; 
      transition: z-index 0s .5s; 
} 

.box:hover { 
    -webkit-transition: z-index 0s 0s; 
     -moz-transition: z-index 0s 0s; 
      transition: z-index 0s 0s; 
    z-index: 50; 
} 

Beispiel: http://jsfiddle.net/yjg2oach/

+0

Ihre bearbeitete Geige (der zweite) funktioniert perfekt in Chrome, aber auf Firefox, schlägt es fehl :( – mrReiha

+0

@mrReiha das ist, weil ein anfänglicher Z-Index-Wert von .box fehlt (und abhängig von der Version von Firefox, ein '-moz-' Präfix kann auch notwendig sein) – fcalderan

+0

Wow Klingt erstaunlich. Ich wusste nicht, dass "Z-Index" animierbar ist. Vielen Dank. – mrReiha

1

einen Übergang Attribut auf Ihre .box Gruppe hinzufügen.

.box { 
    float: left; 
    position: relative; 
    width: 100px; 
    height: 100px; 
    margin: 10px; 
    margin-bottom: 35px; 
     transition: .4s; 
} 

Fixe fiddle

+0

Es funktioniert perfekt auf Chrom, aber auf Firefox, hat es immer noch ein Problem :( – mrReiha

Verwandte Themen