ページのスペースを取らずに要素を非表示にする方法は?


228

visibility:hidden特定の要素を非表示にするために使用していますが、非表示になっている間もページ上のスペースを占有します。

それらがまったくDOMにないかのように(ただし、実際にDOMから削除せずに)、それらを視覚的に完全に非表示にするにはどうすればよいですか?


この質問は非常に死んでいますが、最近、他の人が経験する可能性のある状況に気づいたので、コメントを追加します。私は、要素を非表示にするために必要な、それはそのを保持持っているoffsetTop、とdisplay:none設定しますoffsetTop使用していたここに私の解決策を0にvisibility: hidden、私は再び要素が見えるようにする必要いったん0に幅と高さを設定し、その後、私が使用して3つの属性を削除しましたJavaScript。少しハッキーなソリューションですが、ほとんどすべてのユースケースでうまく機能します。
ラップトップ

回答:


302

display:none非表示に設定し、表示に設定してみてくださいdisplay:block


ドムマンから要素を削除することはできません。このオプションも使用します。質問を読む
プラナイラナ

26
すべての項目があるべきではないdisplay: block、いくつかに設定する必要がありますdisplay: inline(たとえば、<span>または<a>または<img>DOMエレメント)。
マウロ

2
@pranay質問では、それらを非表示にしてDOMから削除しないようにしています。
マウロ

6
@pranay:質問はあまりよく表現されていませんが、Huusomはユーザーが抱えている問題を解決しています。
Claudio Redi、

1
改善点:で呼び出されるCSSクラスを作成hiddendisplay: noneます。クラスを要素に追加して非表示にし、削除して表示します。削除すると、displayプロパティは要素のデフォルトに復元されます。
Alejandro C De Baca

44

代わりにスタイルを使用

<div style="display:none;"></div>

1
残念ながら、これは私には機能しません-display:noneを使用しても、まだ空白スペースが残っています。
mbuc91

15

使用することdisplay:noneは、要素を削除するだけの良いオプションですが、スクリーンリーダーからも削除されます。それがSEOに影響を与えるかどうかについても議論があります。A List Apartには、そのトピックに関する優れた短い記事があります。

要素を非表示にしたいだけで削除したくない場合は、次のように使用してください:

div {
  position: absolute; 
  left: -999em;
}

このように、スクリーンリーダーで読むこともできます。

この方法の唯一の欠点は、このDIVが実際にレンダリングされ、特に携帯電話でパフォーマンスに影響する可能性があることです。


2
あなたがほとんどの場合に実行できる絶対的なものを配置することを選択した場合visibility: hidden;、あなたが他の絶対的な要素を持っているとしましょうz-index。私が一緒に行く要素を隠すためだけにvisibility
Dejan.S '24

10

visibility: hidden;use を使用する代わりに、見てくださいdisplay: none;。最初のオプションは非表示にしますが、まだスペースをとり、目のオプションは非表示になりますとしない任意のスペースを取ります。


6

この質問への答えは、display:noneとdisplay:blockを使用することですが、これは、cssトランジションを使用して、visibilityプロパティを使用してコンテンツを表示および非表示にしようとしているユーザーには役立ちません。

displayを使用するとcssの遷移がすべて強制終了されるため、これも私を狂わせました。

1つの解決策は、可視性を使用しているクラスにこれを追加することです。

overflow:hidden

これが機能するかどうかはレイアウトに依存しますが、常駐するdiv内に空のコンテンツを保持する必要があります。


3
visibility:hiddenおよびvisibility:visibleを使用して要素の位置を設定すると、問題は発生しません。これは魔法のようなものです
John Balvin Arias

6

表示:どれも解決策ではありません、それはそのスペースで要素を完全に隠します。

display:nonevisibility: hidden

visibility:hidden タグは表示されませんが、ページ上にタグが割り当てられます。

display:none要素をそのスペースで完全に隠すことを意味します。(ただし、DOMを使用して操作することはできます)


3

display:none非表示にして表示するように設定display:blockします。


1
「DOMにないかのように」視覚的に削除することを求めます。実際のDOMからそれらを削除することについてではありません。
Arve Systad 2010年

質問では、それらをDOMから削除しないで、それらを非表示にしないようにしています。as though they are not in the DOM at all (but without actually removing them from the DOM)
マウロ

@pranay:visibility: hiddenコンテンツの表示を停止するだけで、垂直/水平スペースを使用します。display:noneは、要素の垂直/水平スペースを削除します。
マウロ

いいえ、ありません。可視性:非表示; 要素を非表示にしますが、それでもスペースを占有します。表示:なし。ドキュメントが存在しないかのように動作します。
Olly Hodgson、

1
この回答を削除してください。
BalusC 2010年

3

切り替えでdisplayは、CSSをスムーズに移行できません。代わりに、visibilityとの両方を切り替えますmax-height

visibility: hidden;
max-height: 0;

これは、アニメーションを操作するときに役立ちます。のようなものを使用して、可視領域外の要素を非表示にしているためtransform: translateX(-100%)です。望まないdisplay: none
zhuhang.jasper

2

ここに、display:noneの後にそれらを戻す別の方法があります。display:block / inlineなどを使用しないでください。代わりに(JavaScriptを使用している場合)cssプロパティの表示を ''(つまり、空白)に設定します


1
$('#abc').css({"display":"none"});

これによりコンテンツが非表示になり、空のスペースも残りません。


1

私の知識以上に、それは4つの方法で可能です

  1. HTML<button style="display:none;"></button>
  2. CSS #buttonId{ display:none; }
  3. jQuery $('#buttonId').prop('display':'none');$("#buttonId").css('opacity', 0);

1

display:noneは、ページの空白スペースを避けるための最良の方法です


2
他の答えの単なる繰り返しのようです。
パン

0

!important既存のCSSスタイルをオーバーライドする必要がある場合に使用します。

display: none !important;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.