设置可见性与隐藏/显示

时间:2012-01-10 09:35:40

标签: javascript jquery

element.css('visibility', 'visible')element.show()之间有什么区别?另外,element.css('visibility', 'hidden')element.hide()之间有什么区别?

更新:此外,隐藏元素所有元素的子树的最正确方法是什么?

更新N2 :了解元素(及其子树)是否可见的正确方法是:element.is(':visible')还是element.css('visibility')

更新N3 :有没有办法隐藏元素(完全),但它仍会保留浏览器页面上的空格/区域? (据我所知 - 正确的方法是调用hide(),但这可能会导致页面视觉重组。

5 个答案:

答案 0 :(得分:20)

可见性仍将保留浏览器中的空间。

隐藏元素设置为display: none,因此此元素占用的所有空间都会折叠。 如果您只将元素设置为visibility: hidden,则元素将变为透明但空间被占用,就像元素仍然存在一样。

.hide()等于.css('display', 'none')
.show() 等于.css('display', 'block') - 我很确定jQuery在这里做了一些魔术来决定它是否真的block应该进入那里但它有点相等

<强> @Update:
隐藏带有.hide()(或.css('display', 'none'))元素的元素后,dom-tree中属于该元素子元素的所有元素也将被隐藏。

@Update 2:
如果您使用的是.hide().show(),那么.is(':visible') 如果您使用的是visibility css属性,那么.css('visibility')

@Update 3:
这正是.css('visibility', 'hidden')所做的,它隐藏了没有页面重组的元素。 .hide()将完全“删除”元素。

答案 1 :(得分:3)

jquery.hide()相当于调用.css('display', 'none')jquery.show相当于调用.css('display', 'block')

.css()方法只是设置可见性属性。

从css的角度来看差异:

visbility : hidden

隐藏的值使生成的框不可见而不从布局中删除。可以看到后代的盒子。 See this

display : none

值为none会使元素根本不生成任何框。即使它们的显示属性设置为非空,也不能生成框。See this

使用隐藏,元素仍会生成。

答案 2 :(得分:1)

取自w3schools.com

  

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

     

display:none隐藏一个元素,它不会占用任何空间。元素将被隐藏,页面将显示为元素不存在:

答案 3 :(得分:1)

他们设置了2个不同的css属性:hide / show将display属性设置为none,show删除此设置以便使用默认值(例如div的'block')。< / p>

其他答案指出的差异在于,在元素上调用hide意味着它(及其所有祖先)不会占用任何空间。将visibility设置为hidden将有效地使元素完全透明(但仍然占用空间)。

有关编辑的答案:

  1. 隐藏所有祖先(使用这两种方法自动完成)。
  2. 使用element.is(':visible'),因为这会对visibilitydisplay属性进行检查,并查看heightwidth是否不为0,它也会在祖先上递归执行,而element.css('visibility')只是告诉你元素的visibility
  3. 设置element.css('visibility', 'hidden')将执行此操作 - 不会调用element.hide()

答案 4 :(得分:1)

除了bardiir的解释,这里还有“display:none”和“visibility:hidden”的好演示 http://www.w3schools.com/css/css_display_visibility.asp

“删除”按钮设置“display:none”和“hide”按钮设置“visibility:hidden”。