为啥不建议使用 polyfill 来支持 CSS3 选择器?

Posted

技术标签:

【中文标题】为啥不建议使用 polyfill 来支持 CSS3 选择器?【英文标题】:Why is it not recommended to use a polyfill for CSS3 selector support?为什么不建议使用 polyfill 来支持 CSS3 选择器? 【发布时间】:2012-07-21 16:03:07 【问题描述】:

我需要确保支持 IE7 和 IE8。

我正在使用一些 CSS3 选择器,例如 :last-child。我加入了Selectivizr,它似乎解决了这些浏览器中的许多问题,让我只需要清理一些备用代码即可。

html5 Please 建议使用 only 后备而不是 polyfill 来解决 CSS3 选择器支持问题:

我们强烈建议您不要尝试对此进行 polyfill,但如果您确实需要,可以使用 Selectivizr。

很高兴知道他们为什么在这里“强烈推荐”反对 polyfill... 有人有什么想法吗?

【问题讨论】:

Polyfills 显然有问题。前几天有人报告 span:last-child:after 无法在 IE8 中工作,即使启用了 Selectivizr - ***.com/questions/11577639/… 【参考方案1】:

使用后备我认为意味着您应该向无法使用现代选择器选择的元素添加类,例如添加.first 用于:first-child,或.checked 用于@ 987654324@等。

我想不出任何理由 HTML5 Please 建议不要如此强烈地使用 polyfill,除了性能和独立于 javascript。最好完全依赖 CSS 来设置样式和绘制。

但在我看来,Selectivizr 是一种魔法,它可以教会 IE6-8 的行为,并确保您的 HTML 没有不必要的类,并会缩短您的开发时间。

【讨论】:

我同意,我可以看到 Selectivizr 的性能会比额外类名之类的手动后备更差......但 HTML5Please 会在此基础上“强烈推荐”反对它似乎很奇怪。我担心还有其他隐患。 除了支持的选择器最终无法正常工作的一些问题外,我没有遇到任何严重的问题。 据我了解,这只是 JavaScript 和页面加载时间的依赖,正如这个答案所说。我没有听说任何其他重大问题。如果您真的很担心,您也可以将其包装在 IE if 语句中。

以上是关于为啥不建议使用 polyfill 来支持 CSS3 选择器?的主要内容,如果未能解决你的问题,请参考以下文章

为啥calc这么重要的css3函数不支持

为啥渐变出不来,css3

Shim 与 Polyfill

CSS3 动画填充模式 polyfill

是否有任何 javascript 代码(polyfill)可以启用 Flexbox(2012,css3),例如modernizr?

为啥像 IE9 这样的旧浏览器没有弹性盒 polyfill?