visibility

The visibility CSS property can show or hide an element without affecting the layout of a document (i.e., space is created for elements regardless of whether they are visible or not). The property can also hide rows or columns in a <table>.

/* Keyword values */
visibility: visible;
visibility: hidden;
visibility: collapse;
/* Global values */
visibility: inherit;
visibility: initial;
visibility: unset;

To both hide an element and remove it from the document layout, set the display property to none instead.

Initial valuevisible
Applies toall elements
Inheritedyes
Mediavisual
Computed valueas specified
Animation typea visibility
Canonical orderthe unique non-ambiguous order defined by the formal grammar

Syntax

Values

visible
The element box is visible. Default value.
hidden
The element box is invisible (not drawn), but still affects layout as normal. Descendants of the element will be visible if they have visibility set to visible. The element cannot receive focus (such as when navigating through tab indexes).
collapse
For <table> rows, columns, column groups, and row groups, the row(s) or column(s) are hidden and the space they would have occupied is removed (as if display: none were applied to the column/row of the table). However, the size of other rows and columns is still calculated as though the cells in the collapsed row(s) or column(s) are present. This value allows for the fast removal of a row or column from a table without forcing the recalculation of widths and heights for the entire table. For XUL elements, the computed size of the element is always zero, regardless of other styles that would normally affect the size, although margins still take effect. For other elements, collapse is treated the same as hidden.

Interpolation

Visiblity values are interpolable between visible and not-visible. One of the start or ending values must therefore be visible or no interpolation can happen. The value is interpolated as a discrete step, where values of the timing function between 0 and 1 map to visible and other values of the timing function (which occur only at the start/end of the transition or as a result of cubic-bezier() functions with y values outside of [0, 1]) map to the closer endpoint.

Formal syntax

visible | hidden | collapse

Examples

Basic example

HTML

<p class="visible">The first paragraph is visible.</p>
<p class="not-visible">The second paragraph is NOT visible.</p>
<p class="visible">The third paragraph is visible. Notice the second paragraph is still occupying space.</p>

CSS

.visible {
  visibility: visible;
}
.not-visible {
  visibility: hidden;
}

Table example

HTML

<table>
  <tr>
    <td>1.1</td>
    <td class="collapse">1.2</td>
    <td>1.3</td>
  </tr>
  <tr class="collapse">
    <td>2.1</td>
    <td>2.2</td>
    <td>2.3</td>
  </tr>
  <tr>
    <td>3.1</td>
    <td>3.2</td>
    <td>3.3</td>
  </tr>
</table>

CSS

.collapse {
  visibility: collapse;
}
table {
  border: 1px solid red;
}
td {
  border: 1px solid gray;
}


 

Notes

Support for visibility: collapse is missing or partially incorrect in some modern browsers. It may not be correctly treated like visibility: hidden on elements other than table rows and columns.

visibility: collapse may change the layout of a table if the table has nested tables within the cells that are collapsed, unless visibility: visible is specified explicitly on nested tables.

Specifications

Specification Status Comment
CSS Basic Box Model
The definition of 'visibility' in that specification.
Working Draft No changes.
CSS Transitions
The definition of 'visibility' in that specification.
Working Draft Defines visibility as animatable.
CSS Level 2 (Revision 1)
The definition of 'visibility' in that specification.
Recommendation Initial definition.

Browser compatibility

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support 1.0[1] (Yes) 1.0 (1.7 or earlier)[2] 4.0[4] 4.0[3] 1.0[1]
Feature Android Chrome for Android Edge Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support 1.0 1.0[1] (Yes) 1.0 (1.0)[2] 6.0 6.0[3] 1.0[1]

[1] Chrome and Safari treat visibility: collapse like hidden, leaving a white gap; they support it only on <tr>, <thead>, <tbody>, and <tfoot>, but not on <col> and <colgroup> elements.

[2] Firefox doesn’t hide borders when hiding <col> and <colgroup> elements if border-collapse: collapse is set.

[3] In Opera, visibility: collapse works on table elements, but doesn’t seem to hide a <tfoot> if it is adjacent to a visible <tbody>.

[4] Internet Explorer doesn't support visibility: initial. Up to IE7, descendants of hidden elements will still be invisible even if they have visibility set to visible.