Les règles CSS visibility:hidden
et display:none
_ ont pour effet que l'élément n'est pas visible. Sont ces synonymes?
display:none
signifie que la balise en question n'apparaîtra pas du tout sur la page (bien que vous puissiez toujours interagir avec elle via le dom). Il n'y aura pas d'espace alloué pour cela entre les autres balises.
visibility:hidden
signifie que contrairement à display:none
, la balise n'est pas visible, mais de l'espace lui est alloué sur la page. La balise est rendue, elle n’est tout simplement pas visible sur la page.
Par exemple:
test | <span style="[style-tag-value]">Appropriate style in this tag</span> | test
Remplacer [style-tag-value]
par display:none
a pour résultat:
test | | test
Remplacer [style-tag-value]
par visibility:hidden
a pour résultat:
test | | test
Ils ne sont pas synonymes.
display:none
supprime l'élément du flux normal de la page, permettant ainsi à d'autres éléments de se remplir.
visibility:hidden
laisse l'élément dans le flux normal de la page tel qu'il occupe toujours de l'espace.
Imaginez que vous fassiez la queue pour faire un tour dans un parc d'attractions et que quelqu'un dans la file devienne si chahuté que la sécurité l'en empêche. Tout le monde en ligne avancera ensuite d’un poste pour occuper le poste maintenant vide. C'est comme display:none
.
Comparez cela à la situation similaire, mais que quelqu'un devant vous met une cape d'invisibilité. En regardant la ligne, vous aurez l’impression qu’il y a un espace vide, mais les gens ne peuvent pas vraiment remplir cet espace vide car il y a toujours quelqu'un. C'est comme visibility:hidden
.
Une chose à noter, même si cela n’a pas été demandé, c’est qu’il existe une troisième possibilité de rendre l’objet totalement transparent. Considérer:
1st <a href="http://example.com" style="display: none;">unseen</a> link.<br />
2nd <a href="http://example.com" style="visibility: hidden;">unseen</a> link.<br />
3rd <a href="http://example.com" style="opacity: 0;">unseen</a> link.
Dans ce cas, vous obtenez:
1st link.
2nd link.
3rd link.
La différence entre 1 et 2 a déjà été soulignée (à savoir, 2 occupe toujours de la place). Cependant, il existe une différence entre 2 et 3: dans le cas 3, la souris bascule toujours sur la main lors du survol du lien et l'utilisateur peut toujours cliquer sur le lien et les événements Javascript se déclencheront sur le lien. Ceci est généralement pas le comportement que vous souhaitez. Le comportement lors de la sélection de texte peut également varier selon les navigateurs.
display:none
supprime l'élément du flux de présentation.
visibility:hidden
le cache mais laisse de l'espace.
Il y a une grande différence en ce qui concerne les nœuds enfants. Par exemple: Si vous avez un div parent et un div enfant imbriqué. Donc, si vous écrivez comme ceci:
<div id="parent" style="display:none;">
<div id="child" style="display:block;"></div>
</div>
Dans ce cas, aucun des divs ne sera visible. Mais si vous écrivez comme ceci:
<div id="parent" style="visibility:hidden;">
<div id="child" style="visibility:visible;"></div>
</div>
Alors la div enfant sera visible alors que la div parent ne sera pas affichée.
Ce ne sont pas des synonymes - display: none
supprime l'élément du flux de la page et le reste de la page s'écoule comme s'il n'y était pas.
visibility: hidden
masque l'élément, mais pas le déroulement de la page, en lui laissant de la place sur la page.
display: none
supprime entièrement l'élément de la page et la page est construite comme si l'élément n'y était pas du tout.
Visibility: hidden
laisse un espace dans le flux de documents même si vous ne pouvez plus le voir.
Cela peut ou non faire une grande différence en fonction de ce que vous faites.
Avec visibility:hidden
l'objet prend encore une hauteur verticale sur la page. Avec display:none
, il est complètement supprimé. Si vous avez du texte sous une image et que vous faites display:none
, ce texte se déplacera pour remplir l'espace où se trouvait l'image. Si vous faites de la visibilité: caché, le texte restera au même endroit.
display:none
masquera l'élément et réduira l'espace qu'il occupait, alors que visibility:hidden
masquera l'élément et préservera l'espace des éléments. display: none affecte également certaines des propriétés disponibles à partir de javascript dans les anciennes versions de IE et de Safari.
En plus de toutes les autres réponses, il existe une différence importante pour IE8: si vous utilisez display:none
et essayez d'obtenir la largeur ou la hauteur de l'élément, IE8 renvoie 0 (alors que les autres navigateurs renverront les tailles réelles). IE8 renvoie la largeur ou la hauteur correcte uniquement pour visibility:hidden
.
visibility:hidden
préserve l'espace; display:none
non.
display: none;
Il ne sera pas disponible sur la page et n'occupe aucun espace.
visibility: hidden;
il cache un élément, mais il occupera toujours le même espace qu'auparavant. L'élément sera masqué, mais affectera néanmoins la mise en page.
visibility: hidden
préserve l'espace, alors que display: none
ne préserve pas l'espace.
Affichage Aucun Exemple: https://www.w3schools.com/css/tryit.asp?filename=trycss_display_none
Exemple de visibilité masquée: https://www.w3schools.com/cssref/tryit.asp?filename=trycss_visibility
Si la propriété de visibilité est définie sur "hidden"
, le navigateur prendra toujours de la place sur la page pour le contenu, même s'il est invisible.
Mais lorsque nous définissons un objet sur "display:none"
, le navigateur n'attribue pas d'espace sur la page pour son contenu.
Exemple:
<div style="display:none">
Content not display on screen and even space not taken.
</div>
<div style="visibility:hidden">
Content not display on screen but it will take space on screen.
</div>
visibility:hidden
conservera l'élément dans la page et occupera cet espace, mais ne le montrera pas à l'utilisateur.
display:none
ne sera pas disponible dans la page et n'occupe aucun espace.
Une autre différence est que visibility:hidden
fonctionne dans les navigateurs les plus anciens, et display:none
ne fonctionne pas:
La différence va au-delà du style et se reflète dans le comportement des éléments lorsqu'ils sont manipulés avec JavaScript.
Effets et effets secondaires de display: none
:
clientWidth
, clientHeight
, offsetWidth
, offsetHeight
, scrollWidth
, scrollHeight
, getBoundingClientRect()
, getComputedStyle()
, tous renvoient 0
s.Effets et effets secondaires de visibility: hidden
:
innerText
(mais pas innerHTML
) de l'élément cible et des descendants renvoie une chaîne vide.display:none;
n’affichera pas l’élément et n’attribuera pas d’espace à l’élément de la page, tandis que visibility:hidden;
n’affichera pas l’élément sur la page, mais l’espace. Nous pouvons accéder à l'élément dans DOM dans les deux cas. Pour mieux le comprendre, veuillez regarder le code suivant: affichage: aucun vs visibilité: caché