【问题标题】:Polymer paper-dialog backdrop opacity?聚合物纸对话框背景不透明度?
【发布时间】:2017-02-20 05:56:20
【问题描述】:

我的 Polymer 元素中有一个纸质对话框。我想让背景不透明,现在它是半透明的。我也想换颜色。

有谁知道怎么做。我已经在我的自定义元素中尝试过这个 css:

<style is="custom-style">
--iron-overlay-backdrop-opacity:1;
</style>

<paper-dialog modal></paper-dialog>

但是没有效果。

我也试过

<style is="custom-style">
:host {
  --iron-overlay-backdrop-opacity:1;
}
</style>

<paper-dialog modal></paper-dialog>

【问题讨论】:

    标签: dialog polymer opacity paper-dialog


    【解决方案1】:

    iron-overlay-backdrop 直接附加到文档正文中,在您的自定义元素之外,并且由于 Polymer 的 CSS 封装,您不能在元素。

    但是,您的元素可以强制使用 Polymer.updateStyles(...) 设置背景样式,这会更新所有自定义元素的样式,包括元素外部的 iron-overlay-backdrop:

    Polymer.updateStyles({
      '--iron-overlay-backdrop-background-color': 'red',
      '--iron-overlay-backdrop-opacity': '1'
    });
    

    <head>
      <base href="https://polygit.org/polymer+1.11.1/components/">
      <script src="webcomponentsjs/webcomponents-lite.js"></script>
      <link rel="import" href="polymer/polymer.html">
      <link rel="import" href="paper-button/paper-button.html">
      <link rel="import" href="paper-dialog/paper-dialog.html">
    </head>
    <body>
    
      <div>Click button for dialog</div>
      <x-demo></x-demo>
    
      <dom-module id="x-demo">
        <template>
          <x-dialog id="blue" backdrop-color="blue" backdrop-opacity="1"></x-dialog>
          <x-dialog id="red" backdrop-color="red" backdrop-opacity="0.2"></x-dialog>
          <x-dialog id="green" backdrop-color="green" backdrop-opacity="0.5"></x-dialog>
          <paper-button on-tap="_openDialog" data-dialog="blue">Blue (opacity 100%)</paper-button>
          <paper-button on-tap="_openDialog" data-dialog="red">Red (opacity 20%)</paper-button>
          <paper-button on-tap="_openDialog" data-dialog="green">Green (opacity 50%)</paper-button>
        </template>
        <script>
          HTMLImports.whenReady(function() {
            Polymer({
              is: 'x-demo',
              _openDialog: function(e) {
                var dialog = e.target.dataset.dialog;
                this.$[dialog].opened = true;
              }
            })
          });
        </script>
      </dom-module>
    
      <dom-module id="x-dialog">
        <template>
          <paper-dialog modal with-backdrop opened="{{opened}}">
            <div class="buttons">
              <paper-button dialog-dismiss>Close</paper-button>
            </div>
          </paper-dialog>
        </template>
        <script>
          HTMLImports.whenReady(function() {
            Polymer({
              is: 'x-dialog',
              properties: {
                backdropColor: {
                  type: String,
                  value: 'green'
                },
                backdropOpacity: {
                  type: String,
                  value: '0.6'
                },
                opened: {
                  type: Boolean,
                  value: false
                }
              },
    
              observers: ['_updateBackdrop(opened, backdropColor, backdropOpacity)'],
    
              _updateBackdrop: function(opened, color, opacity) {
                if (opened && color && opacity) {
                  Polymer.RenderStatus.afterNextRender(this, function() {
                  	this._setBackdropStyles(color, opacity);
                  });
                }
              },
              _setBackdropStyles: function(color, opacity) {
                Polymer.updateStyles({
                  '--iron-overlay-backdrop-background-color': color,
                  '--iron-overlay-backdrop-opacity': opacity
                });
              }
            });
          });
        </script>
      </dom-module>
    </body>

    codepen

    或者要为所有背景设置固定的静态样式,请使用正文中的&lt;style is="custom-style"&gt;:

    <body>
      <style is="custom-style">
        iron-overlay-backdrop {
          --iron-overlay-backdrop-opacity: 1;
          --iron-overlay-backdrop-background-color: green;
        }
      </style>
      <x-dialog></x-dialog>
    </body>
    

    <head>
      <base href="https://polygit.org/polymer+1.11.1/components/">
      <script src="webcomponentsjs/webcomponents-lite.js"></script>
      <link rel="import" href="polymer/polymer.html">
      <link rel="import" href="paper-button/paper-button.html">
      <link rel="import" href="paper-dialog/paper-dialog.html">
    </head>
    <body>
      <style is="custom-style">
        iron-overlay-backdrop {
          --iron-overlay-backdrop-opacity: 1;
          --iron-overlay-backdrop-background-color: green;
        }
      </style>
      <div>Hello world</div>
      <x-dialog></x-dialog>
    
      <dom-module id="x-dialog">
        <template>
          <paper-dialog modal with-backdrop opened>
            <div class="buttons">
              <paper-button dialog-dismiss>Close</paper-button>
            </div>
          </paper-dialog>
        </template>
        <script>
          HTMLImports.whenReady(function() {
            Polymer({ is: 'x-dialog' });
          });
        </script>
      </dom-module>
    </body>

    codepen

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      • 2023-03-29
      • 2018-06-01
      • 2015-02-28
      相关资源
      最近更新 更多