2017-01-31 8 views
0

要素をdisplay:noneに設定して最初に非表示にする方法はありますか?また、JavaScriptで後でその要素が表示されるときは、display:flexと表示されますか?ディスプレイを設定する:ディスプレイのデフォルトとしてflex:cssの要素なし?

例CSS

#Container{ 
    display:flex; 
    display:none;  
} 

例jQueryの

$('#Container').show(); 

目的の動作:これはハードコーディングJavaScriptでflexの値をことなくdisplay:flexとして要素を示しています。

注:jQueryのCSSメソッドを使用して、要素をdisplay:flexに設定することができます。ただし、機能をプレゼンテーションから分離すること、要素がフレックスかブロックかインラインかはJavaScriptコードのビジネスではないことを目標としています。 JavaScriptの仕事は単にページの表示や非表示、ページの表示方法の変更ではありません。

また、私はdisplay:none要素やショーでdisplay:flex要素をラップし、外側のラッパーを隠すことができることを知っています。しかし、私はすべてのペインの周りに余分なdivを追加することなく、これを達成する巧妙な方法があるかどうかを知りたいと思っています。最も柔軟なオプションの

+2

要素を非表示にするために別のクラスを使用できますか?その後、JSで隠れているクラスを削除すると、オリジナルのCSSからflexが終了しますか? – Sami

+0

samiが言っているように、 'addClass()'/'removeClass()'を使ってもよいでしょう。 –

+0

これは私が今やっていることですが、2017年以降は期待していました。それを隠すことによって隠れていない要素のデフォルトの表示タイプを設定する巧妙な方法があります。 – Nick

答えて

3

一つのいくつかのユーティリティクラスを作成することです:

その後
.hidden{ display: none; } 
.flex{ display: flex; } 

$('#Container').addClass('flex'); 
+0

要素をデフォルトで隠すためには、HTML内のすべての要素に 'hidden'クラスを追加する必要があります。すべてのペインに新しい 'hidden 'クラスを追加するよりも' .panes {display:none;}'を行う方がはるかにクリーンです – Nick

+0

あなたの心が望むところは何でもできますが、これは単なる例です。 –

+1

'.hidden'ユーティリティクラスを' display:none!improtant; 'に拡張すると、常に' .flex'クラスをその要素に残して、javascriptに '.hidden'を追加して削除することができます。 – stevendesu

1

それを行うための最善の方法は、単に要素にクラスを追加することですshow()の代わりにそして、このクラスはdisplay: flexのプロパティがあります。

$('div').addClass('flex');
div { 
 
    display: none; 
 
    width: 100px; 
 
    height: 100px; 
 
    background: red; 
 
} 
 
div.flex { 
 
    display: flex; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div></div>

をしかし、あなたはshow()を使用したい場合は、このような何か行うことができます。

$('div').show();
div { 
 
    display: none; 
 
    width: 100px; 
 
    height: 100px; 
 
    background: red; 
 
} 
 
div[style*="display: block"] { 
 
    display: flex !important; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div></div>

show()を使用してdivでdivをdisplay blockに設定するので、div[style*=display: block]を使用すると、style属性にdisplay: blockが含まれているdivが選択されます。次に、display: flex !importantを追加して上書きします。

+0

'div [style * =" block "]'構文がどのように機能するか説明できますか?それともドキュメントがありますか?私はそれが "ブロック"のスタイルを持っていて何かを取ってそれにルールを適用する "という意味だと思いますが、' * 'は何のためですか?どうして 'div [display =" block "]'? – Nick

+0

'div [style =" block "'はスタイル=ブロックを持つdivのみを選択するためです。 '* ='を指定すると、どのスタイルに "block"が含まれているかを選択します。 – TheYaXxE

+0

'*'を指定せずにそれを行うには、 'div [style =" display:block; "]'という完全なスタイルを記述する必要があります。 – TheYaXxE

関連する問題