我使用visibility:hidden
来隐藏某些元素,但尽管它们被隐藏了,它们仍然占用了页面上的空间。
有什么方法可以使它们在视觉上完全消失,就像它们根本不在DOM中一样(但实际上并没有将它们从DOM中删除)?
尝试设置display:none
以隐藏元素,并设置display:block
以显示元素。
display:block
,有些需要设置为display:inline
(例如<span>
、<a>
或<img>
DOM元素)。 - Mauro应该使用样式(style)而不是像这样
<div style="display:none;"></div>
切换display
属性无法实现平滑的CSS过渡效果。相反,应该同时切换visibility
和max-height
属性。
visibility: hidden;
max-height: 0;
transform: translateX(-100%)
的方式隐藏元素在可见区域之外。我们不想使用 display: none
。 - zhuhang.jasper使用display:none
是一个很好的选项,可以仅仅删除一个元素,但这也将同时删除屏幕阅读器中的该元素。此外,人们还在讨论它是否影响SEO。关于这个话题,A List Apart有一篇很好的简短文章《现在你看到我》。
如果您真的只想隐藏而不是删除元素,请使用:
div {
position: absolute;
left: -999em;
}
这样可以被屏幕阅读器阅读。
这种方法唯一的缺点是,这个
visibility: hidden;
,假设您有其他绝对元素,它们不会与空间发生冲突,只会与 z-index
发生冲突。仅为了隐藏一个元素,我会使用 visibility
。 - Dejan.S使用 display: none;
代替 visibility: hidden;
,前者可以隐藏元素同时不占用任何空间,而后者虽然能够隐藏元素但仍会占用空间。
display: none是一个解决方案,它完全隐藏了元素及其所占空间。
display:none
和visibility:hidden
的故事visibility:hidden
表示标签不可见,但在页面上为其分配了空间。
display:none
表示完全隐藏元素及其所占空间(尽管您仍然可以通过DOM与其交互)。
overflow:hidden
为了使其正常工作,它确实依赖于布局,但应该将空内容保留在其所在的 div 中。
使用display:none
可以隐藏元素,使用display:block
可以显示元素。
visibility: hidden
只是停止了内容的显示,但仍然使用垂直/水平空间,而 display:none
则删除了元素的垂直/水平空间。 - Mauro以下是另一种关于如何在display:none后将它们放回的方法。不要使用display:block/inline等。相反(如果使用JavaScript),将CSS属性显示设置为''(即空白)。
在我的知识范围内,有四种方法可以实现:
<button style="display:none;"></button>
#buttonId{ display:none; }
$('#buttonId').prop('display':'none');
& $("#buttonId").css('opacity', 0);
offsetTop
,而display:none
会将offsetTop
设置为0。我的解决方案是使用visibility: hidden
然后将宽度和高度设置为0。一旦我需要再次使元素可见,我就使用Javascript删除了这三个属性。这是一个有点 hacky 的解决方案,但对于几乎所有用例都有效。 - rappatic