Come si crea un div nascosto che non crea un'interruzione di linea o spazio orizzontale?


354

Voglio avere una casella di controllo nascosta che non occupa spazio sullo schermo.

Se ho questo:

<div id="divCheckbox" style="visibility: hidden">

Non vedo la casella di controllo, ma crea comunque una nuova riga.

Se ho questo:

<div id="divCheckbox" style="visibility: hidden; display:inline;">

non crea più una nuova linea, ma occupa spazio orizzontale sullo schermo.

C'è un modo per avere un div nascosto che non occupa spazio (verticale o orizzontale?


C'è qualche utilità per un simile div?
Jonno_FTW il

6
@Jonno: è comunemente usato in AJAX. Supponi di avere un elenco di elementi con triangoli di apertura. Desideri che vengano visualizzati dettagli o una sottostruttura quando l'utente fa clic sul triangolo di apertura. Quindi quello che fai è mettere un <div id = "theID" style = "display: none;"> dove dovrebbero andare i dettagli. Quindi, quando l'utente fa clic sul triangolo, si sposta il triangolo in una posizione "a metà" (puntando a sud-est) e si lancia una richiesta AJAX per compilare <div>. Al termine della richiesta AJAX, si gira il triangolo verso sud e si rimuove il "display: none;" dallo stile di <div>. La libreria script.aculo.us fa molto.
Mike DeSimone,

Risposte:


717

Uso display:none;

<div id="divCheckbox" style="display: none;">
  • visibility: hidden nasconde l'elemento, ma occupa ancora spazio nel layout.

  • display: none rimuove completamente l'elemento dal documento, non occupa spazio.


42
per mostrare di nuovo il div (nel caso in cui qualcuno avesse bisogno come me) -<div id="divCheckbox" style="display: inline-block;">
anujin

14
@anujin: Perché inline-block? Il displayvalore predefinito per un div è block!
MMM,

C'è un modo per fare il contrario? Per cambiare un div da display: nonea display: inline-blocko equivalente senza che il div ora visualizzato occupi spazio e muova i miei altri elementi DOM?
bpromas,

1
potrebbe valere la pena aggiornare la risposta per includere l'attributo HTML globale nascosto che è disponibile da HTML5.1, che è sostanzialmente lo stesso di dire display: noneanche se direttamente da HTML. Tuttavia, qualsiasi utilizzo della displayproprietà sovrascrive il comportamento dell'attributo hiddenglobale.
Marius Mucenicu,

54

Dal rilascio di HTML5 ora si può semplicemente fare:

<div hidden>This div is hidden</div>

Nota: questo non è supportato da alcuni vecchi browser, in particolare IE <11.

Documentazione sugli attributi nascosti ( MDN , W3C )


1
Questo è più semanticamente corretto che nascondersi con i CSS, è meglio per l'accessibilità ed è supportato da tutti i principali browser. Dovrebbe essere la risposta accettata nel 2020.
Robin Métral,

29

Usa style="display: none;". Inoltre, probabilmente non è necessario disporre del DIV, è sufficiente impostare lo stile display: nonesu nella casella di controllo.


Devo nascondermi msg di avviso sul caricamento della pagina e volevo mostrarlo di nuovo facendo clic sul pulsante. Ho provato visibility: hiddenma quello stava mostrando spazio vuoto. style="display: none;"ha funzionato come un piccolo fascino :)
sohaiby,

8

Oltre alla risposta di CMS, potresti prendere in considerazione l'idea di inserire lo stile in un foglio di stile esterno e assegnare lo stile all'ID, in questo modo:

#divCheckbox {
display: none;
}

+1, questo è davvero un buon suggerimento, ma come mostrare una sola casella di controllo senza influire sulla visibilità di tutte le altre caselle di controllo?
Owais Qureshi,

1
@dotNetSoldier Vecchia domanda ma qui dovrebbe esserci una risposta. Hai una classe CSS chiamata invis e la aggiungi / rimuovi dalla casella di controllo o div per ID usando JS.
DanielST

8

Dal momento che dovresti concentrarti sull'usabilità e sulle generalità nei CSS, piuttosto che usare un id per puntare a un elemento di layout specifico (che si traduce in file css enormi o multipli) probabilmente dovresti invece usare una vera classe nel tuo file .css collegato:

.hidden {
visibility: hidden;
display: none;
}

o per il minimalista:

.hidden {
display: none;
}

Ora puoi semplicemente applicarlo tramite:

<div class="hidden"> content </div>

il codice sembra molto più pulito in questo modo! Preferisco avere una lezione sullo stile in linea
Harry Cho

5

Prendi in considerazione l'idea <span>di isolare piccoli segmenti di markup da applicare in stile senza scomporre il layout. Ciò sembrerebbe più idiomatico del tentativo di forzare a <div>non mostrarsi - se in effetti la casella stessa non può essere disegnata nel modo desiderato.


4

Mostra / nascondi con il clic del mouse:

<script language="javascript">

    function toggle() {

        var ele = document.getElementById("toggleText");
        var text = document.getElementById("displayText");

        if (ele.style.display == "block") {

            ele.style.display = "none";
            text.innerHTML = "show";
        }
        else {

            ele.style.display = "block";
            text.innerHTML = "hide";
        }
    }
</script>

<a id="displayText" href="javascript:toggle();">show</a> <== click Here

<div id="toggleText" style="display: none"><h1>peek-a-boo</h1></div>

Fonte: qui


4

Per impedire alla casella di controllo di occupare spazio senza rimuoverla dal DOM, utilizzare hidden.

<div hidden id="divCheckbox">

Per impedire alla casella di controllo di occupare spazio e anche di rimuoverla dal DOM, utilizzare display: none.

<div id="divCheckbox" style="display:none">

3

Per nascondere visivamente l'elemento , ma tenerlo nell'html, è possibile utilizzare:

<div style='visibility:hidden; overflow:hidden; height:0; width:0;'>
  [content]
</div>

o

<div style='visibility:hidden; overflow:hidden; position:absolute;'>
  [content]
</div>

Cosa potrebbe andare storto display:none? Rimuove completamente l'elemento dall'html, quindi alcune funzionalità potrebbero essere interrotte se devono accedere a qualcosa nell'elemento nascosto.


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.