CSSのvisibilityで要素を非表示にする方法とdisplay:noneとの違い

こんにちは!ライターのナナミです。

ちょっと訳あって、要素を一旦非表示にしたい…

WEBサイトを作っていると、たまにそういう場面があったりしますよね。

今回は要素を非表示にしたい時に使える、visibilityについてまとめました!

この記事は下記の流れで進めていきます。

【基礎】visibilityとは何か
【基礎】visibilityの使い方
【発展】display:noneとの違い
【発展】visibilityの実用例

一見地味な要素の非表示ですが、使えるとちょっとした場面で大活躍してくれます。
ちょっと似ているdisplay:noneとの違いも含め、しっかり覚えていきましょう!

visibilityとは?

visibilityは、要素の表示非表示を切り替えることができるプロパティです。

visibility1

HTML

  1. <div class="visibility_test">
  2. この要素は表示されています
  3. </div>
  4. <div class="visibility_test2">
  5. この要素は非表示になっています
  6. </div>

visibilityはHTMLに影響しない

visibilityでの要素の表示非表示は画面上だけのものであり、HTMLへは影響しません

なので、HTML上には残したいけれど、画面には表示させたくないという時に便利なプロパティです。

visibilityの対応ブラウザ

visibilityはオールドブラウザも含めて、どのブラウザでも問題なく動作します
安心してガンガン使っちゃいましょう。

visibilityの使い方

visibilityの指定方法は超簡単。
表示非表示を切り替えたい要素に、各値を入れて記述するだけです。

CSS

  1. セレクタ{
  2. /* 表示する */
  3. visibility:visible;
  4.  
  5. /* 非表示にする */
  6. visibility:hidden;
  7.  
  8. /* テーブル用 */
  9. visibility:collapse;
  10. }

それぞれの指定について、細かく見ていきましょう!

visibility:visible

まずは基本、要素を表示状態にするvisibility:visibleです。

要素にvisibilityに何も指定していない場合、普通に表示されますよね。
つまりvisibility:visibleになっている状態と同じです。

visibility2

HTML

  1. <div class="visibility_test">
  2. この要素は表示されています
  3. </div>
  4. <div class="visibility_test2">
  5. この要素も表示されています
  6. </div>

CSS

  1. .visibility_test {
  2. height: 300px;
  3. background-color: #ccc;
  4. width: 300px;
  5. padding: 10px;
  6. box-sizing: border-box;
  7. display: inline-block;
  8. vertical-align: top;
  9. }
  10. .visibility_test2 {
  11. height: 300px;
  12. background-color: #aaa;
  13. width: 300px;
  14. padding: 10px;
  15. box-sizing: border-box;
  16. display: inline-block;
  17. visibility: visible;
  18. }

両方ともきちんと表示されていますね。

visibility:hidden

ここからがvisibilityのキモ。
要素を非表示にするvisibility:hiddenです。

要素にvisibility:hiddenをつけると、HTMLソースはそのままに、画面上は非表示になります。
存在を消すというより、透明にするというイメージが近いですね。

visibility1

HTML

  1. <div class="visibility_test">
  2. この要素は表示されています
  3. </div>
  4. <div class="visibility_test2">
  5. この要素は非表示になっています
  6. </div>

CSS

  1. .visibility_test {
  2. height: 300px;
  3. background-color: #ccc;
  4. width: 300px;
  5. padding: 10px;
  6. box-sizing: border-box;
  7. display: inline-block;
  8. vertical-align: top;
  9. }
  10. .visibility_test2 {
  11. height: 300px;
  12. background-color: #aaa;
  13. width: 300px;
  14. padding: 10px;
  15. box-sizing: border-box;
  16. display: inline-block;
  17. visibility: hidden;
  18. }

visibility:collapse

ちょっと変わり種、テーブル要素に使えるvisibility:collapseです。

テーブル要素の行、または列に指定すると、指定した部分を非表示にします。
さらに、非表示にした部分はそのまま残らず、キュッと詰めた状態にしてくれます

visibility3

HTML

  1. <table class="visibility_test-table">
  2. <tbody>
  3. <tr>
  4. <th>見出し</th>
  5. <td>内容が入ります。内容が入ります</td>
  6. </tr>
  7. <tr>
  8. <th>見出し</th>
  9. <td>内容が入ります。下の内容は表示されません</td>
  10. </tr>
  11. <tr class="visibility_test">
  12. <th>見出し</th>
  13. <td>内容が入ります。この内容は表示されません</td>
  14. </tr>
  15. <tr>
  16. <th>見出し</th>
  17. <td>内容が入ります。内容が入ります</td>
  18. </tr>
  19. </tbody>
  20. </table>

CSS

  1. .visibility_test-table tr:nth-child(odd) {
  2. background-color: #ccc;
  3. }
  4. .visibility_test {
  5. visibility: collapse;
  6. }

エクセルの非表示モードみたいな感じですね。
一旦は公開したくない情報がある時なんかに便利です。

display:noneとvisibility:hiddenの違い

要素を非表示にするのってdisplay:noneでもできるよね?

と思ったそこのあなた、その通りです。

display:noneはvisibility:hiddenと同じく、要素を非表示にする指定です。

ただ、見栄えに大きな違いがあります。

visibility4

HTML

  1. display:noneで非表示
  2. <div class="visibility_test-wrap">
  3. <div class="visibility_test">
  4. displayで真ん中の要素を非表示にします
  5. </div>
  6. <div class="visibility_test display_none">
  7. この要素を非表示にします
  8. </div>
  9. <div class="visibility_test">
  10. displayで真ん中の要素を非表示にします
  11. </div>
  12. </div>
  13.  
  14. visibility:hidden
  15. <div class="visibility_test-wrap">
  16. <div class="visibility_test">
  17. visibilityで真ん中の要素を非表示にします
  18. </div>
  19. <div class="visibility_test visibility_hidden">
  20. この要素を非表示にします
  21. </div>
  22. <div class="visibility_test">
  23. visibilityで真ん中の要素を非表示にします
  24. </div>
  25. </div>

CSS

  1. .visibility_test {
  2. height: 220px;
  3. background-color: #ccc;
  4. width: 220px;
  5. padding: 10px;
  6. box-sizing: border-box;
  7. display: inline-block;
  8. vertical-align: top;
  9. }
  10.  
  11. .visibility_test-wrap {
  12. margin-bottom: 30px;
  13. }
  14.  

それぞれ真ん中の要素を非表示にしてみましょう。

visibility5

CSS

  1. .display_none {
  2. display: none;
  3. }
  4.  
  5. .visibility_hidden {
  6. visibility: hidden;
  7. }

上の要素はdisplay:none、下の要素はvisibility:hiddenで非表示にしました。

display:noneは消した分要素が詰まっていますね。
対してvisibility:hiddenは、元の要素の幅がそのまま残った状態になっています

display:noneは表示を削除、visibility:hiddenは表示を透明にする、というイメージが近いでしょう。

どちらが向いているのかはその時次第です。
要素を残しておきたいかどうかをポイントに選ぶようにしましょう!

visibilityの実用例

visibilityを使うようなタイミングは、ほとんどが一時的な非表示だと思います。
例としてどんな時に使えるのかを挙げてみたので、参考にしてみてください。

要素を一旦非表示に

visibility-ex1

HTML

  1. 今は530日です。<br>
  2. あなたの誕生日は820日ですね。
  3. <div class="visibility_test">
  4. 誕生日おめでとう!
  5. </div>

CSS

  1. .visibility_test {
  2. visibility: hidden;
  3. }

まずはオーソドックスに、まだ公開したくない情報を非表示にしてみました。
jQueryなどを組み合わせて、公開したいタイミングになったら表示!なんてこともできますね。

マウスオーバーで表示されるアイコン

visibility-ex2

HTML

  1. <div class="visibility_test">
  2. <img class="visibility_test2" src="test-icon.png" alt="">
  3. </div>

CSS

  1. .visibility_test {
  2. display: inline-block;
  3. }
  4.  
  5. .visibility_test:hover .visibility_test2{
  6. visibility: visible;
  7. }
  8.  
  9. .visibility_test2 {
  10. visibility: hidden;
  11. cursor: pointer;
  12. }

何もないところからアイコンが!
こんな感じで、ちょっとお茶目な仕掛けを作ることもできます。

visibility: hidden;になっている要素は:hoverでマウスオーバーの状態を取れないので、親要素を判定ポイントにしています。

アニメーションと組み合わせてバグ防止

visibility-ex-3

HTML

  1. <div class="visibility_test">
  2. 下からふわっと表示します
  3. </div>
  4. <div class="visibility_test2">
  5. 同時にふわっと表示します
  6. </div>

CSS

  1. .visibility_test {
  2. text-align: center;
  3. font-size: 30px;
  4. padding: 30px 0;
  5. position: relative;
  6. animation: anime1 1s;
  7. }
  8.  
  9. .visibility_test2 {
  10. text-align: center;
  11. font-size: 18px;
  12. position: relative;
  13. animation: anime1 1s;
  14. }
  15.  
  16. @keyframes anime1 {
  17. 0% {
  18. top: 30px;
  19. opacity: 0;
  20. visibility: hidden;
  21. }
  22.  
  23. 100% {
  24. top: 0;
  25. opacity: 1;
  26. visibility: visible;
  27. }
  28. }

アニメーションの前に表示非表示を切り替えることで、読み込み時にちらっと画像などが表示されるのを防いでみました。

ちょっと渋い使い方ですが、地味に便利です。

まとめ

いかがでしたか?
要素の表示非表示、あまり出番はないかもしれませんが、知っておくとタメになるプロパティです。

display:noneとうまく使い分けて、どんどん活用していってくださいね!

Writer

ナナミ

株式会社SAMURAI

1991年生まれ。
文系大学卒業後、フリーターを経てフロントエンジニアになる。
HTML、CSS、 jQueryなどのコーディングやCMS設計に従事。
文系からエンジニアを目指す人にもわかりやすい記事を目指して、日々精進中。
体は日本酒でできている。

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI ENGINEER Plus

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close
undefined