Polymer 属性 as css 选择器不工作
Polymer property as css selector is not working
我正在尝试使用聚合物 属性 active
作为 css 选择器。这适用于 :host[active]
,例如我的代码 :host[active] > #content
.
中的 3
但是我不明白为什么不能例如 1 #content[active]
?
这是我的测试代码:
感谢您的回答。
<dom-module id="polymer-component">
<template>
<div id="content">test</div>
</template>
<style>
:host {
width: 50px;
height: 50px;
color: blue;
}
:host[active]{
color: yellow;
}
#content{
width: 50px;
height: 50px;
}
/*Example 1*/
#content[active]{
color: red;
}
/*Example 2*/
:host #content[active]{
color: red;
}
/*Example 3*/
:host[active] > #content{
color: red;
}
/*Example 4*/
:host (#content[active]){
color: red;
}
</style>
</dom-module>
<script>
Polymer({
is: "polymer-component",
properties: {
active: {
type: Boolean,
reflectToAttribute: true
}
}
});
</script>
这是因为 active
属性将应用于 polymer-component
元素,而不是 ID 为 content
的子元素 div
,因为它是高分子元素。
生成的标记将是:
<polymer-content active>
<div id="content"></div>
</polymer-content>
如果您想将 CSS 样式应用到带有 id 内容的 div,您将不得不使用您已经完成的选择器 :host[active] > #content
。
因为您没有将 active 属性映射到 div 它永远不会工作。
这是一个如何让 #content[active]
发挥作用的例子
<base href="https://polygit.org/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="polymer/polymer.html">
<dom-module id="polymer-component">
<template>
<div id="content" active$={{active}}>test</div>
</template>
<style>
:host {
width: 50px;
height: 50px;
color: blue;
}
:host[active] {
color: yellow;
}
#content {
width: 50px;
height: 50px;
}
/*Example 1*/
#content[active] {
color: red;
}
/*Example 2*/
:host #content[active] {
color: green;
}
/*Example 3*/
:host[active] > #content {
color: black;
}
/*Example 4*/
:host (#content[active]) {
color: palegoldenrod;
}
</style>
</dom-module>
<script>
Polymer({
is: "polymer-component",
properties: {
active: {
type: Boolean,
value: false,
}
}
});
</script>
<polymer-component active></polymer-component>
如果您检查示例,您会看到 #content[active]
已应用但被第三个示例覆盖,即 host[active] > #content
这本身不是 Polymer 问题,而是影子 dom 规范的一部分。 See this link for more information
简而言之,您需要将选择器括在括号中:
:host([active]) {
color: red;
}
另一个例子,使用 :not():
:host( :not([active]) ) {
color: blue;
}
我正在尝试使用聚合物 属性 active
作为 css 选择器。这适用于 :host[active]
,例如我的代码 :host[active] > #content
.
但是我不明白为什么不能例如 1 #content[active]
?
这是我的测试代码:
感谢您的回答。
<dom-module id="polymer-component">
<template>
<div id="content">test</div>
</template>
<style>
:host {
width: 50px;
height: 50px;
color: blue;
}
:host[active]{
color: yellow;
}
#content{
width: 50px;
height: 50px;
}
/*Example 1*/
#content[active]{
color: red;
}
/*Example 2*/
:host #content[active]{
color: red;
}
/*Example 3*/
:host[active] > #content{
color: red;
}
/*Example 4*/
:host (#content[active]){
color: red;
}
</style>
</dom-module>
<script>
Polymer({
is: "polymer-component",
properties: {
active: {
type: Boolean,
reflectToAttribute: true
}
}
});
</script>
这是因为 active
属性将应用于 polymer-component
元素,而不是 ID 为 content
的子元素 div
,因为它是高分子元素。
生成的标记将是:
<polymer-content active>
<div id="content"></div>
</polymer-content>
如果您想将 CSS 样式应用到带有 id 内容的 div,您将不得不使用您已经完成的选择器 :host[active] > #content
。
因为您没有将 active 属性映射到 div 它永远不会工作。
这是一个如何让 #content[active]
发挥作用的例子
<base href="https://polygit.org/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="polymer/polymer.html">
<dom-module id="polymer-component">
<template>
<div id="content" active$={{active}}>test</div>
</template>
<style>
:host {
width: 50px;
height: 50px;
color: blue;
}
:host[active] {
color: yellow;
}
#content {
width: 50px;
height: 50px;
}
/*Example 1*/
#content[active] {
color: red;
}
/*Example 2*/
:host #content[active] {
color: green;
}
/*Example 3*/
:host[active] > #content {
color: black;
}
/*Example 4*/
:host (#content[active]) {
color: palegoldenrod;
}
</style>
</dom-module>
<script>
Polymer({
is: "polymer-component",
properties: {
active: {
type: Boolean,
value: false,
}
}
});
</script>
<polymer-component active></polymer-component>
如果您检查示例,您会看到 #content[active]
已应用但被第三个示例覆盖,即 host[active] > #content
这本身不是 Polymer 问题,而是影子 dom 规范的一部分。 See this link for more information
简而言之,您需要将选择器括在括号中:
:host([active]) {
color: red;
}
另一个例子,使用 :not():
:host( :not([active]) ) {
color: blue;
}