2017-01-31 100 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