给出如下元素:
<polymer-element name="custom-element">
<template>
<style>
#container {
color: red;
}
</style>
<div id="container" on-click="{{clickContainer}}">
... lots of other stuff here ...
</div>
</template>
<script>
Polymer('custom-element', {
clickContainer: function() {
}
});
</script>
</polymer-element>
我想要另一个包装第一个的元素:
<polymer-element name="my-custom-element" extends="custom-element">
<!-- extra styling -->
<script>
Polymer('my-custom-element', {
clickContainer: function() {
this.super();
}
});
</script>
</polymer-element>
我的问题:
<content select=".stuff">
这样的东西,但是对于基础的阴影标记。答案 0 :(得分:12)
- 指定其他样式的最佳方式是什么?
my-custom-element
)中。 <shadow></shadow>
元素。 :host::shadow .someclass { ... }
见下面的例子。
- 我可以将基本元素包装在额外的标记中(比如另一个容器)吗?
是的,您可以在<shadow></shadow>
附近放置任何标记。
<div>
<shadow></shadow>
</div>
- 我可以从基本元素中选择元素吗?像
<content select=".stuff">
这样的东西,但是对于基础的阴影标记。
没有。你不能那样投射(它是所有其他投影中的反向)。
如果你真的想要从较旧的阴影根中挑选节点,可以通过直接从this.shadowRoot.olderShadowRoot
拉出节点来在代码中完成。但这可能很棘手,因为超类可能对结构抱有期望。
示例代码:
<polymer-element name="my-custom-element" extends="custom-element">
<template>
<style>
/* note that :host::shadow rules apply
to all shadow-roots in this element,
including this one */
:host::shadow #container {
color: blue;
}
:host {
/* older shadow-roots can inherit inheritable
styles like font-family */
font-family: sans-serif;
}
</style>
<p>
<shadow></shadow>
</p>
</template>
<script>
Polymer('my-custom-element', {
clickContainer: function() {
this.super();
}
});
</script>
</polymer-element>
ProTips:
olderShadowRoot
将存在,无论您是否包含<shadow></shadow>
标记,但除非您这样做,否则它不会成为渲染DOM的一部分。olderShadowRoot(s)
创建,您可以覆盖parseDeclarations
(source)。 parseDeclarations
,parseDeclaration
,fetchTemplate
中的任何一种都可以覆盖各种效果。