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: hidden
display: 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: none
display: 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: hidden
opacity: 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: 0
opacity: 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
を使いましょう。