【发布时间】:2016-10-05 01:49:19
【问题描述】:
在使用JQuery的淡入功能时,如果一个元素以'display: none'开头然后淡出,JQuery会在该项目淡入时注入'display: block'。
在 flexbox 布局中,这会导致元素换行到下一行。
当我在父级上禁用 display:flex 时,它的行为符合预期。
有没有办法在最初需要隐藏的特定元素上禁用display:flex?
我可以通过使用来克服这个问题:
$('el').fadeIn().css('display','inline-block');
但这种方法在这种情况下是不可取的。有什么建议吗?
这是一个演示
$('#clickme').click(function() {
$('#test').fadeToggle();
return false;
});
#flex {
display: flex; /* BREAKS JQUERY FADE, JQUERY INJECTS DISPLAY:BLOCK; */
flex-direction: column;
}
#main {
flex: 1;
}
.hidden {
display: none;
}
<script type="text/javascript" src="//code.jquery.com/jquery-3.1.1.min.js"></script>
<body id="flex">
<div id="main">
<span class="tools">
<a class="a" href="" id="clickme">Click Me</a>
<span id="test" class="hidden">I should be inline!</span>
</span>
</div>
</body>
如果您在 #flex 上禁用 display:flex,它会按预期/预期工作。
【问题讨论】:
-
这里的演示可能有用
-
我认为使用 Jquery 的 "fade" 在本机上是不可能的。没有应该应用的“display:flex-item”。不幸的是,您可能必须在这里编写自己的函数。
-
@Paulie_D 但他的
<span>元素与id测试不是弹性项目,我仍然想知道为什么它添加display: block;而不是内联。将 flex 应用于他的工具 span 现在将使#test成为 flex-item,这就是您的解决方案有效的原因。 -
我不建议在您的
<body>标签中使用display: flex;。这可能是您可能遇到的众多问题之一,并且没有必要将 flexbox 用于二维布局。