如何隐藏元素而不让它们在页面上占用空间?


228

visibility:hidden用来隐藏某些元素,但隐藏时它们仍会占用页面上的空间。

我如何才能使它们在视觉上完全消失,就像它们根本不在DOM中一样(但实际上没有从DOM中删除它们)?


这个问题已经死了,但是我要添加一条评论,因为我最近发现自己处于别人可能会遇到的情况。我需要隐藏一个元素并将其保留offsetTop,并将display:none设置offsetTop为0。我的解决方案是使用,visibility: hidden然后将width和height设置为0。一旦需要使该元素再次可见,便使用删除了这三个属性Javascript。有点棘手的解决方案,但是它几乎可以在所有用例中很好地工作。
拉帕蒂克

Answers:


301

尝试设置display:none为隐藏并设置display:block为显示。


它不可能从dom man中删除元素。通过也使用此选项。阅读问题
Pranay Rana

26
并非所有项目都应为display: block,某些项目必须设为display: inline(例如<span><a><img>DOM元素)。
毛罗2010年

2
@pranay问题说隐藏它们而不是将它们从DOM中删除。
毛罗2010年

6
@pranay:问题不是很好表达,但是Huusom正在解决用户遇到的问题。
克劳迪奥·雷迪

1
的改进:创建一个名为CSS类hiddendisplay: none。将类添加到元素中以将其隐藏,将其删除。删除它时,该display属性将还原为默认元素。
亚历杭德罗·C·德·巴卡

44

用样式代替

<div style="display:none;"></div>

1
不幸的是,这对我不起作用-使用display:none仍然会留有空白。
mbuc91 '19

15

使用display:none是一个很好的选择,只是删除了一个元素,但对于屏幕阅读器也将被删除。也有讨论是否会影响SEO。在A List Apart上有一篇关于该主题的简短文章

如果你真的只是想隐藏不会删除元素,更好地利用:

div {
  position: absolute; 
  left: -999em;
}

这样,屏幕阅读器也可以读取它。

此方法的唯一缺点是,此DIV实际上已渲染,并且可能会影响性能,尤其是在手机上。


2
如果您选择放置绝对的东西,则在大多数情况下可以使用visibility: hidden;,假设您还有其他绝对元素,则它们不会对空间产生冲突,只是存在冲突z-index。只是为了隐藏我要使用的元素visibility
Dejan.S 2016年


6

这个问题的答案是说要使用display:none和display:block,但这对试图使用css过渡来显示和隐藏可见性属性的人没有帮助。

这也使我发疯,因为使用display会杀死任何CSS过渡。

一种解决方案是将其添加到使用可见性的类中:

overflow:hidden

这项工作确实取决于布局,但是它应该将空内容保留在其所在的div中。


3
如果您以可见性:隐藏和可见性:可见并设置元素位置:已修复,就不会遇到问题,那就像魔术
John Balvin Arias


3

display:none隐藏并设置display:block显示。


1
他要求以视觉方式删除它,“好像它们不在DOM中一样”。与从实际DOM中删除它们无关。
2010年

问题指出不要仅将它们从DOM中删除就使其消失。as though they are not in the DOM at all (but without actually removing them from the DOM)
毛罗(Mauro)2010年

@pranay:visibility: hidden仅停止显示内容,但仍使用垂直/水平空间,display:none删除元素的垂直/水平空间。
毛罗(Mauro)2010年

不,不是。可见性:隐藏;使元素不可见,但仍会占用空间。显示:无;使文档的行为就像从未出现过一样。
奥利·霍奇森

1
然后删除此答案。
BalusC,2010年

3

切换display不允许平滑的CSS过渡。而是同时切换visibility和和max-height

visibility: hidden;
max-height: 0;

在处理动画时,这很有用。因为我们使用来将元素隐藏在可见区域之外transform: translateX(-100%)。我们不想要display: none
zhuhang.jasper


1
$('#abc').css({"display":"none"});

这将隐藏内容,也不会留出空白空间。


1

据我所知,有四种可能

  1. 的HTML<button style="display:none;"></button>
  2. 的CSS #buttonId{ display:none; }
  3. jQuery $('#buttonId').prop('display':'none');$("#buttonId").css('opacity', 0);

1

display:none最好避免在页面上占用空白


2
似乎只是其他答案的重复。

0

使用!important,如果你被迫覆盖现有的CSS样式。

display: none !important;
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.