CSS属性:显示与可见性


Answers:


111

visibility属性仅告诉浏览器是否显示元素。它是可见的(visible-您可以看到)或不可见的(hidden-您看不到)。

display属性告诉浏览器如何绘制和显示元素(如果有的话)-是将其显示为inline元素(即,与文本和其他内联元素一起流动)还是block-level元素(即,具有height和width属性,你可以设置,它的浮动等),或inline-block(即它的作用就像一个黑匣子,但奠定了直列代替)和其他一些人(list-itemtabletable-rowtable-cellflex,等)。

当您将元素设置为,display: block同时又设置时visibility: hidden,浏览器仍将其视为块元素,除非您看不到它。有点像是将一个红色框堆叠在一个看不见的框之上:该红色框看起来好像漂浮在空中,而实际上却位于一个看不见的物理框之上。

换句话说,这意味着displaynone存在的元素仍然会影响页面中元素的流动,无论它们是否可见。围绕元素的框的display: none行为就像该元素从不存在(尽管它仍保留在DOM中)。


1
..与DOM无关吗?例如...如果您有display: none;,那么该元素是否已从DOM中删除?还是我完全困惑?
赫里斯特

3
@Hristo:实际上不是。您可以从不影响单用CSS的DOM元素的位置或存在。
BoltClock

@BoltClock ...是的,您是对的。我已经意识到,你不能把一个元素从DOM,但只影响如何把它显示问候的DOM。听起来更准确吗?
赫里斯特

需要注意的重要一件事是,通过使用jQuery的hide()方法(内部将display设置为none),您将无法获得该元素的位置。使用可见性,您就能做到。
p0rsche 2014年

21

可见性:隐藏;

  • 该元素将不会被绘制并且不会接收到单击/触摸事件,但是它占用的空间仍然被占用
  • 因为它仍然存在于布局目的,所以您可以在不可见的情况下对其进行测量
  • 更改内容仍会花费时间对页面进行重排/布局
  • 可见性是继承的,因此这意味着您可以通过给子级以可见性来使其可见。

显示:无;

  • 将使元素不参与流程/布局
  • 可以(取决于使用的浏览器)杀死Flash电影和iframe(将在再次显示后重新启动/重新加载),尽管您可以防止iframe发生这种情况
  • 该元素不会占用任何空间。出于布局目的,好像它不存在
  • 会使某些浏览器/设备(例如iPad)直接取回该元素使用的内存,如果在动画过程中在一个值和另一个值之间切换时会引起小的混合

额外说明:

  • 隐藏内容中的图像:在所有流行的浏览器中,即使它们位于具有可见性的任何元素中,图像仍会加载:或显示:无;
  • 隐藏内容中的字体: Webkit浏览器(Chrome / Safari)可能会延迟加载仅在隐藏元素中使用的自定义字体,包括通过可见性或显示方式。这可能会导致您测量在加载自定义字体之前仍使用后备字体的元素。

19

display:none将从html流中删除该元素,而visibleability:hidden则不会。


2

显示:无;将从DOM中移除DOM元素的视觉样式/物理空间,而visible:hidden; 不会删除该元素,而只是将其隐藏。因此,在将div设置为visible时,在DOM中占据300px垂直空间的div仍将占据300px垂直宽度。但是设置为display:none; 它的视觉风格被隐藏起来,然后由于缺少更好的单词而“释放”了空间。

[编辑]-前一段时间,我写了上面的文章,我是否不足够了解知识或日子不好,我不知道,但现实是,该元素永远不会从DOM层次结构中删除。使用display:none时,所有块级显示“样式”都完全“隐藏”,而具有visible:hidden; 元素本身是隐藏的,但仍在DOM中占据可视空间。我希望这可以清除一切


4
不,display: none不会从DOM中删除的元素。元素仍然在那里,只是不显示
BoltClock
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.