jQuery-Element ausblenden und dabei den Platz im Seitenlayout beibehalten


169

Gibt es in jQuery eine Möglichkeit, ein Element auszublenden, das DOM jedoch nicht zu ändern, wenn es ausgeblendet ist? Ich verstecke ein bestimmtes Element, aber wenn es ausgeblendet ist, bewegen sich die Elemente darunter nach oben. Ich möchte nicht, dass das passiert. Ich möchte, dass der Raum gleich bleibt, aber das Element nach Belieben angezeigt / ausgeblendet wird.

Kann ich das tun?


Wie wäre es mit einer Breite von Null?
Mrtsherman

8
@mrtsherman: Von einer Breite von Null wird abgeraten: Viele Screenreader (wie sie von blinden oder sehbehinderten Benutzern verwendet werden) lesen weiterhin Inhalte aus, die auf diese Weise "verborgen" sind, was sie möglicherweise verwirrt, da der Inhalt vermutlich nicht vorhanden ist. Es soll zu diesem Zeitpunkt nicht verfügbar sein. Verwenden der CSS-Sichtbarkeit: Versteckt ist der Weg hierher.
BrendanMcK

Sie können die Höhe dynamisch vor dem Ein- und Ausblenden Ihrer Elemente speichern => siehe unten (ich verwende sie in einer Produktschleife.) $ ('. Or-woo-bt'). Parent (). Parent (). Parent () ) .hover (function () {// Platz sparen; var rightHeight = $ (this) .height (); $ (this) .css ('height', rightHeight); // Hide; $ (this) .parent ( ) .parent (). find ('a span.family-price'). fadeOut ();}, function () {// Show; $ (this) .parent (). parent (). find ('a span .family-price '). fadeIn (' slow ');});
Olivier

Antworten:


296

hide()Verwenden Sie stattdessen :

css('visibility','hidden')

hide()Legt den displayStil auf fest none, wodurch das Element vollständig aus dem Dokumentfluss entfernt wird und kein Speicherplatz belegt wird.

visibility:hidden hält den Raum wie er ist.


82
css('visibility','visible')
Dr.Molle

1
odercss('visibility', '')
Anthony McGrath

40

Versuchen Sie , die visibilityzu hidden:

$("#id").css("visibility", "hidden");

19

display: none;nimmt es aus dem Inhaltsfluss heraus, sodass Sie sehen, wie sich Ihre anderen Inhalte in den leeren Bereich bewegen, der zurückgelassen wird. ( display: block;Bringt es zurück in den Fluss und schiebt alles aus dem Weg.)

visibility: hidden;hält es innerhalb des Inhaltsflusses und nimmt Platz ein, macht es aber einfach unsichtbar. ( visibility: visible;wird es wieder offenbaren.)

Sie möchten verwenden, visibilitywenn Ihr Inhaltsfluss unverändert bleiben soll.



7

Ich habe es vorher benutzt, opacity: 0bevor ich den visibility: hiddenTrick gesehen habe.

In vielen Fällen opacity: 0ist dies jedoch problematisch, da Sie damit mit dem Element interagieren können , obwohl Sie es nicht sehen können! (Wie von DeadPassive hervorgehoben .)

Normalerweise ist das nicht das, was du willst. Aber vielleicht gelegentlich?


1
Sie können nicht mit einem versteckten Element interagieren, während Sie mit einem Element mit einer Deckkraft von 0 arbeiten können.
DeadPassive

@feskr Wenn Sie sich eine Situation vorstellen können, in der dies vorteilhaft wäre, teilen Sie sie bitte mit!
Joeytwiddle

@joeytwiddle Ich bin auf deine Antwort gestoßen. Ich musste die Interaktion mit einem Element in einem bestimmten Zustand verhindern und gleichzeitig den Platz erhalten. Ich war mir der Tatsache bewusst, dass Sichtbarkeit: versteckt Platz sparen würde, wusste aber nicht, dass dies die Interaktion verhindern würde.
Feskr
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.