【问题标题】:Microsoft Edge Flexbox padding behaviorMicrosoft Edge Flexbox 填充行为
【发布时间】:2016-03-17 17:26:32
【问题描述】:

我刚刚完成了这个网站:http://groepsmanager-rspo.com。它可以在 Chrome 47 和 Internet Explorer 11 等现代浏览器中完美呈现。

在 Microsoft Edge 中,5% padding-toppadding-bottom 被忽略。 display:flex 已应用于相关 div,并且它们具有百分比 padding-top 和 padding-bottom。

@media only screen and (min-width: 768px) {
  .row {
    display: flex;
  }
  .twothird, .threethird, .onethird, .onehalf, .onefourth, .threefourth, .twofourth {
    padding: 5%; // Padding-top and -bottom are ignored?
  }
}

现在,Edge 是否错误地解释了 flexbox? 有没有办法专门针对这个问题?

如果没有,是否有办法通过 Modernizr 检测客户端浏览器是否为 Edge,以便在这些情况下使用 display: flex 以外的其他内容?

请注意,Modernizr 表示 Edge 支持 display: flex

提前致谢。

【问题讨论】:

  • 根据caniuse.com/#feat=flexbox,没有描述与 Edge 相关的问题。 htmlasks.com/… 似乎也描述了您的“问题”。那么stackoverflow.com/questions/23717953/… 能解决你的问题吗?
  • 嗨,贝斯,感谢您的评论。这可能是最后的资源。你知道用 Modernizr 瞄准 Edge 的方法吗?如果我可以在没有提供预期填充的情况下禁用 flexbox,这将解决它...

标签: html css flexbox microsoft-edge


【解决方案1】:

实际上 MS Edge(和 FF)都以正确的方式实现了这种行为

弹性项目上的百分比边距和填充总是被解决 针对它们各自的尺寸;与块不同,它们并不总是 解决其包含块的内联维度。

source: dev.w3.org

所以有两种方法可以使这项工作。

  1. .row div 上设置固定高度。
  2. 使用<div>标签将所有子元素包裹在flex父元素中。

这是一个JSFIDDLE 显示两个示例

两者都有优点和缺点,由您决定您认为哪种解决方案最好。

-- 更新

要使用 Modernizr 检测浏览器,您需要添加一些 JS 来创建您自己的功能检测,方法是调用 Modernizr.addTest

Modernizr.addTest('edge', function () {
  return !!navigator.userAgent.match(/edge/i);
});

对于火狐

Modernizr.addTest('firefox', function () {
  return !!navigator.userAgent.match(/firefox/i);
});

如果用户使用这两种方法中的一种,这将在 HTML 标记中添加一个类 .edge.firefox,然后您可以添加特定的 CSS 以仅定位 Edge 或 FF。

【讨论】:

  • 嗨,阿米尔。看来你和巴斯是对的。也许最好在我的用例中完全避免使用 flexbox。你知道通过 Modernizr 在我的 CSS 中定位 Edge 的方法吗?
  • @maartenmachiels 查看我更新的答案,我还没有测试 JS 代码,但我相信应该可以。祝你好运。
  • 我会在早上测试并告诉你。非常感谢!
  • 这显然是正确的答案。如果 Edge 和 Firefox 正确解释规范,那么其他浏览器也会这样做只是时间问题。在我的用例中,我将完全避免使用 flexbox,因为如果不添加更多的 div,它就不会达到我的预期……然而,在 Modernizr 中测试的代码似乎对我不起作用:“edge”类名似乎没有附加。我使用的是 2.6.2 版。谢谢!
  • UPDATE => 似乎在 Modernizr 2.8.3 中内置了对 Edge 的测试。在那个版本中,我添加了对 Firefox 的测试,它现在提供了一个临时解决方案,而我正在寻找一些东西更坚实。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 2022-07-05
  • 1970-01-01
  • 2017-07-29
  • 2018-11-25
相关资源
最近更新 更多