Y a-t-il un opposé à l'affichage: aucun?

197

Le contraire de visibility: hiddenest visibility: visible. De même, y a-t-il un contraire pour display: none?

Beaucoup de gens ne savent pas comment montrer un élément quand c'est le cas display: none, car ce n'est pas aussi clair que d'utiliser la visibilitypropriété.

Je pourrais simplement utiliser à la visibility: hiddenplace de display: none, mais cela ne donne pas le même effet, donc je ne vais pas avec.

Mohammad Areeb Siddiqui
la source
35
Je ne sais pas pourquoi cela entraîne des votes négatifs et des demandes de clôture. C'est sur le sujet (il y a actuellement 143 368 questions CSS sur Stack Overflow), c'est un problème du monde réel, et c'est une bonne question pour aider les gens à apprendre correctement la langue.
Paul D.Waite
4
@Paul Peut-être que les gens n'ont pas remarqué que c'était une auto-réponse et pensaient que c'était un effort de recherche faible (parce que tout l'effort de recherche est dans la réponse)
Richard Tingle
11
Pourquoi poser une question si votre réponse est de copier / coller une table à partir de w3schools.com/cssref/pr_class_display.asp ?
Bill the Lizard
1
@RichardTingle: ah, bon point. @MohammadAreebSiddiq: aw, je ne pensais pas que votre réponse devait être supprimée. Le simple fait de supprimer la grande liste de toutes les displayvaleurs possibles aurait été bien. (Et ce n'est que mon opinion bien sûr: peut-être que les gens ont vraiment aimé cette liste.)
Paul D.Waite
vous auriez vraiment vraiment dû faire de la réponse d'Ilya Streltsyn l'acceptation. Ilya donne une "version" de l'affichage: aucune qui a un contraire, qui résout le problème pratique sous-jacent à votre question, tandis que la réponse que vous avez choisi d'accepter, en substance, dit simplement "non". Ce qui est vrai, mais beaucoup beaucoup moins utile. C'est pour les programmeurs, pas pour les linguistes.
mathheadinclouds

Réponses:

178

display: nonen'a pas de contraire littéral comme le visibility:hiddenfait.

La visibilitypropriété décide si un élément est visible ou non. Il a donc deux états ( visibleet hidden), opposés l'un à l'autre.

La displaypropriété, cependant, décide des règles de mise en page qu'un élément suivra. Il existe plusieurs types de règles différentes sur la façon dont les éléments vont se mettre en CSS, donc il y a plusieurs valeurs différentes ( block, inline, inline-blocketc. - voir la documentation de ces valeurs ici ).

display:none supprime entièrement un élément de la mise en page, comme s'il n'y était pas.

Toutes les autres valeurs de displayfont que l'élément fasse partie de la page, donc dans un sens, elles sont toutes opposées display:none.

Mais il n'y a pas une seule valeur qui soit l'inverse directe display:none- tout comme il n'y a pas un seul style de cheveux qui soit à l'opposé de «chauve».

Paul D. Waite
la source
2
Je remarque que vous avez mentionné display: initialdans la réponse automatique supprimée - pour les navigateurs mettant en œuvre CSS2.1, c'est synonyme de display: inline. Il ne réinitialise displaypas la valeur par défaut du navigateur pour un élément donné - ce n'est pas ce que signifie «valeur initiale».
BoltClock
27
mon vote pour l'exemple «chauve» :) Un exemple très simple à comprendre!
Jesper Rønn-Jensen
2
Tout le long de la lecture, je pense à moi-même "excellent exemple, oui, oui, ils sont tous opposés à display:none" alors vous lisez ", tout comme il n'y a pas un style de cheveux qui soit à l'opposé de chauve " Wow plus 1, bien mis.
Chef_Code
2
Toute coiffure est l'opposé du chauve.
AdjunctProfessorFalcon
@AdjunctProfessorFalcon: enfin, en quelque sorte. Je dirais qu'une tête rasée au numéro un est beaucoup moins opposée à un chauve qu'un mulet.
Paul D.Waite
85

Un vrai contraire à display: nonelà n'existe pas (encore).

Mais display: unsetest très proche et fonctionne dans la plupart des cas.

Depuis MDN (Mozilla Developer Network):

Le mot-clé CSS non défini est la combinaison des mots-clés initial et hérité. Comme ces deux autres mots clés à l'échelle CSS, il peut être appliqué à n'importe quelle propriété CSS, y compris le raccourci CSS all. Ce mot clé réinitialise la propriété à sa valeur héritée si elle hérite de son parent ou à sa valeur initiale dans le cas contraire. En d'autres termes, il se comporte comme le mot clé inherit dans le premier cas et comme le mot clé initial dans le second cas.

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

Notez également qu'il display: revertest en cours de développement. Voir MDN pour plus de détails.

RockPaperLz - Masquez-le ou cercueil
la source
Et quoi display: initial?
Flimm le
31

Lors du changement d'élément displayen Javascript, dans de nombreux cas, une option appropriée pour «annuler» le résultat element.style.display = "none"est element.style.display = "". Cela supprime la displaydéclaration de l' styleattribut, rétablissant la valeur réelle de la displaypropriété à la valeur définie dans la feuille de style du document (à la valeur par défaut du navigateur si elle n'est pas redéfinie ailleurs). Mais l'approche la plus fiable est d'avoir une classe en CSS comme

.invisible { display: none; }

et ajouter / supprimer ce nom de classe à / de element.className.

Ilya Streltsyn
la source
2
Si vous voulez remplacer .element { display: none }(défini dans CSS lib par exemple) avec .element { display: '' !important }cela ne fonctionnera pas. Vous devez utiliser.element { display: unset !important }
tanguy_k
2
J'ai parlé de "défaire" display:noneen JavaScript uniquement. Bien sûr, la chaîne vide ne fonctionnera pas en CSS, car c'est la valeur invalide. Hovewer, display: unsetvous suggérez de ne pas restaurer, par exemple, la valeur display:blockpar défaut pour a <div>ou la valeur display:table-rowpar défaut pour a <tr>, cela transforme effectivement tout en display:inline(juste comme display:initial). Pour restaurer la valeur par défaut du navigateur pour l'élément, il existe display:revert, mais ce n'est pas bien pris en charge ( caniuse.com/#feat=css-revert-value ).
Ilya Streltsyn
Cela devrait être la réponse acceptée. La réponse acceptée a une bonne comparaison avec «l'opposé de chauve», mais ne fait rien pour aider le pauvre programmeur à avoir à faire face à l'implémentation de «make chauve» - «maintenant, remettez les cheveux en arrière». Cette réponse vous indique comment traiter ce problème pratique. Element.style.display = '' est sujet aux erreurs, car les "vieux cheveux" ne sont peut-être pas l'affichage par défaut, mais "block" ou "table cell" ou autre. La suppression de la classe ".invisible", comme ici, est la seule implémentation sans bogue de "mettre les cheveux en arrière maintenant", pour autant que je sache. Alors, faites-le comme ça, toujours
mathheadinclouds
6

vous pouvez utiliser

display: normal;

Cela fonctionne normalement ... C'est un petit piratage en css;)

indera
la source
2
Pourquoi cela est-il rejeté? Est-ce une mauvaise façon de le faire ou? Cela fonctionne bien pour les tablerows, mais dois-je utiliser autre chose?
Benjamin Karlog
4
La valeur «normal» n'est pas une valeur valide pour la displaypropriété, elle est donc simplement ignorée et fonctionne efficacement comme une element.style.display = ''affectation (voir ma réponse ci-dessus).
Ilya Streltsyn
27
donc en d'autres termes vous auriez pu utiliser display: chunk norris;le même effet, avec un peu plus de kick.
Kevin B
1
Si vous voulez remplacer .element { display: none }(défini dans CSS lib par exemple) avec .element { display: normal !important }cela ne fonctionnera pas. Vous devez utiliser.element { display: unset !important }
tanguy_k
4

J'utilise display:block; ça marche pour moi

Pradeep Behera
la source
Cela n'est utile que pour les éléments que vous souhaitez afficher block, ce n'est pas ce que vous voulez généralement pour un inlineélément comme <span>par exemple.
Flimm le
3

Comme Paul l'explique, il n'y a pas d'opposé littéral à l'affichage: aucun en HTML car chaque élément a un affichage par défaut différent et vous pouvez également changer l'affichage avec une classe ou un style en ligne, etc.

Cependant, si vous utilisez quelque chose comme jQuery, leurs fonctions d'affichage et de masquage se comportent comme s'il y avait un opposé à display none. Lorsque vous masquez, puis affichez à nouveau un élément, il s'affiche exactement de la même manière qu'il le faisait avant d'être masqué. Pour ce faire, ils stockent l'ancienne valeur de la propriété d'affichage lors du masquage de l'élément afin que, lorsque vous l'affichez à nouveau, il s'affiche de la même manière qu'avant de le masquer. https://github.com/jquery/jquery/blob/740e190223d19a114d5373758127285d14d6b71e/src/css.js#L180

Cela signifie que si vous définissez un div par exemple pour afficher un bloc en ligne ou un bloc en ligne et que vous le masquez puis l'affichez à nouveau, il s'affichera à nouveau comme affichage en ligne ou bloc en ligne comme avant

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

scénario:

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

Notez que la propriété d'affichage du div restera constante même après avoir été masquée (affichage: aucun) et affichée à nouveau.

user3589536
la source
1
"display: table-cell" était celui dont j'avais besoin. N'a été mentionné sur aucune autre réponse.
bendecko
1

Dans le cas d'une feuille de style imprimable, j'utilise ce qui suit:

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

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

Je l'ai utilisé lorsque je devais imprimer un formulaire contenant des valeurs et que les champs de saisie étaient difficiles à imprimer. J'ai donc ajouté les valeurs enveloppées dans une balise span.print_only (div.print_only a été utilisé ailleurs), puis j'ai appliqué la classe .no_print aux champs d'entrée. Ainsi, à l'écran, vous verrez les champs de saisie et, une fois imprimés, uniquement les valeurs. Si vous vouliez avoir de la fantaisie, vous pouvez utiliser JS pour mettre à jour les valeurs des balises span lorsque les champs ont été mis à jour, mais ce n'était pas nécessaire dans mon cas. Peut-être pas la solution la plus élégante, mais cela a fonctionné pour moi!

TonyP
la source
1

Vous pouvez utiliser display: block

Exemple :

<!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> 
Adeetya Kulkarni
la source
0

J'ai rencontré ce défi lors de la création d'une application où je voulais une table cachée pour certains utilisateurs mais pas pour d'autres.

Au départ, je l'ai configuré comme display: none mais ensuite display: inline-block pour les utilisateurs que je voulais voir mais j'ai rencontré les problèmes de formatage auxquels vous pourriez vous attendre (consolidation des colonnes ou généralement désordonnées).

La façon dont je l'ai contourné était de montrer d'abord le tableau, puis de faire "display: none" pour les utilisateurs que je ne voulais pas voir. De cette façon, il s'est formaté normalement mais a ensuite disparu au besoin.

Un peu une solution latérale mais pourrait aider quelqu'un!

Andrew Sainsbury
la source
0

l'opposé de «none» est «flex» lorsque vous travaillez avec react native.

NEELAMADHAB
la source
-2

visibilité: hidden masquera l'élément mais l'élément est leur avec DOM. Et en cas d'affichage: aucun cela supprimera l'élément du DOM.

Vous avez donc la possibilité de masquer ou d'afficher l'élément. Mais une fois que vous le supprimez (je veux dire n'en afficher aucun), il n'a pas de valeur opposée claire. display ont plusieurs valeurs comme display: block, display: inline, display: inline-block et bien d'autres. vous pouvez le vérifier à partir du W3C.

Hardik Sondagar
la source
2
Pourquoi pas l'une des autres valeurs pour display?
Paul D.Waite
1
Est-ce censé être une liste complète? Ce n'est pas.
Ry-
-3

Vous pouvez l'utiliser display:block;et ajouteroverflow:hidden;

Bel
la source
1
Veuillez lire les réponses existantes avant de contribuer les vôtres. Il y a une bonne réponse , bien votée et acceptée de mai dernier et il y a aussi une réponse avec un total de votes négatif qui est plus ou moins identique au vôtre.
Quentin
J'ai vu la réponse. Display: Unset ne fonctionne pas aussi bien qu'un bloc Display:. Mon avis :) @Quentin
Bel
Et display: blockne fonctionne pas bien sur un <span>ou un <td>… et une réponse précédente a déjà été mentionnée display: block.
Quentin
2
Vous avez modifié la réponse à mentionner overflow: hidden. Pourquoi? Quel est l'intérêt d'ajouter cela? Cela n'a rien à voir avec l'annulation d'un fichier display: none.
Quentin
-4

Le meilleur "contraire" serait de le renvoyer à la valeur par défaut qui est:

display: inline
TimNguyenBSM
la source
Je veux juste préciser que la propriété d'affichage n'a pas de valeur par défaut, l'élément html en a cependant. La valeur par défaut d'un DIV serait display: block, un SPAN afficherait par défaut: inline. Mais la propriété d'affichage seule n'a pas de valeur par défaut.
kevinius