【发布时间】:2014-10-17 14:06:23
【问题描述】:
关于如何设置 Web 组件样式的讨论很多。
例如,http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom-201/ 建议您可以使用 :host 标签来定位组件标签本身,而带有 h1 的注入样式表应该将 h1 封装在组件的影子 dom 中。
这很棒,并且可以在 chrome 中使用。
...但它只适用于 chrome。
在 Firefox 中访问上面的 url 并没有显示任何精美的演示;事实上,它们根本不起作用。
所以。
https://github.com/polymer/platform 理论上是一种 polyfill,可让您在不具备对所有所需功能的原生支持的浏览器中使用 Web 组件。
理论上,这包括对 CSS 规则的一些有限支持,请参阅:http://www.polymer-project.org/platform/shadow-dom.html
但是,实际上它不起作用。完全没有。
这里发生了什么?当您无法为您的组件设置样式时,我们怎么能认真地声称 platform.js polyfill 正在工作并支持旧版浏览器?
我见过的最佳解决方案是要求组件模板具有已知的根类节点:
<template>
<style>
.foo .bar {
...
}
</style>
<div class='foo'>
...
<div class='bar'>Hi</div>
</div>
</template>
<style>
.foo .bar {
...
}
</style>
请注意,样式表在模板中和在文档根上下文中都是重复的;否则 firefox、safari 和 IE 样式不起作用。
这真的是我们在 Web 组件样式方面所处的水平吗?
我错过了什么吗?
这似乎真的比人们建议的要远很多,即使使用每个浏览器的最新版本也是如此。
这是我一直在使用的一支笔 http://codepen.io/shadowmint/pen/iyFxE,它使用的是 platform.js 0.3.4,并展示了它是如何仅在 chrome 中工作的。
【问题讨论】:
标签: web-component