要素を非表示にする方法であるdisplay: none
, visibility: hidden
, opacity: 0
の違いについて具体例つきで紹介します。
目次
領域確保 | イベント(click, hoverなど)発行 | |
---|---|---|
display: none | 無 | 無 |
visibility: hidden | 有 | 無 |
opacity: 0 | 有 | 有 |
検証用サンプルコード
挙動を確認するサンプルコードは以下の通りです。
各ブロックにはcursor: pointer
が適用されており、マウスオーバーでカーソルはポインタに変更します。
<div class="container">
<div class="item other"></div>
<div class="item display">display: block</div>
<div class="item visibility">visibility: visible</div>
<div class="item opacity">opacity: 1</div>
<div class="item other"></div>
</div>
.container {
display: flex;
}
.item {
width: 130px;
height: 80px;
cursor: pointer;
}
.item:not(:last-child) {
margin-right: 10px;
}
.display {
display: block;
background: lightgreen;
}
.visibility {
visibility: visible;
background: lightblue;
}
.opacity {
opacity: 1;
background: pink;
}
.other {
background: black;
}
See the Pen
Untitled by Toshiharu Nishina (@nishina555)
on CodePen.
『display: none』について
display
は要素の表示形式を変更するプロパティです。
display: none
を適用すると要素の横幅や高さがなくなります。
要素の存在をレイアウトから完全に消したい場合はdisplay: none
を利用します。
display: block
をdisplay: none
にした際の変化の違いは以下の通りです。
See the Pen
Untitled by Toshiharu Nishina (@nishina555)
on CodePen.
See the Pen
display-visibility-opacity-none by Toshiharu Nishina (@nishina555)
on CodePen.
visibility
は要素の表示・非表示を制御するプロパティです。
visibility: hidden
はdisplay: none
と違い、画面から消えたあとも要素の領域は残り続けます。
つまり、visibility: hidden
を利用することで『要素は存在するが見えない状態』を実現できます。
要素の領域を残して非表示にしたい場合はvisibility: hidden
を利用します。
visibility: visible
をvisibility: hidden
にした際の変化の違いは以下の通りです。
See the Pen
Untitled by Toshiharu Nishina (@nishina555)
on CodePen.
See the Pen
display-visibility-opacity-hidden by Toshiharu Nishina (@nishina555)
on CodePen.
『opacity: 0』について
opacity
は不透明度を表現するプロパティで、0から1の値を設定できます。
opacity: 0
を適用した要素は透明、つまり画面から見えなくなります。
visibility: hidden
と同じく要素の領域は残り続けます。しかしvisibility: hidden
と違いopacity: 0
ではイベントが発行されます。
opacity: 0
は『徐々に消えていく(あるいは見えてくる)』というアニメーションをtransition
プロパティを利用して実装する際によく利用されます。
その際、visibility: hidden
を組み合わせることで『アニメーションで非表示になった要素のイベント発行をなくす』ということが実現できます。
opacity: 1
をopacity: 0
にした際の変化の違いは以下の通りです。opacity: 0
の場合、マウスオーバーでポインタに変化する挙動は継続します。
See the Pen
Untitled by Toshiharu Nishina (@nishina555)
on CodePen.
See the Pen
display-visibility-opacity-zero by Toshiharu Nishina (@nishina555)
on CodePen.
さいごに
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!