visibilityは要素の非表示を指定するためのCSSプロパティです。display: none、opacity: 0との違いも開設します。visibility: collapseは<table>要素に対して使用します。
.sampleクラスを持つ<div>要素を準備します。
<div class="sample div-1">div-1</div> <div class="sample div-2">div-2</div> <div class="sample div-3">div-3</div> <div class="sample div-4">div-4</div> <div class="sample div-5">div-5</div>
: hidden
visibilityをhiddenにすると、非表示になります。クラス.div-2と.div-4に指定してみます。
<div class="sample div-1">div-1</div> <div class="sample div-2">div-2</div> <div class="sample div-3">div-3</div> <div class="sample div-4">div-4</div> <div class="sample div-5">div-5</div>
.div-2, .div-4 { visibility: hidden; }
visibility: hiddendisplay: noneとの違い
display: noneも要素を非表示にするために使います。
<div class="sample div-1">div-1</div> <div class="sample div-2">div-2</div> <div class="sample div-3">div-3</div> <div class="sample div-4">div-4</div> <div class="sample div-5">div-5</div>
.div-2, .div-4 { display: none; }
display: nonedisplay: noneとvisibility: hiddenの違いは要素を削除するか否かです。 display: noneの場合、要素は削除され存在していません。よって、表示していたエリアも無くなります。 一方、visibility: hiddenで非表示にした要素は存在しています。また、表示していたエリアも確保されたままです。
<div class="sample div-1">div-1</div> <div class="sample div-2">div-2</div> <div class="sample div-3">div-3</div> <div class="sample div-4">div-4</div> <div class="sample div-5">div-5</div>
.div-2 { display: none; } .div-4 { visibility: hidden; }
display: noneとvisibility: hiddenopacity: 0との違い
opacity: 0でも要素を非表示にすることができます。
<div class="sample div-1">div-1</div> <div class="sample div-2">div-2</div> <div class="sample div-3">div-3</div> <div class="sample div-4">div-4</div> <div class="sample div-5">div-5</div>
.div-2, .div-4 { opacity: 0; }
opacity: 0見た目はvisibility: hiddenと同じですが、opacity: 0の場合は.div-2が存在しているべき場所(.div-1と.div-3の間)からクリップボードに文字列(div-2)をコピーできます。一方、(visibility: hiddenを使っている).div-4からクリップボードにコピーすることはできません。
<div class="sample div-1">div-1</div> <div class="sample div-2">div-2</div> <div class="sample div-3">div-3</div> <div class="sample div-4">div-4</div> <div class="sample div-5">div-5</div>
.div-2 { opacity: 0; } .div-4 { visibility: hidden; }
opacity: 0opacity: 0だと色が透明になるだけで、要素はそのまま存在しています。
: collapse
visibility: collapseは<tr>、<col>、<thead>、<tbody>、<tfoot>、<colgroup>に対してのみ指定します。 ※ 他の要素に使った場合はvisibility: hiddenと同じ結果です。
<table>要素を準備します。
<table> <colgroup> <col class="col-a"> <col class="col-b"> <col class="col-c"> <col class="col-d"> </colgroup> <tr class="tr-1"> <td>1a</td><td>1b</td><td>1c</td><td>1d</td> </tr> <tr class="tr-2"> <td>2a</td><td>2b</td><td>2c</td><td>2d</td> </tr> <tr class="tr-3"> <td>3a</td><td>3b</td><td>3c</td><td>3d</td> </tr> </table>
| 1a | 1b | 1c | 1d |
| 2a | 2b | 2c | 2d |
| 3a | 3b | 3c | 3d |
(Firefoxなどの)一部のブラウザの場合、border-collapse: separateでないとvisibility: collapseが上手く表示されないようなので、border-collapse: separateを指定します。 ここでは罫線の間を詰めるためにborder-spacing: 0も指定しておきます。
<table> <colgroup> <col class="col-a"> <col class="col-b"> <col class="col-c"> <col class="col-d"> </colgroup> <tr class="tr-1"> <td>1a</td><td>1b</td><td>1c</td><td>1d</td> </tr> <tr class="tr-2"> <td>2a</td><td>2b</td><td>2c</td><td>2d</td> </tr> <tr class="tr-3"> <td>3a</td><td>3b</td><td>3c</td><td>3d</td> </tr> </table>
table { border-collapse: separate; /* <table>要素の罫線 */ border-spacing: 0; }
border-collapse: separate| 1a | 1b | 1c | 1d |
| 2a | 2b | 2c | 2d |
| 3a | 3b | 3c | 3d |
lightskyblueの背景色のセルを非表示にしてみます。
.tr-2クラスにvisibility: collapseを指定します。2行目が非表示になります。
<table> <colgroup> <col class="col-a"> <col class="col-b"> <col class="col-c"> <col class="col-d"> </colgroup> <tr class="tr-1"> <td>1a</td><td>1b</td><td>1c</td><td>1d</td> </tr> <tr class="tr-2"> <td>2a</td><td>2b</td><td>2c</td><td>2d</td> </tr> <tr class="tr-3"> <td>3a</td><td>3b</td><td>3c</td><td>3d</td> </tr> </table>
table { border-collapse: separate; /* <table>要素の罫線 */ border-spacing: 0; }
.tr-2 { visibility: collapse; }
.tr-2| 1a | 1b | 1c | 1d |
| 2a | 2b | 2c | 2d |
| 3a | 3b | 3c | 3d |
.col-cクラスにvisibility: collapseを指定すると3列目が非表示になります。
<table> <colgroup> <col class="col-a"> <col class="col-b"> <col class="col-c"> <col class="col-d"> </colgroup> <tr class="tr-1"> <td>1a</td><td>1b</td><td>1c</td><td>1d</td> </tr> <tr class="tr-2"> <td>2a</td><td>2b</td><td>2c</td><td>2d</td> </tr> <tr class="tr-3"> <td>3a</td><td>3b</td><td>3c</td><td>3d</td> </tr> </table>
table { border-collapse: separate; /* <table>要素の罫線 */ border-spacing: 0; }
.col-c { visibility: collapse; }
.col-c| 1a | 1b | 1c | 1d |
| 2a | 2b | 2c | 2d |
| 3a | 3b | 3c | 3d |
.tr-2クラスと.col-cクラスの両方にvisibility: collapseを指定するとlightskyblue色のセルが全て非表示になります。
<table> <colgroup> <col class="col-a"> <col class="col-b"> <col class="col-c"> <col class="col-d"> </colgroup> <tr class="tr-1"> <td>1a</td><td>1b</td><td>1c</td><td>1d</td> </tr> <tr class="tr-2"> <td>2a</td><td>2b</td><td>2c</td><td>2d</td> </tr> <tr class="tr-3"> <td>3a</td><td>3b</td><td>3c</td><td>3d</td> </tr> </table>
table { border-collapse: separate; /* <table>要素の罫線 */ border-spacing: 0; }
.tr-2, .col-c { visibility: collapse; }
.tr-2 .col-c| 1a | 1b | 1c | 1d |
| 2a | 2b | 2c | 2d |
| 3a | 3b | 3c | 3d |
display: noneを使ってみるvisibility: collapseの代わりにdisplay: noneを使うことができそうですが、<col>要素に対しては異なる結果になるようです。
<table> <colgroup> <col class="col-a"> <col class="col-b"> <col class="col-c"> <col class="col-d"> </colgroup> <tr class="tr-1"> <td>1a</td><td>1b</td><td>1c</td><td>1d</td> </tr> <tr class="tr-2"> <td>2a</td><td>2b</td><td>2c</td><td>2d</td> </tr> <tr class="tr-3"> <td>3a</td><td>3b</td><td>3c</td><td>3d</td> </tr> </table>
table { border-collapse: separate; /* <table>要素の罫線 */ border-spacing: 0; }
.col-c { visibility: collapse; }
visibility: collapse| 1a | 1b | 1c | 1d |
| 2a | 2b | 2c | 2d |
| 3a | 3b | 3c | 3d |
<table> <colgroup> <col class="col-a"> <col class="col-b"> <col class="col-c"> <col class="col-d"> </colgroup> <tr class="tr-1"> <td>1a</td><td>1b</td><td>1c</td><td>1d</td> </tr> <tr class="tr-2"> <td>2a</td><td>2b</td><td>2c</td><td>2d</td> </tr> <tr class="tr-3"> <td>3a</td><td>3b</td><td>3c</td><td>3d</td> </tr> </table>
table { border-collapse: separate; /* <table>要素の罫線 */ border-spacing: 0; }
.col-c { display: none; }
display: none| 1a | 1b | 1c | 1d |
| 2a | 2b | 2c | 2d |
| 3a | 3b | 3c | 3d |
<table>要素に対しては、display: noneではなくvisibility: collapseを使いましょう。