关于css:visibility:hidden和display:none之间有什么区别?

What is the difference between visibility:hidden and display:none?

CSS规则visibility:hiddendisplay:none都导致元素不可见。这些是同义词吗?


display:none意味着所讨论的标签根本不会出现在页面上(尽管您仍然可以通过DOM与之交互)。其他标签之间不会为其分配空间。

visibility:hidden表示与display:none不同,标记不可见,但在页面上为其分配了空间。标记被呈现,只是在页面上看不到。

例如:

1
test | <span style="[style-tag-value]">Appropriate style in this tag</span> | test

display:none替换[style-tag-value]导致:

1
test |   | test

visibility:hidden替换[style-tag-value]会导致:

1
test | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | test


它们不是同义词。

display:none从页面的正常流中删除元素,允许其他元素填充。

visibility:hidden将元素保留在页面的正常流中,以便仍然占用空间。

想象一下,你在游乐园排队搭车,排队的人太吵闹了,保安把他们从排队的队伍里拽了出来。然后排队的每个人都向前移动一个位置,填满现在空的位置。这就像display:none

这与类似的情况形成对比,但你面前的人穿上了隐形斗篷。当你看到这条线的时候,你会觉得有一个空的空间,但是人们不能真正填满这个空的空间,因为有人还在那里。这就像visibility:hidden一样。


还有一件事值得补充,尽管没有人问,但第三种选择是使对象完全透明。考虑:

1
2
3
1st unseen link.<br />
2nd unseen link.<br />
3rd unseen link.

在这种情况下,您可以得到:

1
2
3
1st link.
2nd        link.
3rd        link.

已经指出了1和2之间的区别(即2仍然占用空间)。但是,2和3之间有区别:在情况3中,鼠标悬停在链接上时仍会切换到手上,用户仍然可以单击链接,并且javascript事件仍会在链接上触发。这通常不是你想要的行为。选择文本时的行为也可能因浏览器而异。


display:none从布局流中删除元素。

visibility:hidden隐藏了它,但留下了空间。


在子节点方面有很大的不同。例如:如果您有一个父DIV和一个嵌套的子DIV,那么如果您这样写:

1
 

在这种情况下,将看不到任何分区。但是如果你这样写:

1
 

然后子DIV将可见,而父DIV将不显示。


它们不是同义词-display: none从页面流中删除元素,而页面流的其余部分就好像不存在一样。

Visibility: hidden将元素隐藏在视图中,而不是页面流中,在页面上为元素留有空间。


display: none完全从页面中删除元素,页面的构建就像元素根本不存在一样。

Visibility: hidden在文档流中留下了空间,即使您再也看不到它。

这可能会或可能不会产生很大的影响,这取决于你在做什么。


使用visibility:hidden时,对象仍然占据页面的垂直高度。使用display:none,它被完全移除。如果图像下有文本,并且执行display:none,则该文本将向上移动以填充图像所在的空间。如果执行visibility:hidden,文本将保留在同一位置。


display:none将隐藏元素并折叠正在占用的空间,而visibility:hidden将隐藏元素并保留元素空间。显示:无也会影响旧版本IE和Safari中JavaScript提供的一些属性。


除了所有其他答案外,IE8还有一个重要的区别:如果使用display:none并尝试获取元素的宽度或高度,IE8返回0(而其他浏览器将返回实际大小)。IE8只为visibility:hidden返回正确的宽度或高度。


visibility:hidden保留了空间;display:none没有。


1
display: none;

它在页面上不可用,也不占用任何空间。< BR>

1
visibility: hidden;

它隐藏了一个元素,但仍将占用与以前相同的空间。元素将被隐藏,但仍会影响布局。

visibility: hidden保留空间,而display: none不保留空间。

不显示示例:https://www.w3schools.com/css/tryit.asp?文件名=Trycss_显示_无

可见性隐藏示例:https://www.w3schools.com/cssref/tryit.asp?文件名=Trycss_可见性


如果Visibility属性设置为"hidden",则即使内容不可见,浏览器仍将占用页面空间。但是当我们将对象设置为"display:none"时,浏览器不会在页面上为其内容分配空间。

例子:

1
2
3
4
5
Content not display on screen and even space not taken.



Content not display on screen but it will take space on screen.

查看详细信息


visibility:hidden将保留页面中的元素并占用该空间,但不会向用户显示。

display:none在页面中不可用,也不占用任何空间。


另一个区别是,visibility:hidden在真正的、真正的老浏览器中工作,而display:none不:

https://www.w3schools.com/cssref/pr_class_visibility.asp网站

网址:https://www.w3schools.com/cssref/pr_class_display.asp


display:none;既不显示元素,也不在页面上为元素分配空间,而visibility:hidden;不在页面上显示元素,而是在页面上分配空间。在这两种情况下,我们都可以访问DOM中的元素。要更好地理解它,请查看以下代码:显示:无vs可见性:隐藏