Quelles différences entre visibility: hidden et display: none ?

Il existe deux grands moyens de cacher ou de masquer un élément HTML en CSS : on peut soit lui appliquer un visibility : hidden, soit lui appliquer un display : none.

Ces deux méthodes vont toutes les deux nous permettre de cacher un élément. Cependant, elles ne sont pas équivalentes au sens où elles n’importent pas le design général de la page de la même manière.

Il existe en effet une différence de taille entre ces deux méthodes : appliquer un visibility: hidden sur un élément comme un div par exemple va simplement cacher cet élément mais ne va pas le retirer du flux de la page ce qui signifie que l’espace qu’il occupait lorsqu’il était visible va être conservé tandis qu’appliquer un display: none va non seulement masquer l’élément en question mais va en plus permettre aux autres éléments d’occuper l’espace de l’élément caché.

Pour bien comprendre cette différence, appuyons nous sur un exemple utilisant visibility : hidden et display : none.

Code HTML :

See the Pen
Tuto – Différence entre visibility : hidden et display : none
by Pierre (@pierregiraud)
on CodePen.

Code CSS :

See the Pen
Tuto – Différence entre visibility : hidden et display : none
by Pierre (@pierregiraud)
on CodePen.

Résultat :

See the Pen
Tuto – Différence entre visibility : hidden et display : none
by Pierre (@pierregiraud)
on CodePen.

Dans cet exemple, j’utilise une grille CSS avec deux colonnes. Ma colonne de gauche est ma colonne “témoin” tandis que la colonne de droite est la colonne de test. Cela vous permet de bien voir les différences entre visibility : hidden et display : none.

Les deux colonnes possèdent ici exactement le même contenu, à savoir 4 div distincts dans lesquels on place différents éléments HTML dont notamment deux éléments span. Dans la colonne de gauche, tous les éléments sont affichés tandis que dans la colonne de droite on a appliqué des visibility : hidden ou display : none à certains éléments.

Dans la colonne “test” (colonne de droite), on applique visibility: hidden au premier div. Comme vous pouvez l’observer, cela masque le div et son contenu mais l’espace qui lui était originellement réservé est préservé. C’est tout simplement car visibility: hidden rend un élément invisible mais l’élément existe toujours dans le flux de la page.

On applique ensuite un display : none au troisième div de la colonne “test”. Cela cache à nouveau le div et son contenu mais cette fois-ci l’espace réservé à ce div redistribué aux autres éléments. En effet, comme vous pouvez le voir, le div numéro 4 se place là où était le div numéro 3. Lorsqu’on applique un display: none, cela ne fait pas que cacher un élément mais ça le retire également du flux de la page.

Vous pouvez à nouveau observer ce comportement au niveau de nos deux span : le span du deuxième div possède un visibility: hidden tandis que celui du quatrième div possède un display: none.

Comme vous pouvez le voir, l’espace occupé par le span avec visibility: hidden est conservé tandis que celui occupé par le span avec display: none est redistribué. C’est la grande différence entre visibility : hidden et display : none.

Si vous n’arrivez toujours pas à bien voir la différence entre visibility : hidden et display : none, imaginez vous dans une pièce avec deux autres personnes. La première personne se cache derrière un rideau tandis que la deuxième quitte la pièce.

La personne cachée n’est plus visible mais est toujours présente dans la pièce et occupe un espace : c’est l’équivalent de visibility : hidden. La personne qui a quitté la pièce n’est plus visible non plus mais n’occupe aucun espace dans la pièce puisqu’elle n’est plus dedans : c’est l’équivalent de display: none.

Laisser un commentaire