Permalink
| <!-- | |
| Copyright (c) 2014 The Polymer Project Authors. All rights reserved. | |
| This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt | |
| The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt | |
| The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt | |
| Code distributed by Google as part of the polymer project is also | |
| subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt | |
| --> | |
| <!-- | |
| @group Paper Elements | |
| Material Design: <a href="http://www.google.com/design/spec/components/buttons.html">Button</a> | |
| `paper-fab` is a floating action button. It contains an image placed in the center and | |
| comes in two sizes: regular size and a smaller size by applying the attribute `mini`. When | |
| the user touches the button, a ripple effect emanates from the center of the button. | |
| You may import `core-icons` to use with this element, or provide an URL to a custom icon. | |
| See `core-iconset` for more information about how to use a custom icon set. | |
| Example: | |
| <link href="path/to/core-icons/core-icons.html" rel="import"> | |
| <paper-fab icon="add"></paper-fab> | |
| <paper-fab mini icon="favorite"></paper-fab> | |
| <paper-fab src="star.png"></paper-fab> | |
| Styling | |
| ------- | |
| Style the button with CSS as you would a normal DOM element. If you are using the icons | |
| provided by `core-icons`, the icon will inherit the foreground color of the button. | |
| /* make a blue "cloud" button */ | |
| <paper-fab icon="cloud" style="color: blue;"></paper-fab> | |
| By default, the ripple is the same color as the foreground at 25% opacity. You may | |
| customize the color using this selector: | |
| /* make #my-button use a blue ripple instead of foreground color */ | |
| #my-button::shadow #ripple { | |
| color: blue; | |
| } | |
| The opacity of the ripple is not customizable via CSS. | |
| Accessibility | |
| ------------- | |
| The button is accessible by default if you use the `icon` property. By default, the | |
| `aria-label` attribute will be set to the `icon` property. If you use a custom icon, | |
| you should ensure that the `aria-label` attribute is set. | |
| <paper-fab src="star.png" aria-label="star"></paper-fab> | |
| @element paper-fab | |
| @extends paper-button-base | |
| @status unstable | |
| --> | |
| <link href="../polymer/polymer.html" rel="import"> | |
| <link href="../core-icon/core-icon.html" rel="import"> | |
| <link href="../paper-button/paper-button-base.html" rel="import"> | |
| <link href="../paper-ripple/paper-ripple.html" rel="import"> | |
| <link href="../paper-shadow/paper-shadow.html" rel="import"> | |
| <polymer-element name="paper-fab" extends="paper-button-base" attributes="src icon mini" role="button"> | |
| <template> | |
| <style> | |
| :host { | |
| display: inline-block; | |
| position: relative; | |
| outline: none; | |
| -webkit-user-select: none; | |
| user-select: none; | |
| cursor: pointer; | |
| z-index: 0; | |
| box-sizing: border-box; | |
| width: 56px; | |
| height: 56px; | |
| background: #d23f31; | |
| color: #fff; | |
| border-radius: 50%; | |
| padding: 16px; | |
| } | |
| :host([mini]) { | |
| width: 40px; | |
| height: 40px; | |
| padding: 8px; | |
| } | |
| :host([disabled]) { | |
| color: #c9c9c9; | |
| pointer-events: none; | |
| cursor: auto; | |
| } | |
| #ripple { | |
| pointer-events: none; | |
| z-index: -1; | |
| } | |
| #shadow { | |
| border-radius: inherit; | |
| pointer-events: none; | |
| } | |
| #icon { | |
| display: block; | |
| pointer-events: none; | |
| } | |
| </style> | |
| <template if="{{raised}}"> | |
| <paper-shadow id="shadow" fit animated></paper-shadow> | |
| </template> | |
| <!-- to position to ripple behind the icon --> | |
| <core-icon relative id="icon" src="{{src}}" icon="{{icon}}"></core-icon> | |
| </template> | |
| <script> | |
| Polymer({ | |
| publish: { | |
| /** | |
| * The URL of an image for the icon. If the src property is specified, | |
| * the icon property should not be. | |
| * | |
| * @attribute src | |
| * @type string | |
| * @default '' | |
| */ | |
| src: '', | |
| /** | |
| * Specifies the icon name or index in the set of icons available in | |
| * the icon's icon set. If the icon property is specified, | |
| * the src property should not be. | |
| * | |
| * @attribute icon | |
| * @type string | |
| * @default '' | |
| */ | |
| icon: '', | |
| /** | |
| * Set this to true to style this is a "mini" FAB. | |
| * | |
| * @attribute mini | |
| * @type boolean | |
| * @default false | |
| */ | |
| mini: false, | |
| raised: true, | |
| recenteringTouch: true, | |
| fill: false | |
| }, | |
| iconChanged: function(oldIcon) { | |
| var label = this.getAttribute('aria-label'); | |
| if (!label || label === oldIcon) { | |
| this.setAttribute('aria-label', this.icon); | |
| } | |
| } | |
| }); | |
| </script> | |
| </polymer-element> |