CSSの規則visibility:hidden
とdisplay:none
はどちらも要素が表示されないという結果になります。これらの同義語はありますか?
display:none
は、問題のタグがページにまったく表示されないことを意味します(ただし、domを介してタグと対話することはできますが)。他のタグの間にはスペースが割り当てられません。
visibility:hidden
は、display:none
とは異なり、タグは表示されませんが、ページにはスペースが割り当てられることを意味します。タグはレンダリングされ、ページには表示されません。
例えば:
test | <span style="[style-tag-value]">Appropriate style in this tag</span> | test
[style-tag-value]
をdisplay:none
に置き換えると、次のようになります。
test | | test
[style-tag-value]
をvisibility:hidden
に置き換えると、次のようになります。
test | | test
同義語ではありません。
display:none
は、ページの通常のフローから要素を削除し、他の要素が埋められるようにします。
visibility:hidden
は、まだスペースを占有するように、ページの通常のフローに要素を残します。
あなたがアミューズメントパークに乗るために列に並んでいて、列の誰かがとても乱暴になってセキュリティがそれらを線から追い出すと想像してください。それから一列に並んだ全員が1つ前のポジションに移動して、今は空のスロットを埋めます。これはdisplay:none
のようなものです。
これと同様の状況とは対照的ですが、目の前の誰かが目に見えないマントを着ています。ラインを見ている間、それは空のスペースがあるように見えますが、誰かがまだそこにいるので人々は本当にその空のように見えるスペースを埋めることができません。これはvisibility:hidden
のようなものです。
追加される価値があることは、尋ねられませんでしたが、オブジェクトを完全に透明にするという3番目のオプションがあるということです。検討してください:
1st <a href="http://example.com" style="display: none;">unseen</a> link.<br />
2nd <a href="http://example.com" style="visibility: hidden;">unseen</a> link.<br />
3rd <a href="http://example.com" style="opacity: 0;">unseen</a> link.
この場合あなたは得る:
1st link.
2nd link.
3rd link.
1と2の違いはすでに指摘されています(つまり、2はまだスペースを占有します)。ただし、2と3の間には違いがあります。ケース3では、リンク上にマウスを移動するとマウスが手の形に変わり、ユーザーはリンクをクリックできます。Javascriptイベントはリンク上で発生します。これは通常notあなたが望む振る舞いです。テキストを選択するときの動作はブラウザによっても異なります。
display:none
はレイアウトフローから要素を削除します。
visibility:hidden
はそれを隠しますがスペースを残します。
子ノードになると大きな違いがあります。たとえば、親divと入れ子になった子divがあるとします。あなたがこのように書くならば:
<div id="parent" style="display:none;">
<div id="child" style="display:block;"></div>
</div>
この場合、divはどれも表示されません。しかし、あなたがこのように書くならば:
<div id="parent" style="visibility:hidden;">
<div id="child" style="visibility:visible;"></div>
</div>
そうすると子のdivが表示され、親のdivは表示されません。
それらは同義語ではありません - display: none
はページのフローから要素を削除し、残りのページは存在しないかのようにフローします。
visibility: hidden
は、要素をビューから隠しますが、ページフローは隠しません。そのため、ページ上にスペースが残ります。
display: none
はページから要素を完全に削除し、要素がまったく存在しないかのようにページが構築されます。
表示されなくなっても、Visibility: hidden
はドキュメントフロー内のスペースを残します。
これはあなたがしていることに応じて大きな違いを生むかもしれません。
visibility:hidden
を使用しても、オブジェクトはページの垂直方向の高さを引き継ぎます。 display:none
でそれは完全に削除されます。画像の下にテキストがあり、display:none
をすると、そのテキストは画像があった場所のスペースを埋めるように上に移動します。あなたが可視性をするならば:隠されたテキストは同じ場所に残るでしょう。
display:none
は要素を非表示にし、スペースを占有していたスペースを折りたたみますが、visibility:hidden
は要素を非表示にして要素スペースを保持します。 display:noneは、古いバージョンのIEおよびSafariのjavascriptから利用できるいくつかのプロパティにも影響します。
他のすべての答えに加えて、IE8には重要な違いがあります。display:none
を使用して要素の幅または高さを取得しようとすると、IE8は0を返します(他のブラウザは実際のサイズを返します)。 IE8はvisibility:hidden
に対してのみ正しい幅または高さを返します。
visibility:hidden
はスペースを確保します。 display:none
は違います。
display: none;
それはページ上で利用可能にならず、スペースを占有しません。
visibility: hidden;
それは要素を隠しますが、それでも以前と同じスペースを占有します。要素は非表示になりますが、それでもレイアウトに影響します。
visibility: hidden
はスペースを保存しますが、display: none
はスペースを保存しません。
表示なし例: https://www.w3schools.com/css/tryit.asp?filename=trycss_display_none
非表示の表示例: https://www.w3schools.com/cssref/tryit.asp?filename=trycss_visibility
Visibilityプロパティが"hidden"
に設定されている場合、たとえ見えなくてもブラウザはコンテンツのためにページ上のスペースを取ります。
しかし、オブジェクトを"display:none"
に設定すると、ブラウザはそのコンテンツのためにページ上のスペースを割り当てません。
例:
<div style="display:none">
Content not display on screen and even space not taken.
</div>
<div style="visibility:hidden">
Content not display on screen but it will take space on screen.
</div>
visibility:hidden
は要素をページ内に保持し、そのスペースを占有しますが、ユーザーには表示されません。
display:none
はページ内では使用できず、スペースを占有しません。
もう1つの違いは、visibility:hidden
は実際には本当に古いブラウザでも機能しますが、display:none
は機能しないことです。
違いはスタイルを超えており、JavaScriptで操作されたときの要素の動作に反映されます。
display: none
の効果と副作用:
clientWidth
、clientHeight
、offsetWidth
、offsetHeight
、scrollWidth
、scrollHeight
、getBoundingClientRect()
、getComputedStyle()
、すべては0
sを返します。visibility: hidden
の効果と副作用:
innerText
(innerHTML
は除く)は空の文字列を返します。display:none;
は要素を表示せず、ページ上の要素にスペースを割り当てませんが、visibility:hidden;
はページに要素を表示しませんがページにスペースを割り当てます。どちらの場合もDOMの要素にアクセスできます。よりよく理解するために、次のコードを見てください。 表示:なしvs表示:非表示