Come nascondere gli elementi senza che abbiano spazio nella pagina?


228

Sto usando visibility:hiddenper nascondere alcuni elementi, ma occupano ancora spazio sulla pagina mentre sono nascosti.

Come posso farli scomparire totalmente visivamente, come se non fossero affatto nel DOM (ma senza effettivamente rimuoverli dal DOM)?


Questa domanda è molto morta, ma sto aggiungendo un commento perché di recente mi sono trovato in una situazione che altri potrebbero sperimentare. Avevo bisogno di nascondere un elemento e di mantenerlooffsetTop , e display:noneavrei impostato lo offsetTop0. La mia soluzione qui era di usare visibility: hiddenquindi impostare la larghezza e l'altezza su 0. Una volta che avevo bisogno di rendere di nuovo visibile l'elemento, ho rimosso i tre attributi usando Javascript. Una soluzione un po 'confusa, ma funziona bene per quasi tutti i casi d'uso.
rappatico

Risposte:


302

Prova a impostare display:noneper nascondere e impostare display:blockper mostrare.


non è possibile rimuovere l'elemento da dom man. usando anche questa opzione. leggi la domanda
Pranay Rana,

26
non tutti gli elementi dovrebbero essere display: block, alcuni dovranno essere impostati su display: inline(come <span>o <a>o <img>elementi DOM).
Mauro,

2
@pranay la domanda dice di nasconderli per non rimuoverli dal DOM.
Mauro,

6
@pranay: la domanda non è molto ben espressa, ma Huusom sta risolvendo il problema che sta riscontrando l'utente.
Claudio Redi,

1
Un miglioramento: crea una classe CSS chiamata hiddencon display: none. Aggiungi la classe a un elemento per nasconderlo, rimuovilo mostra. Quando lo si rimuove, la displayproprietà viene ripristinata sull'elemento predefinito.
Alejandro C De Baca,

44

usa lo stile invece come

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

1
Purtroppo questo non funziona per me - usando display: nessuno lascia ancora uno spazio vuoto.
mbuc91,

15

Utilizzare display:noneè una buona opzione solo per rimuovere un elemento MA verrà rimosso anche per i lettori di schermo . Ci sono anche discussioni se influisce sul SEO. C'è un buon breve articolo su questo argomento in A List Apart

Se vuoi semplicemente nascondere e non rimuovere un elemento, usa meglio:

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

In questo modo può essere letto anche dagli screen reader.

L'unico svantaggio di questo metodo è che questo DIV è effettivamente reso e potrebbe influire sulle prestazioni , specialmente sui telefoni cellulari.


2
se scegli di posizionare qualcosa di assoluto che puoi eseguire nella maggior parte dei casi visibility: hidden;, supponiamo che tu abbia altri elementi assoluti di cui non avranno un conflitto per lo spazio, ma solo un conflitto z-index. Solo per nascondere un elemento con cui vorrei andarevisibility
Dejan.S

10

Guarda, invece di usare visibility: hidden;use display: none;. La prima opzione si nasconde ma occupa ancora spazio e la seconda opzione si nasconde e non occupa spazio.


6

La risposta a questa domanda sta dicendo di usare display: none e display: block, ma questo non aiuta per chi sta cercando di usare le transizioni css per mostrare e nascondere il contenuto usando la proprietà di visibilità.

Anche questo mi ha fatto impazzire, perché l'uso del display uccide tutte le transizioni CSS.

Una soluzione è aggiungere questo alla classe che utilizza la visibilità:

overflow:hidden

Perché ciò funzioni dipende dal layout, ma dovrebbe mantenere il contenuto vuoto all'interno del div in cui risiede.


3
Se giochi con la visibilità: nascosto e visibilità: visibile e imposta la posizione del tuo elemento: risolto non avrai quel problema, è come per magia
John Balvin Arias,

6

display: nessuna è soluzione, nasconde completamente gli elementi con il suo spazio.

Storia di display:noneevisibility: hidden

visibility:hidden significa che il tag non è visibile, ma lo spazio è allocato per esso sulla pagina.

display:nonesignifica che nasconde completamente gli elementi con il suo spazio. (anche se puoi ancora interagire con esso tramite il DOM)


3

display:noneper nascondere e impostare display:blockper mostrare.


1
Chiede di rimuoverlo visivamente, "come se non fossero nel DOM". Non si tratta di rimuoverli dal DOM effettivo.
Arve Systad,

domanda afferma di non rimuoverli dal DOM solo per farli scomparire. as though they are not in the DOM at all (but without actually removing them from the DOM)
Mauro,

@pranay: visibility: hiddeninterrompe solo la visualizzazione del contenuto ma utilizza ancora lo spazio verticale / orizzontale, display: none rimuove lo spazio verticale / orizzontale per l'elemento.
Mauro,

No non lo fa. visibilità: nascosta; rende l'elemento invisibile, ma occupa ancora spazio. display: nessuno; fa in modo che il documento si comporti come se non ci fosse mai stato.
Olly Hodgson,

1
Elimina quindi questa risposta.
BalusC,

3

La commutazione displaynon consente transizioni CSS fluide. Invece attiva sia il visibilityche il max-height.

visibility: hidden;
max-height: 0;

Questo è utile quando lavori con le animazioni. Perché stiamo nascondendo l'elemento al di fuori dell'area visibile usando qualcosa di simile transform: translateX(-100%). Non vogliamodisplay: none
zhuhang.jasper

2

ecco una versione diversa di rimetterli dopo la visualizzazione: nessuno. non usare display: block / inline ecc. Invece (se si utilizza javascript) impostare la visualizzazione della proprietà css su '' (cioè vuoto)


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

questo nasconde il contenuto e inoltre non lascia spazio vuoto.


1

sopra la mia conoscenza è possibile in 4 modi

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

1

display: none è la cosa migliore per evitare lo spazio bianco nella pagina


2
Sembra essere solo una ripetizione delle altre risposte.
Pang

0

Utilizzare !importantse si è costretti a sostituire gli stili CSS esistenti.

display: none !important;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.