当前位置: 首页 > 面试题库 >

IE11中的multiline-flexbox错误地计算宽度?

哈泰
2023-03-14
问题内容

如果flex-wrap: wrap使用IE11,似乎无法正确计算弹性项目宽度。

4个盒子每个都有flex-basis:50%,所以我们应该得到两行,每个盒子两个,但是在IE11中,每个盒子只有一行。将边框设置为0时,它可以正常工作。

知道这是一个错误还是有办法使IE11表现出来(并且仍然使用边框)?

<section>
    <div class="box">1</div>
    <div class="box">2</div>
    <div class="box">3</div>
    <div class="box">4</div>
</section>



section {
    display: -moz-flex;
    display: -webkit-flex;
    display: flex;
    -moz-flex-direction: row;
    -webkit-flex-direction: row;
    flex-direction: row;
    -moz-flex-wrap: wrap;
    -webkit-flex-wrap: wrap;
    flex-wrap: wrap;
    width: 100%;
    box-sizing:border-box;
    margin:0;
}
.box {
    border: 1px solid black;
    background: #ccc;
    display: block;
    -ms-flex: 50%;
    -moz-flex: 50%;
    -webkit-flex: 50%;
    flex: 50%;
    box-sizing: border-box;
    margin:0;
}

PS值得庆幸的是,在我的项目中,仅需要支持流行浏览器的最新版本,但是IE11就是其中之一。


问题答案:

box-sizing使用该flex属性计算尺寸时,似乎没有考虑到错误。当边框占据2px时,它大于50%,因此一条直线上只能容纳一个,因此所有框都将拉伸到整个宽度。如果禁用边框并添加2px填充,则会看到相同的情况。

通过添加max-width: 50%.box规则集,可以在保留边界的同时使其正常工作。否则,您可以使用介于33.34%和49%之间的弹性值。这将使宽度(包括边框)不到50%,并且随着元素的增长以填充可用空间,它们仍将是flex容器的50%。有点丑陋,但是除非添加组合的边框和填充大于50%减去所设置的flex值,否则它将起作用。

也许比直接降低百分比值更好的方法是使用calc()。所有支持现代Flexbox语法的浏览器都支持此功能。您只需要从要使用的百分比值中减去左右边距和边距的总和即可。在执行此操作时,您实际上并不需要box-
sizing属性,因此可以将其删除。IE中似乎还存在另一个问题,即您不能在flex速记中使用calc,但可以在flex- basis属性中使用它,这是您想要的。

.box {
    border: 1px solid black;
    /* additional styles removed for clarity */

    /* 
    50% - (border-left-width + border-right-width +
           padding-left + padding-right)
    */
    -webkit-flex-basis: calc(50% - 2px);
    flex-basis: calc(50% - 2px);
}


 类似资料:
  • 问题内容: 使用flexbox时遇到问题。 我正在使用容器,因此我的内部物品实际上可以放在多列中。 问题在于浏览器仍将容器的宽度计算 为内部项目宽度的总和 ! 我的容器块应具有较小的宽度(基于内容大小),但实际上很大。 无论如何,使用列而不是行时以这种方式计算容器的宽度也是非常不自然的。 看一下我代码中的绿色方块。它具有巨大的优势,但事实并非如此。此外,当您从容器中取出物品时,它会变小。 我期望容

  • 问题内容: 我正在尝试编写一个分为三部分的搜索菜单。如果没有足够的垂直空间显示结果,则每个部分都会有一个滚动条。 在Chrome和Firefox中,每个菜单都显示其滚动条,但是在IE11上,菜单与包装器重叠。 我已经编写了一个可在Chrome和Firefox上运行的示例(Firefox很棘手,我需要添加多个菜单级别)。 我在IE 11上缺少什么吗? 问题答案: 要在Chrome,Safari,Fi

  • 我已经读了几篇flexbox教程,但我仍然无法使这个简单的任务发挥作用。 我怎样才能使红框达到100%的宽度? 代码: 样式: 谢谢! 更新1:Nishanth Shankar的建议,为包装器添加flex:1,flexDirection:'row' 输出: 代码:

  • 我有一个有3列的网格。问题是第3列比其他两列更宽。都不是 网格-模板-列:重复(自动拟合,最小(33.33%,1fr)); 也不 网格自动列:33%; 工作,因为IE11不支持自动拟合和网格自动列。 在IE11中有没有替代的方法来实现这一点呢?多谢了。

  • 问题内容: 应该返回什么?根据我的计算,应该是,但是解释器会返回。 这是Python的事情,还是我的数学很糟糕? 问题答案: 根据docs,其优先级高于,因此您的代码等同于。为了获得理想的结果,您可以将其放在括号中 或使用内置功能 或功能(返回值)

  • 问题内容: 我正在尝试使用flexbox做一个简单的设计,但是IE11遇到了麻烦。基本上,我希望页脚仅在内容不够高时才停留在底部。我在使用Chrome这样的操作时没有问题: 只是玩一些,以查看IE11错误的行为。 没有JavaScript,有没有办法实现这一目标? 问题答案: IE浏览器存在一个错误,并且需要在弹性列容器父项上进行操作,在这种情况下, 像这样更新您的CSS