L'opacité: 0 a-t-elle exactement le même effet que la visibilité: masqué

119

Si tel est le cas, rend-il effectivement obsolète la visibilitypropriété?

(Je me rends compte qu'Internet Explorer ne prend pas encore en charge cette propriété CSS2.)
Comparaisons des moteurs de mise en page

Voir aussi: Quelle est la différence entre la visibilité: masquée et l'affichage: aucune

Chris Noe
la source
4
Et que diriez-vous de taborder? Si visible = false, le contrôle n'obtient aucun focus, mais si l'opacité est 0, peut-être que la touche de tabulation itère toujours entre les contrôles?
Stefan
Ce serait un cas de test intéressant pour voir comment un contrôle transparent pourrait obtenir le focus.
Chris Noe
3
J'ai essayé ça, (FF3). Un élément d'entrée avec opacity: 0 reçoit le focus, par ordre de tabulation, bien qu'il n'y ait aucune indication visuelle. Le curseur disparaît simplement. Tout ce que vous tapez est entré dans la valeur de l'élément d'entrée. Appuyez à nouveau sur tab pour passer au champ suivant. Intéressant.
Chris Noe

Réponses:

256

Voici une compilation d'informations vérifiées à partir des différentes réponses.

Chacune de ces propriétés CSS est unique. En plus de rendre un élément non visible, ils ont les effets supplémentaires suivants:

  1. Réduit l'espace que l'élément occuperait normalement
  2. Répond aux événements (par exemple, cliquez, appuyez sur une touche)
  3. Participe à la taborder
                     réduire l'ordre des événements
opacité: 0 Non Oui Oui
visibilité: masqué Non Non Non
visibilité: réduire Oui * Non Non
affichage: aucun Oui Non Non

* Oui à l'intérieur d'un élément de table, sinon Non.
Chris Noe
la source
J'ai essayé de suivre la documentation Markdown ici: daringfireball.net/projects/markdown/syntax
Chris Noe
D'accord, donc SO ne prend pas en charge intentionnellement <table>. Alors je l'ai fait ascii.
Chris Noe
3
De plus, avec "opacity: 0", les objets Flash sont rendus et le constructeur du sprite est déclenché, mais pas avec "visibilité: hidden".
pepkin88
Si votre radio / cases à cocher ne fonctionnent pas avec visibility:hidden, vous devrez l'utiliser à la opacity: 0place pour détecter le clic de souris.
dayuloli
7
@ChrisNoe: merci pour le résumé. Une chose que vous voudrez peut-être ajouter: je viens de rechercher comment rendre un nœud parent invisible mais les nœuds enfants toujours visibles, le résultat: aucune chance pour les enfants visibles: opacity:0 ou display:none, mais si vous utilisez, visibility: hidden vous pouvez rendre les enfants visibles avecvisibility: visible
Martin
14

Non.

Les éléments avec opacité créent un nouveau contexte d'empilement.

De plus, les spécifications CSS ne le définissent pas, mais les éléments avec opacity:0sont cliquables et les éléments avec visibility:hiddenne le sont pas.

Kornel
la source
12

Non. Il y a une grosse différence. Ils sont similaires car vous pouvez voir à travers l'élément si la visibilité est masquée ou l'opacité est de 0, cependant

opacité: 0 : vous ne pouvez pas cliquer sur les éléments derrière.

visibilité: cachée : vous pouvez cliquer sur les éléments derrière.

Nishant
la source
1
"Non"? S'agit-il d'une réponse à la question ou d'une réponse à l'une des réponses existantes? Si c'est le plus tard, alors il devrait être ajouté en tant que commentaire sous la réponse qu'il adresse.
Chris Noe
9
C'est une réponse à "L'opacité: 0 a-t-elle exactement le même effet que la visibilité: cachée?" ... n'était-ce pas évident cependant?
Nishant
5

Il existe de nombreuses différences entre visibilityet opacity. La plupart des réponses mentionnent quelques différences, mais voici une liste complète.

  1. l'opacité n'hérite pas, contrairement à la visibilité

  2. l'opacité est animable tandis que la visibilité ne l'est pas.
    (Eh bien, techniquement, c'est le cas, mais il n'y a tout simplement pas de comportement défini pour, par exemple, "37% réduit et 63% masqué", vous pouvez donc considérer cela comme non animable.)

  3. En utilisant l'opacité, vous ne pouvez pas rendre un élément enfant plus opaque que son parent. EG si vous avez un ap avec couleur: noir et opacité: 0,5, vous ne pouvez rendre aucun de ses enfants entièrement noir. Les valeurs valides pour l'opacité sont comprises entre 0 et 1, et cet exemple nécessiterait 2!
    Par conséquent, selon le commentaire de Martin , vous pouvez avoir un enfant visible (avec visibilité: visible) dans un parent invisible (avec visibilité: caché). Ceci est impossible avec l'opacité; si un parent a l'opacité: 0; ses enfants sont toujours invisibles.

  4. La réponse de Kornel mentionne que les valeurs d'opacité inférieures à 1 créent leur propre contexte d'empilement; aucune valeur pour la visibilité ne le fait.
    (J'aurais aimé pouvoir penser à un moyen de le démontrer, mais je ne vois aucun moyen de montrer le contexte d'empilement d'une visibilité: l'élément caché.)

  5. Selon la réponse de philnash , les éléments avec l'opacité: 0 sont toujours lus par les lecteurs d'écran, alors qu'ils sont visibles: les éléments cachés ne le sont pas.

  6. Selon la réponse de Chris Noe , la visibilité a plus d'options (comme la réduction) et les éléments qui ne sont pas visibles ne répondent plus aux clics et ne peuvent pas être tabulés.

(Faire de ce wiki un wiki communautaire, car emprunter des réponses existantes ne serait pas juste autrement.)

Monsieur Lister
la source
4

Je ne suis pas tout à fait sûr de cela, mais je pense que les lecteurs d'écran ne lisent pas les éléments dont la visibilité est masquée, mais ils peuvent lire des éléments quelle que soit leur opacité.

C'est la seule différence à laquelle je peux penser.

Philnash
la source
Comment cela affecterait-il alors le résultat? Peut-être en termes de ce qui est inclus dans le DOM? Mes cas de test montrent que Mozilla ne gâche pas la visibilité: des éléments cachés.
Chris Noe
Les éléments seraient dans le DOM quel que soit le style CSS, je veux dire que les utilisateurs aveugles utilisant un logiciel de lecture d'écran peuvent avoir du texte dans l'élément opacity: 0, alors qu'ils ne le feraient pas si le même élément avait visibilité: hidden. C'est vraiment un problème d'accessibilité, car le résultat est différent.
philnash
point utile, c'est l'un des résultats de la définition de la visibilité sur hidden, mais ce n'est que la pointe de l'iceberg. Plus précisément, la visibilité: hidden le fait (apparemment) disparaître de dom, tout en conservant sa mise en page sur la page.
Nishant
4

Je ne suis pas entièrement sûr, mais voici comment je fais la transparence du navigateur:

opacity: 0.6;
-moz-opacity: 0.6;
filter: alpha(opacity=60);

les objets avec visibilité: cachés ont toujours une forme, ils ne sont juste pas visibles. Les éléments d'opacité zéro peuvent toujours être cliqués et réagir à d'autres événements.

Andrew Bullock
la source
Que signifie avoir une forme et être invisible?
Chris Noe
@chris, cela signifie qu'ils occupent toujours l'espace sur la page
Mitchel Sellers
2
l'opacité est utilisée pour décider comment l'élément est dessiné sur l'arrière-plan. Avec opactiy mis à 0, l'élément prend naturellement de l'espace mais rien n'est dessiné car 0% de la couleur de l'élément est mélangé à 100% de l'arrière-plan, ce qui ne fait apparaître rien de nouveau. Les amis cachés et similaires signifient que l'élément est ignoré lors du dessin.
mP.
2

En créant un style d'utilisateur qui affecte les éléments dans a contenteditable, j'ai remarqué que si vous définissez quelque chose sur visibility: hidden, le curseur d'entrée ne veut pas vraiment interagir avec lui. Par exemple, si vous avez

<div contenteditable><span style='visibility: hidden;'></span></div>

... alors il semble que si vous vous concentrez sur ce div / span, vous ne pouvez pas réellement le taper. Alors qu'avec opacity: 0cela semble vous pouvez. Je n'ai pas testé cela de manière approfondie, mais j'ai pensé qu'il valait la peine de le mentionner ici, car personne d'autre sur cette page n'a parlé des effets sur la saisie de texte. Cela semble peut-être lié aux événements mentionnés ci-dessus.

MalcolmOcean
la source
0

Ce que dit Phil est vrai.

IE prend en charge l'opacité cependant:

filter:alpha(opacity=0);
Diodeus - James MacFarlane
la source
0

Les propriétés ont des significations sémantiques différentes . Bien que le CSS sémantique semble ridicule, comme d'autres utilisateurs l'ont mentionné, il a un impact sur des appareils tels que les lecteurs d'écran - où la sémantique a un impact sur l'accessibilité d'une page.

Zack l'humain
la source