造型聚合物纸滑块

Cin*_*ris 5 javascript css web-component polymer paper-elements

所以我基本上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>
Run Code Online (Sandbox Code Playgroud)

JSFiddle:https://jsfiddle.net/nhy7f8tt/

定义paper-slider使用按预期工作的变量,但是当我尝试通过其选择器直接解决其中的任何内容时,它不起作用.

我对Polymer很新,所以这可能是一个非常简单/愚蠢的问题,但我真的很困惑,非常感谢任何帮助!

次要(但相关)问题是paper-slider当值为100时,将输入剪切到可编辑元素的右侧.

Gün*_*uer 4

您可以使用像::shadow和 这样的选择器/deep/,但它们已被弃用。如果一个元素不提供钩子(CSS 变量和 mixin),那么你基本上就不走运了。

您可以做的是在elements GitHub存储库中创建功能请求以支持其他选择器。

我已经成功使用的另一个解决方法是添加样式模块

var myDomModule = document.createElement('style', 'custom-style');
myDomModule.setAttribute('include', 'mySharedStyleModuleName');
Polymer.dom(sliderElem.root).appendChild(myDomModule);
Run Code Online (Sandbox Code Playgroud)

我希望语法是正确的。我仅将 Polymer 与 Dart 一起使用。dom-module 必须是 a custom-style,尽管这通常仅在 Polymer 元素外部使用时才需要。

另请参阅https://github.com/Polymer/polymer/issues/2681,了解我使用此方法遇到的问题。