2017-01-31 69 views
0

有什麼方法可以將元素設置爲display:none以初始隱藏它,並且還指定當元素稍後由JavaScript顯示時,它將顯示爲display:flex設置顯示器:flex是默認的display:none元素在css中?

例CSS

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

實施例的jQuery

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

期望的行爲:這顯示沒有硬編碼在JavaScript中的flex值的元素作爲display:flex

注:我很清楚,我可以簡單地使用jQuery的CSS方法將元素設置爲display:flex。但是,目標是將功能與演示分開,並且元素是否爲flex或block或inline不是JavaScript代碼的業務。 JavaScript的工作就是顯示或隱藏它,而不是改變頁面的顯示方式。

我也知道我可以將display:flex元素包裝在display:none元素中,並顯示和隱藏外層包裝。但我很想知道是否有一個聰明的方法來實現這一點,而不是在每個窗格周圍添加額外的div。

+2

你可以使用另一個類來隱藏元素嗎?然後,只需刪除JS的隱藏類,你最終從原來的CSS彈性? – Sami

+0

as sami says,use use addClass()'/'removeClass()'這也是一個好習慣 –

+0

這就是我現在正在做的,但我希望自2017年以來,我們有柔性盒和網絡套接字,我們可能有一些聰明的方法來設置一個默認的顯示類型,通過隱藏它不會被破壞。 – Nick

回答

3

其中最靈活的選擇是創建一些工具類:

.hidden{ display: none; } 
.flex{ display: flex; } 

然後:

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

爲了在默認情況下隱藏元素,你必須在HTML中爲它們中的每一個添加hidden類。做'.panes {display:none;}'要比爲每個窗格添加一個新的'hidden'類更清潔 – Nick

+0

你可以做任何你想做的事情,這只是一個例子。 –

+1

我將'.hidden'工具類擴展爲'display:none!improtant;',然後您可以隨時將'.flex'類放在元素上,只需添加和刪除'.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」'只選擇style = block的div。用'* ='選擇包含「塊」的div的樣式 – TheYaXxE

+0

如果你不想用'*'來做,你必須編寫完整的樣式:'div [style =「display:block;」]''。 – TheYaXxE