C'è un contrario da mostrare: nessuno?


197

L'opposto di visibility: hiddenè visibility: visible. Allo stesso modo, c'è qualche contrario per display: none?

Molte persone si confondono nel capire come mostrare un elemento quando ha display: none, dal momento che non è chiaro come usare la visibilityproprietà.

Potrei semplicemente usare visibility: hiddeninvece di display: none, ma non dà lo stesso effetto, quindi non ci andrò.


35
Non sono sicuro del motivo per cui si ottengono voti negativi e richieste chiuse. È in argomento (al momento ci sono 143.368 domande CSS su Stack Overflow), è un problema del mondo reale ed è una buona domanda per aiutare le persone ad imparare correttamente la lingua.
Paul D. Waite,

4
@Paul Forse la gente non si è accorta che si trattava di una risposta autonoma e pensava che fosse uno sforzo di ricerca basso (perché tutto lo sforzo di ricerca è nella risposta)
Richard Tingle,

11
Perché preoccuparsi di fare una domanda se la risposta è copiare / incollare una tabella da w3schools.com/cssref/pr_class_display.asp ?
Bill the Lizard,

1
@RichardTingle: ah, buon punto. @MohammadAreebSiddiq: aw, non pensavo che la tua risposta dovesse essere cancellata. Basta rimuovere il grande elenco di tutti i possibili displayvalori sarebbe andato bene. (E questa è solo la mia opinione ovviamente: forse alla gente piaceva davvero che l'elenco fosse lì.)
Paul D. Waite,

avresti davvero dovuto fare della risposta di Ilya Streltsyn quella accettata. Ilya fornisce una "versione" del display: nessuna di quelle che hanno un contrario, che risolve il problema pratico alla base della tua domanda, mentre la risposta che hai scelto di accettare, in sostanza, dice semplicemente "no". Il che è vero, ma molto molto molto meno utile. Questo è per programmatori, non per linguisti.
Mathhead include

Risposte:


178

display: nonenon ha un contrario letterale come visibility:hiddenfa.

La visibilityproprietà decide se un elemento è visibile o meno. Ha quindi due stati ( visiblee hidden), che sono opposti l'uno all'altro.

La displayproprietà, tuttavia, decide quali regole di layout seguiranno gli elementi. Ci sono diversi tipi di regole per come gli elementi imporranno se stessi in CSS, quindi ci sono diversi valori ( block, inline, inline-blockecc - vedere la documentazione per questi valori qui ).

display:none rimuove completamente un elemento dal layout di pagina, come se non fosse presente.

Tutti gli altri valori per fanno displaysì che l'elemento faccia parte della pagina, quindi in un certo senso sono tutti opposti display:none.

Ma non c'è un valore che sia il contrario diretto di display:none- proprio come non esiste uno stile di capelli che sia l'opposto di "calvo".


2
Ho notato che hai menzionato display: initialnell'auto-risposta cancellata - per i browser che implementano CSS2.1 è sinonimo di display: inline. Non ripristina displayle impostazioni predefinite del browser per un determinato elemento - non è questo il significato di "valore iniziale".
BoltClock

27
il mio voto per l'esempio "calvo" :) Esempio molto facile da capire!
Jesper Rønn-Jensen,

2
Tutta la lettura sto pensando a me stesso "ottimo esempio, sì, sì, sono tutti opposti a display:none" poi leggi "proprio come non c'è uno stile di capelli che sia l'opposto di calvo " Wow più 1, ben messo.
Chef_Code

2
Qualsiasi acconciatura è l'opposto di calvo.
AdjunctProfessorFalcon,

@AdjunctProfessorFalcon: beh, un po '. Direi che una testa rasata al numero uno è molto meno opposta alla calva di una triglia.
Paul D. Waite,

84

Un vero contrario display: nonenon esiste (ancora).

Ma display: unsetè molto vicino e funziona nella maggior parte dei casi.

Da MDN (Mozilla Developer Network):

La parola chiave CSS non impostata è la combinazione delle parole chiave iniziali ed ereditate. Come queste altre due parole chiave a livello CSS, può essere applicata a qualsiasi proprietà CSS, inclusa la stenografia CSS all. Questa parola chiave reimposta la proprietà al suo valore ereditato se eredita dal suo genitore o al suo valore iniziale in caso contrario. In altre parole, si comporta come la parola chiave eredita nel primo caso e come la parola chiave iniziale nel secondo caso.

(fonte: https://developer.mozilla.org/docs/Web/CSS/unset )

Si noti inoltre che display: revertè attualmente in fase di sviluppo. Vedi MDN per i dettagli.


Che dire display: initial?
Flimm,

31

Quando si modifica l'elemento displayin Javascript, in molti casi un'opzione adatta per "annullare" il risultato element.style.display = "none"è element.style.display = "". Ciò rimuove la displaydichiarazione dall'attributo style, ripristinando il valore effettivo della displayproprietà sul valore impostato nel foglio di stile per il documento (per impostazione predefinita del browser se non ridefinito altrove). Ma l'approccio più affidabile è quello di avere una classe come CSS

.invisible { display: none; }

e aggiungendo / rimuovendo questo nome di classe a / da element.className.


2
Se vuoi eseguire l'override .element { display: none }(definito ad esempio nella libreria CSS) con .element { display: '' !important }esso non funzionerà. Devi usare.element { display: unset !important }
tanguy_k il

2
Ho parlato di "annullamento" display:nonesolo in JavaScript. Naturalmente, la stringa vuota non funzionerà nei CSS, poiché è un valore non valido. Hovewer, display: unsetsuggerisci di non ripristinare, ad esempio, il valore predefinito display:blockper a <div>o il valore predefinito display:table-rowper a <tr>, trasforma effettivamente tutto in display:inline(proprio come display:initial). Per ripristinare il valore predefinito del browser per l'elemento, esiste display:revert, ma non è ben supportato ( caniuse.com/#feat=css-revert-value ).
Ilya Streltsyn,

Questa dovrebbe essere la risposta accettata. La risposta accettata ha un buon confronto con "opposto di calvo", ma non fa nulla per aiutare il povero programmatore a dover affrontare l'implementazione di "rendere calvo" - "ora, rimetti i capelli". Questa risposta ti spiega come affrontare questo problema pratico. Element.style.display = '' è soggetto a errori, perché i "vecchi capelli" potrebbero non essere la visualizzazione predefinita, ma "blocco" o "cella tabella" o altro. La rimozione della classe ".invisible", come qui, è l'unica implementazione senza errori di "rimetti i capelli ora", per quanto posso vedere. Quindi, fallo in questo modo, sempre
mathheadinclouds il

6

Puoi usare

display: normal;

Funziona normalmente .... È un piccolo hacking in CSS;)


2
Perché questo viene ridimensionato? È un brutto modo di farlo o? Funziona bene per i tablerows, ma dovrei usare qualcos'altro?
Benjamin Karlog,

4
Il valore "normale" non è un valore valido per la displayproprietà, quindi viene semplicemente ignorato e funziona in modo efficace come element.style.display = ''un'assegnazione (vedere la mia risposta sopra).
Ilya Streltsyn,

27
quindi in altre parole avresti potuto usare display: chunk norris;lo stesso effetto, con un po 'più di calcio.
Kevin B,

1
Se vuoi eseguire l'override .element { display: none }(definito ad esempio nella libreria CSS) con .element { display: normal !important }esso non funzionerà. Devi usare.element { display: unset !important }
tanguy_k il

4

Uso display:block; Funziona per me


Ciò è utile solo per gli elementi che si desidera visualizzare come block, non è ciò che si desidera in genere per un inlineelemento come <span>ad esempio.
Flimm,

3

Come spiega Paul, non c'è letteralmente l'opposto di display: nessuno in HTML poiché ogni elemento ha un display predefinito diverso e puoi anche cambiare il display con uno stile di classe o inline ecc.

Tuttavia, se usi qualcosa come jQuery, le loro funzioni show e hide si comportano come se non ci fosse un contrario di display none. Quando si nasconde, quindi mostra di nuovo un elemento, verrà visualizzato esattamente nello stesso modo in cui era prima di essere nascosto. Lo fanno memorizzando il vecchio valore della proprietà display sul nascondersi dell'elemento in modo che quando lo mostri di nuovo verrà visualizzato nello stesso modo in cui lo hai nascosto prima di nasconderlo. https://github.com/jquery/jquery/blob/740e190223d19a114d5373758127285d14d6b71e/src/css.js#L180

Ciò significa che se si imposta un div, ad esempio, per visualizzare inline, o inline-block e nasconderlo e quindi mostrarlo di nuovo, verrà nuovamente mostrato come display inline o inline-block come era prima

<div style="display:inline" >hello</div>
<div style="display:inline-block">hello2</div>
<div style="display:table-cell" >hello3</div>

script:

  $('a').click(function(){
        $('div').toggle();
    });

Si noti che la proprietà di visualizzazione del div rimarrà costante anche dopo che è stata nascosta (display: nessuna) e mostrata di nuovo.


1
"display: table-cell" era quello di cui avevo bisogno. Non è stato menzionato su nessun'altra risposta.
bendecko,

1

Nel caso di un foglio di stile intuitivo, utilizzo quanto segue:

/* screen style */
.print_only { display: none; }

/* print stylesheet */
div.print_only { display: block; }
span.print_only { display: inline; }
.no_print { display: none; }

L'ho usato quando avevo bisogno di stampare un modulo contenente valori e i campi di input erano difficili da stampare. Quindi ho aggiunto i valori racchiusi in un tag span.print_only (div.print_only era usato altrove) e quindi ho applicato la classe .no_print ai campi di input. Quindi sullo schermo vedresti i campi di input e quando vengono stampati, solo i valori. Se vuoi essere sofisticato, puoi usare JS per aggiornare i valori nei tag span quando i campi sono stati aggiornati, ma nel mio caso non era necessario. Forse non è la soluzione più elegante ma ha funzionato per me!


1

Puoi usare display: block

Esempio :

<!DOCTYPE html>
<html>
<body>

<p id="demo">Lorem Ipsum</p>

<button type="button" 
onclick="document.getElementById('demo').style.display='none'">Click Me!</button>
<button type="button" 
onclick="document.getElementById('demo').style.display='block'">Click Me!</button>

</body>
</html> 

0

Mi sono imbattuto in questa sfida durante la creazione di un'app in cui volevo un tavolo nascosto per alcuni utenti ma non per altri.

Inizialmente l'ho impostato come display: none ma poi display: inline-block per quegli utenti che volevo vederlo ma ho riscontrato i problemi di formattazione che potresti aspettarti (colonne consolidate o generalmente disordinate).

Il modo in cui ho lavorato è stato quello di mostrare prima la tabella e poi fare "display: none" per quegli utenti che non volevo vederlo. In questo modo, è stato formattato normalmente ma poi è scomparso secondo necessità.

Un po 'di soluzione laterale ma potrebbe aiutare qualcuno!


0

l'opposto di "none" è "flex" mentre si lavora con reattivo nativo.


-2

visibilità: nascosto nasconderà l'elemento ma l'elemento è loro con DOM. E in caso di visualizzazione: nessuna rimuoverà l'elemento dal DOM.

Quindi hai la possibilità di nascondere o mostrare l'elemento. Ma una volta eliminato (intendo visualizzarne nessuno) non ha più un valore opposto. display ha diversi valori come display: block, display: inline, display: inline-block e molti altri. puoi verificarlo dal W3C.


2
Perché non uno qualsiasi degli altri valori per display?
Paul D. Waite,

1
Questo dovrebbe essere un elenco completo? Non è.
Ry-


-3

Puoi usare questo display:block;e anche aggiungereoverflow:hidden;


1
Si prega di leggere le risposte esistenti prima di contribuire con le proprie. C'è una risposta valida, ben votata e accettata dallo scorso maggio e c'è anche una risposta con un totale negativo di voti che è più o meno identica alla tua.
Quentin,

Ho visto la risposta. Display: Unset non funziona così come un blocco Display:. La mia opinione :) @Quentin
Bel

E display: blocknon funziona bene su un <span>o un <td>... e una risposta precedente ha già menzionato display: block.
Quentin,

2
Hai modificato la risposta per menzionarla overflow: hidden. Perché? Qual è il punto di aggiungerlo? Non ha nulla a che fare con l'annullamento di a display: none.
Quentin,

-4

Il "contrario" migliore sarebbe quello di riportarlo al valore predefinito che è:

display: inline

Voglio solo chiarire che la proprietà display non ha un valore predefinito, tuttavia l'elemento html. Il valore predefinito di un DIV sarebbe display: block, uno SPAN dovrebbe essere predefinito: inline. Ma la proprietà display da sola non ha un valore predefinito.
kevinius il
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.