element.css('visibility', 'visible')
和element.show()
之间有什么区别?另外,element.css('visibility', 'hidden')
和element.hide()
之间有什么区别?
更新:此外,隐藏元素和所有元素的子树的最正确方法是什么?
更新N2 :了解元素(及其子树)是否可见的正确方法是:element.is(':visible')
还是element.css('visibility')
?
更新N3 :有没有办法隐藏元素(完全),但它仍会保留浏览器页面上的空格/区域? (据我所知 - 正确的方法是调用hide()
,但这可能会导致页面视觉重组。
答案 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)
visibility:hidden隐藏了一个元素,但它仍然会占用与以前相同的空间。该元素将被隐藏,但仍会影响布局。
display:none隐藏一个元素,它不会占用任何空间。元素将被隐藏,页面将显示为元素不存在:
答案 3 :(得分:1)
他们设置了2个不同的css属性:hide / show将display
属性设置为none
,show删除此设置以便使用默认值(例如div的'block')。< / p>
其他答案指出的差异在于,在元素上调用hide
意味着它(及其所有祖先)不会占用任何空间。将visibility
设置为hidden
将有效地使元素完全透明(但仍然占用空间)。
有关编辑的答案:
element.is(':visible')
,因为这会对visibility
和display
属性进行检查,并查看height
和width
是否不为0,它也会在祖先上递归执行,而element.css('visibility')
只是告诉你元素的visibility
。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”。