聚合物1.0 - 纸张波纹遍布整个屏幕而非适合元素

fra*_*y88 6 polymer polymer-1.0

我正在尝试在可点击的项目列表上使用涟漪效果,但我面临的问题是,当我将该列表封装到自定义元素中时,涟漪效应遍及整个屏幕.如果我将它放在我的index.html中,但是当我创建一个包含在那里的自定义元素时失败,它会很有效.查看问题的图片:

在此输入图像描述

我一直在阅读类似的问题,答案是使容器相对,这应该已经完成​​.所以我想知道在使用自定义元素的涟漪效应时是否需要在主机中设置任何特殊属性.

我的示例代码如下.

的index.html

<!doctype html>
<html lang="">

<head>
  <meta charset="utf-8">
  <meta name="description" content="">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>List test</title>
  <script src="bower_components/webcomponentsjs/webcomponents-lite.js"></script>
  <link rel="import" href="elements/elements.html"> 
  <style>
    paper-icon-item {
      position: relative;
      height: 48px;
    }
  </style>
</head>
<body unresolved class="fullbleed layout vertical">
  <template is="dom-bind" id="app">
        <my-list></my-list>
  </template>
  <script src="scripts/app.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我-list.html

<dom-module id="my-list">
    <style>
      paper-icon-item {
        position: relative;
        height: 48px;
      }
    </style>
  <template>
  <section>
    <div class="menu">
      <paper-icon-item>
        <div class="label" fit>Mark as unread</div>
        <paper-ripple></paper-ripple>
      </paper-icon-item>
      <paper-icon-item>
        <div class="label" fit>Mark as important</div>
        <paper-ripple></paper-ripple>
      </paper-icon-item>
      <paper-icon-item>
        <div class="label" fit>Add to Tasks</div>
        <paper-ripple></paper-ripple>
      </paper-icon-item>
      <paper-icon-item>
        <div class="label" fit>Create event</div>
        <paper-ripple></paper-ripple>
      </paper-icon-item>
    </div>
  </section>
  </template>

</dom-module>
<script>
    (function () {
      Polymer({
        is: 'my-list'
      });
    })();
</script>
Run Code Online (Sandbox Code Playgroud)

当使用my-list.html的section标签内容(包括section标签)替换index.html时,涟漪效果正常.波纹中的拟合属性也没有解决问题.我在自定义组件中缺少什么?

Ada*_*ian 7

注意:如果您遇到此行为或类似行为,在最新版本中paper-ripple,此答案可能解决的问题可能不是您遇到的问题(请参阅下面的更新).

paper-ripple 有以下CSS(仅显示相关行):

:host {
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}
Run Code Online (Sandbox Code Playgroud)

如果paper-ripple's'的父元素没有position: relative设置,这将导致涟漪填充position: relative它找到的第一个父级,可能不是它的直接父级,也不是整个文档,以先到者为准.

为了解决这个问题,请确保您使用的元素paper-ripple在具有position: relative在其CSS.

更新 (2015年6月15日): paper-ripple 1.0.1于2015年6月11日发布,其中包括修复此问题的PR,使得此答案中建议的修复已过时.只需更新bower.json即可绑定到PolymerElements/paper-ripple#^1.0.1.


此问题是由当前问题paper-ripple引起的.发生的事情是paper-ripple元素的目标是my-list元素而不是父paper-icon-item元素.

目前有两种解决方法:

  1. 在此期间,创建一个自定义元素,paper-ripple在其阴影/阴影DOM 中包含一个元素,并调整其大小以适合您的元素.

    例如:

<dom-module id="ripple-wrapper">
  <style is="custom-style">
    :host {
      display: block;
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
    }
  </style>
  <template>
    <paper-ripple></paper-ripple>
  </template>
</dom-module>
<script>
  Polymer({ is: 'ripple-wrapper' });
</script>
Run Code Online (Sandbox Code Playgroud)
  1. 我已向存储库提交了一个pull请求,其中包含针对此问题的修复程序.但是,目前尚未合并.现在,你可以告诉亭子安装的修补拷贝paper-ripple通过设定的版本paper-ripplebower.json文件中vsimonian/paper-ripple#containment-fix.

    如果您这样做,我强烈建议您密切关注问题提取请求,以便您可以在bower.json不再需要时恢复临时更改.