"visibility:collapse"和"display:none"之间的区别

Vee*_*era 79 html css

visibility:collapse和之间有什么区别display:none

Pek*_*ica 90

精简版:

前者用于完全隐藏表格元素.后者用于完全隐藏其他所有内容.

长版:

visibility: collapse完全隐藏元素(以便它不占用布局中的任何空间),但仅当元素是表元素时.

如果在表元素以外的元素上使用,visibility: collapse则表现如下visibility: hidden.这使得元素不可见,但它仍将占用布局中的空间.

display: none完全隐藏元素,因此它不占用布局中的任何空间,但不应在表元素上使用它.

W3C参考

  • 这很有用,但是对于表格元素不应该使用`display:none`这一主张的引用或解释将是一个很好的补充. (6认同)
  • @MarkAmery 正如 Dai 提到的,如果您在表格单元格上使用“display:none;”,那么表格显示就好像该单元格根本不存在一样:它将向左移动其他单元格以占据该空间。 (2认同)

Mat*_*nda 32

visibility: collapse行为与visibility: hidden大多数格式化上下文完全相同:元素所需的空间在布局中是"保留的",但元素本身不会被渲染,留下空白空间.

我知道有三个例外:table-rows,table-columns和flex items,其visibility: collapse行为类似display: none,但有一个主要区别:'strut'.您可以将strut视为零大小的占位符,在布局过程中不会声明自己的任何空间,但仍然是格式化结构的一部分并参与某些大小的计算.

例如,折叠的表格行不会占据表格中的任何垂直空间,但表格列仍将按照折叠行的尺寸标注,其内容实际上是可见的.这是为了防止列在进行切换时"摇摆".同样,折叠的柔性项目不会沿主轴占据任何空间,但仍然有助于柔性线的交叉尺寸.

"不要使用display: none表格"是一个有价值的经验法则,但它并不能说明整个故事.

  • 使用display: none,如果你不想让你的隐藏要素参与在表(或柔性线)布局过程中的任何方式.
  • 使用visibility: collapse如果要动态显示和隐藏元素,而不稳定的表(或柔性线)布局.

这是一个代码片段,演示了表格行display: nonevisibility: collapse表格行之间的区别:

.show-right-border {
  border-right: 1px black solid;
}
Run Code Online (Sandbox Code Playgroud)
<h3>visibility: collapse</h3>
<table class="show-right-border">
  <tr>
    <td>Short text.</td>
    <td style="visibility: collapse;">Loooooooooong text.</td>
  </tr>
</table>

<h3>display: none</h3>
<table class="show-right-border">
  <tr>
    <td>Short text.</td>
    <td style="display: none;">Loooooooooong text.</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

  • 只有一个讲述完整的故事.@Mathieu Renda你应该编辑主要答案,添加所有这些知识. (2认同)

Col*_*ert 17

visibility:collapse应该只用在桌子上.在其他元素上它将充当visibility:hidden.

visibility:hidden隐藏元素但仍占用元素的空间,但display:none甚至不保留空间.


资源:

在同一主题上:


zne*_*eak 5

visibility:collapsedisplay:none仅对表元素有行为。在其他元素上,它应该呈现为hidden.