Erweiterbare Div mit Übergang in CSS

8

Ich habe oben auf meiner Seite ein div , das einen Kopftext enthält, der bei mouseenter (in der Höhe) erweitert werden sollte, um etwas kleineren Text zu enthüllen. Dann, bei mouseleave , sollte es sich dann zurückziehen. Das ist härter als es klingt ...

Die Lösung muss:

  1. Gehen Sie von einer Höhe, um nur die Kopfzeile anzupassen, auf eine Höhe, die dem gesamten Text entspricht.
  2. Übergang von einem zum anderen.
  3. Versuchen Sie, reines CSS zu verwenden.
  4. Lassen Sie die expandierende Animation anhalten, wenn die Maus verlässt, und umgekehrt (Standard in CSS, aber nicht in jQuery).

Ich habe es versucht:

  1. Verwenden Sie :hover in meinem Stylesheet, um von einem festgelegten Pixelwert in auto zu wechseln, wie in diese Frage (aber in meiner ist es reines CSS). Das hat nicht geändert.
  2. Verwenden einer festgelegten Höhe bei der Erweiterung, die bei verschiedenen Darstellungsfeldgrößen nicht funktioniert.
  3. Verwenden von max-height und Erweitern auf etwas, das größer ist als das tatsächlich erweiterte div , wie in diese Frage . Dies bedeutet, dass die Übergänge nicht richtig funktionieren und auf verschiedenen Geräten unterschiedlich aussehen.
  4. Verwenden Sie jQuery .animate() und verwenden Sie den Pixelwert von auto, um dann einen Übergang zu erstellen, wie in diese Frage , aber die Animation muss beendet werden, bevor mit dem nächsten begonnen wird, was bedeutet Eine Reihe von Animationen könnte lange nach der Maus des Benutzers weiterlaufen, wenn sie weit von der div entfernt ist.

Siehe alle vier obigen Beispiele hier .

Wie gesagt, reines CSS wäre ideal, aber wenn es nicht möglich ist, würde ich gut mit JavaScript umgehen (und ich bevorzuge jQuery).

Danke! :)

    
iO Ninja 13.02.2016, 21:09
quelle

3 Antworten

3

Ich kenne keine reine CSS-Lösung dafür - das Überführen von Werten in auto wurde von der Spezifikation nicht berücksichtigt. Ich denke, das war sogar eine explizite Entscheidung, die auf Implementierungsproblemen beruhen könnte.

Aber für eine "einfache" jQuery-Lösung würde ich den Absatzinhalt einfach in einen zusätzlichen Bereich einschließen, die Absatzhöhe auf 0 setzen und überblenden: versteckt, den Übergang für die Höhe an Ort und Stelle lassen - und dann jQuery lassen tue nur eine Sache, lies die Höhe des span-Elements, setze diese Höhe für den Absatz und setze sie dann wieder auf 0, um den Text wieder auszublenden.

%Vor%

%Vor%

Auf diese Weise macht CSS immer noch das "Heavy Lifting", wenn die Höhenänderung über transition gehandhabt wird (das könnte in Browsern optimiert werden), und jQuery / JavaScript wird nur verwendet, um es zu geben der kleine "Nudge" muss es wissen, was zu tun ist. (Ziemlich sicher, dass jQuery heute intern mit animate() dasselbe macht, wenn der Browser dies unterstützt - ein zusätzlicher Vorteil wäre, dass jQuery sich um eine Fallback - Implementierung kümmert, sollte ein wirklich alter Browser transition ; in nicht unterstützen Bei meiner Lösung würde sich die Höhe sofort ändern, ohne Übergang.)

Ссылка

Bitte beachten Sie, dass in diesem Beispiel die Methode für alle vier Elemente gleich ist und ich den Textinhalt nicht geändert habe; -)

    
CBroe 13.02.2016, 21:52
quelle
1

Versuchen Sie es mit css :hover

%Vor%     
guest271314 13.02.2016 21:19
quelle
1

A css Ansatz unter Verwendung von height , line-height , font-size , opacity

%Vor% %Vor%

jsfiddle Ссылка

    
guest271314 13.02.2016 22:15
quelle

Tags und Links