在IE中添加到flexbox的子节点的空间

时间:2016-01-28 23:06:22

标签: flexbox internet-explorer-11

在IE11中运行时,以下示例将在itemwrapper元素的底部添加空格。在开发控制台中检查时,此空间不会归因于边距,填充或边框。测量子元素的高度似乎是一个问题,因为如果给它们一个固定的高度,那么空间就会消失(点击"固定的高度元素")。错误的化合物基于自动调整大小的子元素的数量...越多,空间越大(单击"添加元素")

这在Chrome,Firefox或Edge中都不会发生......它仅限于IE11(我认为是IE10)。

这是一个记录在案的错误吗?有解决方法吗?



window.addelements = function(){
	$('<div class="item" style="height: auto;"><div>Account Name</div><div><input></div></div>').appendTo($('#itemwrapper'));
}
window.removeelements = function(){
	$('.item').last().detach();
}
window.autoelements = function(){
	$('.item').css('height', 'auto');
}
window.fixedelements = function(){
	$('.item').css('height', '50px');
}
&#13;
#flexwrapper {
  display: flex;
  flex-direction: column;
  flex:1 1 100px;
  justify-content:
  flex-start;
  border: 4px red solid;
}

#itemwrapper {
  border: 4px green dashed;
}

.item {
  border: 4px blue solid;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="addelements()">add elements</button>
<button onclick="removeelements()">remove elements</button>
<button onclick="autoelements()">auto height elements</button>
<button onclick="fixedelements()">fixed height elements</button>


<div id="flexwrapper">
    <div id="itemwrapper">
      <div class="item" style="height: auto;"><div>Account Name</div><div><input></div></div>
    </div>
</div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:8)

花了我几个小时(在this question的帮助下),但解决方法是在flexed元素的直接子项上设置overflow: hiddenoverflow: auto

这是一个丑陋的黑客攻击(因为你可能有绝对定位的元素应该在容器外部渲染),但对于我的场景,它似乎工作正常。我无法找到其他解决方案,所以我很乐意看到另一个答案。

以下是内置解决方案的示例:

&#13;
&#13;
window.addelements = function(){
	$('<div class="item" style="height: auto;"><div>Account Name</div><div><input></div></div>').appendTo($('#itemwrapper'));
}
window.removeelements = function(){
	$('.item').last().detach();
}
window.autoelements = function(){
	$('.item').css('height', 'auto');
}
window.fixedelements = function(){
	$('.item').css('height', '50px');
}
window.nooverflow = function(){
	$('#itemwrapper').css('overflow', 'hidden');
}
window.overflow = function(){
	$('#itemwrapper').css('overflow', 'inherit');
}
&#13;
#flexwrapper {
  display: flex;
  flex-direction: column;
  flex:1 1 100px;
  justify-content:
  flex-start;
  border: 4px red solid;
}

#itemwrapper {
  border: 4px green dashed;
}

.item {
  border: 4px blue solid;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="addelements()">add elements</button>
<button onclick="removeelements()">remove elements</button>
<button onclick="autoelements()">auto height elements</button>
<button onclick="fixedelements()">fixed height elements</button>
<button onclick="nooverflow()">overflow hidden</button>
<button onclick="overflow()">overflow visible</button>

<div id="flexwrapper">
    <div id="itemwrapper">
      <div class="item" style="height: auto;"><div>Account Name</div><div><input></div></div>
    </div>
</div>
&#13;
&#13;
&#13;