我们正在制作一个相当复杂的应用程序,它将具有不同的 CSS 文件集以应用于各种自定义元素。动态切换包含的样式表的好方法是什么?


<template>
  <link rel="stylesheet" href="../themes/dark.css">
  <div id="container"></div>
</template>


<template>
  <link rel="stylesheet" href="../themes/light.css">
  <div id="container"></div>
</template>

最佳答案

对 shadow-root 内部样式表的平台支持几乎不存在,所以 Polymer 做了很多技巧来试图让它看起来简单。为了保持良好的性能,Polymer 在设置元素类型时将这些事情作为预处理。

结果是很难像这样在运行时加载或操作 shadow-root 内的样式表。

您今天可以做的一件事是使用 /shadow//shadow-deep/ 组合器(以前称为 ^ 和 ^^)来构建一个位于主文档中但仍然可以设置元素内部样式的样式表。通过这种方式,您可以使用标准技术来控制样式表动态。

http://dev.w3.org/csswg/shadow-styling/#inheritance

另请注意,如果您希望它们在不支持的浏览器上被 polyfill,您应该将属性 shim-shadowdom 放在任何样式或链接标签上,而不是在使用新组合器的 Polymer 模板中。

例如<link rel="stylesheet" href="sheet.css" shim-shadowdom>
http://www.polymer-project.org/docs/polymer/styling.html#sdcss

关于polymer - 在 Polymer shadow DOM 元素中切换主题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22231565/

10-12 17:49