所以我基本上用自定义元素包装标准paper-slider
元素,并希望包含一些样式。以下是我目前的情况:
<dom-module id="my-slider">
<template>
<style>
/* Works */
paper-slider {
--paper-slider-active-color: red;
--paper-slider-knob-color: red;
--paper-slider-height: 3px;
}
/* Doesn't work */
paper-slider #sliderContainer.paper-slider {
margin-left: 0;
}
/* Also doesn't work */
.slider-input {
width: 100px;
}
</style>
<div>
<paper-slider editable$="[[editable]]" disabled$="[[disabled]]" value="{{value}}" min="{{min}}" max="{{max}}"></paper-slider>
</div>
</template>
<script>
Polymer({
is: "my-slider",
properties: {
value: {
type: Number,
value: 0,
reflectToAttribute: true
},
min: {
type: Number,
value: 0
},
max: {
type: Number,
value: 100
},
editable: Boolean,
disabled: Boolean
}
});
</script>
</dom-module>
JSFiddle:https://jsfiddle.net/nhy7f8tt/
定义paper-slider
使用的变量按预期工作,但当我尝试通过其选择器直接解决其中的任何内容时,它不起作用。
我对Polymer来说相当新,所以这可能是一个非常简单/愚蠢的问题,但我真的很困惑,非常感谢任何帮助!
次要(但相关)问题是当值为100时,将输入剪切到可编辑paper-slider
元素的右侧。
答案 0 :(得分:4)
您可以使用::shadow
和/deep/
等选择器,但不推荐使用它们。如果一个元素没有提供钩子(CSS变量和混合),那么你基本上没有运气。
您可以做的是在elements GitHub回购中创建功能请求,以支持其他选择器。
我已成功使用的另一种解决方法是添加style module。
var myDomModule = document.createElement('style', 'custom-style');
myDomModule.setAttribute('include', 'mySharedStyleModuleName');
Polymer.dom(sliderElem.root).appendChild(myDomModule);
我希望语法正确。我只在Dart中使用Polymer。
dom-module需要是custom-style
,即使这通常只在Polymer元素外部使用时才需要。
另请参阅https://github.com/Polymer/polymer/issues/2681有关此方法遇到的问题。
答案 1 :(得分:0)
以下代码对我有用,
attached: function(){
var sliderContainer = document.querySelector("#sliderContainer.editable.paper-slider");
sliderContainer.style.marginTop = "5px";
sliderContainer.style.marginBottom = "5px";
},