CSSでDOMを非表示にするパターン比較的なやつ
JavaScript書いていると、「DOMを非表示にしておいて、特定条件で表示する」みたいなのってよく書きます。
一個一個は単純でも、複数になるとそこそこ面倒。。。
今回は、この非表示にする方法にフォーカスしてみるやつです。
なんでもかんでもdisplay: none;
使ってない!?ちょっと考えて使おうね!が趣旨。
CSSで非表示する方法
以下の3つ。
- display: none;
- visibility: hidden;
- opacity: 0;
display:none
はおなじみですね。
他は?opacity
はなんとなく使ったことあるけど、visibility
ってあまり馴染みないような。
だけど、意外と使い分けが大事な場面もあったり。
それぞれ違いを見ていきます。
違いは?
単純な違い
まずdisplay:none
。
display:noneのデモ
触ってもらえば分かると思いますが、DOMが消えて、「高さ」なども消滅しています。
次にvisibility: hidden
。
visibility: hiddenのデモ
display:none
と違って、表示は消えても「高さ」などは残っていることが分かります。
最後にopacity:0
。
opacity: 0のデモ
これも表示は消えて、「高さ」などは残ることが分かります。
ここまでで分かるのは、がっつり消してしまいたいならdisplay: none
。
高さとか残しときたいならvisibility: hidden
かopacity: 0
ってな具合でしょう。
これだけなら好みでどうぞ!って感じなんですが、そんなわけないです。
イベント発火
次にそれぞれにイベントを付与してみます。
toggleを押す前、押した後で、clickしてみると違いが浮き彫りに。
display: none
はそもそも何もないので、イベントはおきない。
visibility: hidden
も同じくイベントはおきない。
opacity: 0
だけはイベントが発生。
opacityは透過度を指定しているだけなので、実態はそこにある状態。
なのでイベントも効いてきますね(考えてみたら当然)。
対象にイベントが付与されている場合は、display:none
か、visibility:hidden
。
一昔前の隠しリンク的なのがやりたいならopacity:0
ですね。
DOMの取得とか
まずGetSizeして、toggleしてGetSizeしてみると分かると思いますが。
display: none
だとサイズもポジションも取れないので、DOMのポジション使って何かするような処理書いてる場合は注意です。
例えば、対象要素の真下にドロップダウンリスト出すーとか、そんなパターンのやつ。
意外と
サンプル書いて、こうやって並べてみると当たり前に思えるけど、実際ハマることがあるので、
何が適切か考えながら使おうねって話でした。