参考:Issue with upgrade to Polymer 0.5.1 and styling paper-dialog
ルート以外の要素で paper-dialog を使う場合、一工夫いるようです。
原因の要約
- paper-dialog (paper-action-dialog など含む)がデフォルトで layered プロパティが true に設定されている
- ダイアログを常に画面前面に表示するため
- layered が true の要素は、 core-overlay-layer というグローバルな要素に親が変更される
- Developer Console を開いて Element のタブを開くとそのことがわかります
- paper-dialog を使用している要素のスコープから外れてしまうので、そこで定義した css の style が適用されない
対策
リンク先では以下の3通りが紹介されています。 ひとまず、汎用的に思える core-style を使うことにしました。
- layered を false にする
- core-style を使う
- paper-dialog を継承したカスタムエレメントを作成する
サンプル
<link rel="import" href="/bower_components/polymer/polymer.html"> <link rel="import" href="/bower_components/paper-button/paper-button.html"> <link rel="import" href="/bower_components/paper-dialog/paper-action-dialog.html"> <link rel="import" href="/bower_components/core-style/core-style.html"> <core-style id="my-dialog-style"> html /deep/ { width: 16px; height: 16px; } html /deep/ paper-action-dialog::shadow #scroller { width: 360px; height: 360px; } </core-style> <core-style ref="my-dialog-style"></core-style> <polymer-element name="my-paper-action-dialog" attributes="toggle"> <template> <style> :host { position: absolute; width: 100%; height: 100%; } </style> <paper-action-dialog id="dialog"> <div> ... </div> <paper-button dismissive>CANCEL</paper-button> <paper-button affirmative>OK</paper-button> </paper-action-dialog> </template> <script> Polymer({ toggle: function () { this.$.dialog.toggle(); } }); </script> </polymer-element>
0 件のコメント:
コメントを投稿