Modernizr:IE10 和 Flexbox:如何检测 IE10 Flexbox
Modernizr: IE10 & Flexbox: How to get IE10 flexbox detected
我在我的网站上使用 Modernizr v3 来测试 flexbox 支持。
Modernizr 为支持它的浏览器添加了一个 "flexbox"
主体 class,为不支持它的浏览器添加了 "no-flexbox"
。由于不支持 flexbox 的浏览器只是我的一小部分观众,我使用 "no-flexbox"
class 来提供回退 CSS。例如:
.ad { /* Default CSS */
display: flex;
}
.no-flexbox .ad { /* Fallback CSS*/
display:table;
}
一切正常,除了 IE10,因为 Modernizr 添加了一个 "no-flexbox" class 到它,即使 IE10 确实支持 Flexbox,它只是使用旧的语法。因此,在 IE10 上,我的布局被破坏了,因为它读取了 flex box 和 non-flexbox 样式。
In this thread,说modernizer对IE10有flexboxtweener风格。因此,我想我可以重写我的回退以使用 .no-flexboxtweaner
而不是 .no-flexbox
。
问题是支持新的 flexbox 语法的浏览器也得到了一个 no-flexboxtweaner class,所以他们阅读了后备代码。
我如何设置它以便只有不支持任何形式的 flexbox 的浏览器(无论是新的还是旧的)得到 "no" class.
我知道我可以做“.no-flexbox .ad, .no-flexboxtweaner .ad”,但是那会使 CSS 膨胀(加上 运行 两个 Modernizr 测试)。我宁愿只有一个 test/class。
I know I could do ".no-flexbox .ad, .no-flexboxtweaner .ad", but then that's bloating the CSS (plus running two Modernizr tests). I'd rather just have a single test/class.
这有点傻,伙计。它只有几个字节——几乎所有字节都将通过 gzip 文件被删除。如果你真的想避免它,你可以创建一个额外的 Modernizr 检查,给你任何 flexbox
Modernizr.addTest('anyflexbox', (Modernizr.flexbox || Modernizr.flexboxtweener))
这将创建一个名为 anyflexbox
的新 属性,您可以相应地设置 css 的样式。
检测到对 flex-wrap CSS 属性 的支持,Flexbox 的一部分,并非所有 Flexbox 实现(尤其是 Firefox)都存在。
这在 'tweener' 语法(由 IE10 实现)和 'modern' 语法(由其他人实现)中都有体现。只要支持 flex-wrap 属性,此检测对于这些实现中的任何一个都将 return 为真。因此,为确保支持现代语法,请与 Modernizr.flexbox:
一起使用
if (Modernizr.flexbox && Modernizr.flexwrap) {
// Modern Flexbox with `flex-wrap` supported
}
else {
// Either old Flexbox syntax, or `flex-wrap` not supported
}
我在我的网站上使用 Modernizr v3 来测试 flexbox 支持。
Modernizr 为支持它的浏览器添加了一个 "flexbox"
主体 class,为不支持它的浏览器添加了 "no-flexbox"
。由于不支持 flexbox 的浏览器只是我的一小部分观众,我使用 "no-flexbox"
class 来提供回退 CSS。例如:
.ad { /* Default CSS */
display: flex;
}
.no-flexbox .ad { /* Fallback CSS*/
display:table;
}
一切正常,除了 IE10,因为 Modernizr 添加了一个 "no-flexbox" class 到它,即使 IE10 确实支持 Flexbox,它只是使用旧的语法。因此,在 IE10 上,我的布局被破坏了,因为它读取了 flex box 和 non-flexbox 样式。
In this thread,说modernizer对IE10有flexboxtweener风格。因此,我想我可以重写我的回退以使用 .no-flexboxtweaner
而不是 .no-flexbox
。
问题是支持新的 flexbox 语法的浏览器也得到了一个 no-flexboxtweaner class,所以他们阅读了后备代码。
我如何设置它以便只有不支持任何形式的 flexbox 的浏览器(无论是新的还是旧的)得到 "no" class.
我知道我可以做“.no-flexbox .ad, .no-flexboxtweaner .ad”,但是那会使 CSS 膨胀(加上 运行 两个 Modernizr 测试)。我宁愿只有一个 test/class。
I know I could do ".no-flexbox .ad, .no-flexboxtweaner .ad", but then that's bloating the CSS (plus running two Modernizr tests). I'd rather just have a single test/class.
这有点傻,伙计。它只有几个字节——几乎所有字节都将通过 gzip 文件被删除。如果你真的想避免它,你可以创建一个额外的 Modernizr 检查,给你任何 flexbox
Modernizr.addTest('anyflexbox', (Modernizr.flexbox || Modernizr.flexboxtweener))
这将创建一个名为 anyflexbox
的新 属性,您可以相应地设置 css 的样式。
检测到对 flex-wrap CSS 属性 的支持,Flexbox 的一部分,并非所有 Flexbox 实现(尤其是 Firefox)都存在。
这在 'tweener' 语法(由 IE10 实现)和 'modern' 语法(由其他人实现)中都有体现。只要支持 flex-wrap 属性,此检测对于这些实现中的任何一个都将 return 为真。因此,为确保支持现代语法,请与 Modernizr.flexbox:
一起使用if (Modernizr.flexbox && Modernizr.flexwrap) {
// Modern Flexbox with `flex-wrap` supported
}
else {
// Either old Flexbox syntax, or `flex-wrap` not supported
}