Wie kann ich Elemente ausblenden, ohne dass sie Platz auf der Seite beanspruchen?


228

Ich verwende visibility:hidden, um bestimmte Elemente auszublenden, aber sie belegen immer noch Platz auf der Seite, während sie ausgeblendet sind.

Wie kann ich sie visuell vollständig verschwinden lassen, als wären sie überhaupt nicht im DOM (aber ohne sie tatsächlich aus dem DOM zu entfernen)?


Diese Frage ist sehr tot, aber ich füge einen Kommentar hinzu, weil ich mich kürzlich in einer Situation befunden habe, die andere möglicherweise erleben. Ich musste ein Element ausblenden und es beibehalten lassenoffsetTop und display:nonesetzte es offsetTopauf 0. Meine Lösung bestand darin visibility: hidden, die Breite und Höhe auf 0 zu setzen. Nachdem ich das Element wieder sichtbar machen musste, entfernte ich die drei Attribute mit Javascript. Eine etwas hackige Lösung, aber sie funktioniert für so ziemlich alle Anwendungsfälle.
rappatic

Antworten:


299

Versuchen Sie, die Einstellung display:noneauszublenden und display:blockanzuzeigen.


Es ist nicht möglich, ein Element aus dem Dom zu entfernen. mit dieser Option auch. Lesen Sie die Frage
Pranay Rana

26
Nicht alle Elemente sollten vorhanden sein display: block, einige müssen auf gesetzt werden display: inline(z. B. <span>oder <a>oder <img>DOM-Elemente).
Mauro

2
@pranay die Frage sagt, sie zu verstecken, um sie nicht aus dem DOM zu entfernen.
Mauro

6
@pranay: Die Frage ist nicht sehr gut ausgedrückt, aber Huusom löst das Problem, das der Benutzer hat.
Claudio Redi

1
Eine Verbesserung: Erstellen Sie eine CSS-Klasse, die hiddenmit aufgerufen wird display: none. Fügen Sie die Klasse einem Element hinzu, um sie auszublenden, und entfernen Sie sie. Beim Entfernen wird die displayEigenschaft auf den Standardstandard zurückgesetzt.
Alejandro C De Baca

44

Verwenden Sie stattdessen Stil wie

<div style="display:none;"></div>

1
Leider funktioniert das bei mir nicht - mit Display: Keiner lässt noch ein Leerzeichen.
mbuc91

15

Die Verwendung display:noneist eine gute Option, um nur ein Element zu entfernen, ABER es wird auch für Bildschirmleser entfernt . Es gibt auch Diskussionen, ob es SEO beeinflusst. Es gibt einen guten, kurzen Artikel zu diesem Thema auf A List Apart

Wenn Sie wirklich nur ein Element ausblenden und nicht entfernen möchten , verwenden Sie besser:

div {
  position: absolute; 
  left: -999em;
}

So kann es auch von Screenreadern gelesen werden.

Der einzige Nachteil dieser Methode besteht darin, dass dieser DIV tatsächlich gerendert wird und die Leistung beeinträchtigen kann , insbesondere bei Mobiltelefonen.


2
Wenn Sie sich dafür entscheiden, etwas Absolutes zu positionieren, mit dem Sie in den meisten Fällen laufen können visibility: hidden;, nehmen wir an, Sie haben andere absolute Elemente, die keinen Konflikt für den Raum haben, sondern nur einen Konflikt von z-index. Nur um ein Element zu verstecken, mit dem ich gehen würdevisibility
Dejan.S

10

Schauen Sie, anstatt Verwendung zu visibility: hidden;verwenden display: none;. Die erste Option wird ausgeblendet, nimmt aber immer noch Platz ein, und die zweite Option wird ausgeblendet und nimmt keinen Platz ein.


6

Die Antwort auf diese Frage lautet "display: none" und "display: block". Dies ist jedoch nicht hilfreich für Personen, die versuchen, mithilfe von CSS-Übergängen Inhalte mithilfe der Sichtbarkeitseigenschaft anzuzeigen und auszublenden.

Das hat mich auch verrückt gemacht, weil die Verwendung von Display alle CSS-Übergänge beendet.

Eine Lösung besteht darin, dies der Klasse hinzuzufügen, die Sichtbarkeit verwendet:

overflow:hidden

Damit dies funktioniert, hängt es vom Layout ab, aber es sollte den leeren Inhalt innerhalb des Divs behalten, in dem es sich befindet.


3
Wenn Sie mit Sichtbarkeit spielen: versteckt und Sichtbarkeit: sichtbar und Ihre Elementposition festlegen: behoben, werden Sie dieses Problem nicht haben, es ist wie Magie
John Balvin Arias

6

Anzeige: Keine ist Lösung, das verbirgt Elemente vollständig mit seinem Raum.

Geschichte über display:noneundvisibility: hidden

visibility:hidden bedeutet, dass das Tag nicht sichtbar ist, aber auf der Seite Platz dafür zugewiesen ist.

display:nonebedeutet, Elemente mit seinem Raum vollständig zu verbergen. (obwohl Sie immer noch über das DOM damit interagieren können)


3

display:nonezu verstecken und display:blockzu zeigen.


1
Er bittet darum, es visuell zu entfernen, "als ob sie nicht im DOM wären". Es geht nicht darum, sie aus dem eigentlichen DOM zu entfernen.
Arve Systad

Die Frage besagt, dass sie nicht aus dem DOM entfernt werden sollen, nur um sie verschwinden zu lassen. as though they are not in the DOM at all (but without actually removing them from the DOM)
Mauro

@pranay: Stoppt visibility: hiddennur die Anzeige von Inhalten, verwendet jedoch weiterhin vertikalen / horizontalen Raum. Anzeige: Keine entfernt den vertikalen / horizontalen Raum für das Element.
Mauro

Nein, tut es nicht. Sichtbarkeit: versteckt; macht das Element unsichtbar, nimmt aber trotzdem Platz ein. Anzeige: keine; Das Dokument verhält sich so, als wäre es nie da.
Olly Hodgson

1
Löschen Sie diese Antwort dann.
BalusC

2

Hier ist eine andere Sichtweise, wie Sie sie nach der Anzeige zurücksetzen können: keine. Verwenden Sie nicht display: block / inline usw. Setzen Sie stattdessen (wenn Sie Javascript verwenden) die Anzeige der CSS-Eigenschaft auf '' (dh leer).


2

Das Umschalten ermöglicht displaykeine reibungslosen CSS-Übergänge. Schalten Sie stattdessen sowohl das visibilityals auch das um max-height.

visibility: hidden;
max-height: 0;

1
$('#abc').css({"display":"none"});

Dies verbirgt den Inhalt und lässt auch keinen leeren Raum.


1

Nach meinem Wissen ist dies auf vier Arten möglich

  1. HTML<button style="display:none;"></button>
  2. CSS #buttonId{ display:none; }
  3. jQuery $('#buttonId').prop('display':'none');& $("#buttonId").css('opacity', 0);

1

Anzeige: Keine ist das Beste, um Leerzeichen auf der Seite zu vermeiden


2
Scheint nur eine Wiederholung der anderen Antworten zu sein.
Pang

0

Verwenden !importantSie diese Option, wenn Sie gezwungen sind, vorhandene CSS-Stile zu überschreiben.

display: none !important;
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.