opacity:0是否具有与可见性完全相同的效果:隐藏


119

如果是这样,是否有效地弃用了该visibility财产?

(我意识到Internet Explorer尚不支持此CSS2属性。)
布局引擎的比较

另请参阅:可见性:隐藏和显示:无之间有什么区别


4
Taborder呢?如果visible = false,则控件不会获得任何焦点,但是如果不透明度为0,则Tab键是否仍在控件之间进行迭代?
Stefan

看看透明控件如何成为焦点将是一个有趣的测试案例。
克里斯·诺

3
我尝试过(FF3)。尽管没有视觉指示,但按Taborder顺序,透明度为0的输入元素确实会获得焦点。光标消失。键入的内容都会输入到输入元素的值中。再次按Tab键可移至下一个字段。有趣。
克里斯·诺

Answers:


256

这是来自各种答案的经过验证的信息的汇总。

这些CSS属性中的每一个都是唯一的。除了使元素不可见之外,它们还具有以下附加效果:

  1. 折叠元素通常会占用的空间
  2. 响应事件(例如,单击,按键)
  3. 在参与的TabOrder
                     崩溃事件标签
不透明度:0否是是
可见性:隐藏否否否
能见度:崩溃是*否否
显示:无是否否

*是在表格元素中,否则为否。

我尝试在此处关注Markdown文档:daringfireball.net/projects/markdown/syntax
Chris Noe

好的,所以SO有意不支持<table>。所以我做到了。
克里斯·诺

3
同样,使用“ opacity:0”会渲染Flash对象,并触发sprite的构造函数,但使用“ visibility:hidden”则不会。
pepkin88 2010年

如果您的单选框/复选框无法使用visibility:hidden,则您需要使用opacity: 0它来检测鼠标单击。
dayuloli 2015年

7
@ChrisNoe:感谢您的总结。您可能想要添加的一件事:我刚刚研究了如何使父节点不可见,但子节点仍可见,结果:看不见子节点的机会: opacity:0display:none但是如果使用visibility: hidden ,可以使用visibility: visible
Martin

14

没有。

不透明的元素会创建新的堆叠上下文。

另外,CSS规范没有对此进行定义,但是与opacity:0的元素是可点击的,而与的元素visibility:hidden则不是。


12

不,不是的。有一个很大的不同。它们是相似的,因为如果可见性被隐藏或不透明度为0,则您可以透视该元素,但是

不透明度:0您不能单击其后面的元素。

可见性:隐藏您可以单击其后面的元素。


1
“不,不是的”?这是作为对问题的答案,还是对现有答案之一的答复?如果是较晚的版本,则应将其作为注释添加到其解决的问题下方。
克里斯·诺伊

9
这是对“不透明度0与可见性是否完全相同:隐藏?”的答案。
Nishant,2015年

5

visibility和之间有许多差异opacity。大多数答案都提到了一些区别,但这是完整列表。

  1. 不透明度不会继承,而可见性会继承

  2. 不透明度是可动画的,而可见性则不能。
    (从技术上讲是正确的,但是根本没有为“ 37%塌陷和63%隐藏”定义行为,因此您可以将其视为不可动画。)

  3. 使用不透明度,您不能使子元素比其父元素更不透明。EG,如果您使用的颜色是:黑色和不透明度:0.5,则不能使它的任何子级变成全黑。不透明度的有效值在0到1之间,此示例需要2!
    因此,根据马丁的评论,您可以在不可见的父项中(具有可见性:隐藏)有一个可见的子项(可见性:visible)。对于不透明这是不可能的。如果父母的不透明度为0;它的孩子总是看不见的。

  4. Kornel的答案提到不透明度值小于1会创建自己的堆栈上下文;可见性没有价值。
    (我希望我能想到一种方法来证明这一点,但我想不出任何方法来显示可视性:hidden元素的堆叠上下文。)

  5. 根据philnash的回答,屏幕阅读器仍会读取不透明度为0的元素,而可见的:隐藏的元素则不会。

  6. 根据Chris Noe的回答,可见性具有更多选项(例如合拢),不可见的元素不再响应点击,因此无法将其切换为选项卡。

(将其设为社区Wiki,因为从现有答案中借用是不公平的。)


4

我对此并不完全确定,但我认为屏幕阅读器不会阅读设置为隐藏可见性的内容,但不管它们的不透明性,他们都可以阅读。

这是我能想到的唯一区别。


那将如何影响结果呢?也许就DOM中包含的内容而言?我的测试案例表明,Mozilla不会丢弃可见性:隐藏元素。
克里斯·诺

无论CSS样式如何,这些元素都将位于DOM中,我的意思是,使用屏幕阅读器软件的盲人用户可能会向他们读取opacity:0元素中的文本,而如果同一元素具有visible:hidden,则不会。实际上,这是一个可访问性问题,因为结果有所不同。
philnash

有用的一点是将可见性设置为隐藏的结果之一,但这只是冰山一角。更具体地说,“可见性:隐藏”使其(似乎)从dom中消失,同时仍保持其在页面上的布局。
Nishant

4

我不能完全确定,但这是我跨浏览器透明度的方法:

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

具有可见性的对象:隐藏的仍具有形状,因此看不见。不透明零元素仍然可以单击并对其他事件做出反应。


拥有形状并被隐形是什么意思?
克里斯·诺

@chris,这意味着他们仍然占据页面上的空间
Mitchel Sellers

2
不透明度用于决定如何在背景上绘制元素。当opactiy设置为0时,该元素自然会占用空间,但不会绘制任何内容,因为0%的元素颜色与100%的背景混合在一起,因此不会出现新的内容。隐藏的和类似的朋友表示在进行绘制时会跳过该元素。
mP。

2

在创建影响元素中的元素的用户风格时contenteditable,我注意到,如果将设置为visibility: hidden,则输入插入符号实际上并不想与之交互。例如,如果您有

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

...那么看来,如果您专注于div / span,则实际上无法输入。而opacity: 0似乎可以。我尚未对此进行广泛的测试,但认为这里值得一提,因为此页面上没有其他人谈论过对文本输入的影响。不过,这似乎可能与上述事件有关。



0

这些属性具有不同的语义含义。尽管语义CSS听起来可能很愚蠢,但正如其他用户提到的那样,它对屏幕阅读器等设备产生了影响-语义影响页面的可访问性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.