2016-05-04 12 views
3

Ich möchte die :host{}, von einem benutzerdefinierten Polymer-Element, mit Javascript (dynamisch). Die Eigenschaft, die ich stylen möchte, ist die "Zeilenhöhe", die abhängig von der Bildschirmgröße des Benutzers variiert (der Text wird immer in einer Zeile sein).Styling: Gastgeber von Polymer-Element mit Javascript

In einem Versuch, ein sulotion ich zwei verschiedene Methoden verwendet habe, zu finden:
Die erste ist mit normaler jquery:

<dom-module is="custom-element"> 
     <template> 
      <style> 
       :host { 
        position: relative; 
        display: inline-block; 
        min-width: 5.15em; 
        min-height: 2em; 
        padding: 0.5em; 
        background: transparent; 
        font-size: 1.3em; 
        outline: none; 
        cursor: pointer; 
        color: #ABCFCA; 
        text-transform: uppercase; 
        text-align: center; 
        overflow: hidden; 
       } 
      </style> 
      <content></content> 
     </template> 
     <script> 
      Polymer({ 
       is: "custom-element", 
       properties: { 

       }, 
       ready: function() { 
        $(this).css("line-height", $(this).height() + "px"); 
       } 
      }); 
     </script> 

Die zweite Methode, die ich versucht wird Polymer des Brauch mit css Eigenschaften:

<dom-module is="custom-element"> 
     <template> 
      <style> 
       :host { 
        position: relative; 
        display: inline-block; 
        min-width: 5.15em; 
        min-height: 2em; 
        padding: 0.5em; 
        background: transparent; 
        font-size: 1.3em; 
        outline: none; 
        cursor: pointer; 
        color: #ABCFCA; 
        text-transform: uppercase; 
        text-align: center; 
        overflow: hidden; 
        line-height: --dynamic-line-height; 
       } 
      </style> 
      <content></content> 
     </template> 
     <script> 
      Polymer({ 
       is: "custom-element", 
       properties: { 

       }, 
       ready: function() { 
        this.customStyle['--dynamic-line-height'] = $(this).height(); 
        this.updateStyles(); 
       } 
      }); 
     </script> 

Bei dem ersten Verfahren (plain jquery), wenn das Element mit Chrome Elemente Inspektoren der line-height wird/set nicht einmal hinzugefügt Eigenschaft Inspizieren und der Text bleibt an dem Standard vertikalen Position

Die zweite Methode nach oben endet das gleiche wie die erste Methode (keine Änderung/Ergebnis im Stil des Elements)

Es soll beachtet werden, dass console.log($(this).height()); das erwartete Ergebnis von 32px (auf meinem Bildschirm) erzeugt

Es wäre genial, wenn mir jemand helfen kann entweder fix/Bearbeiten Sie eine meiner vorhandenen Methoden oder stellen Sie mir eine Methode zur Verfügung, die sie benutzt/dokumentiert haben woher.

Vielen Dank.

Antwort

0

Ihr CSS im zweiten Beispiel verwendet nur eine CSS-Variable, deklariert jedoch keine. Deklarieren eine erste wie:

 <style> 
      :host { 
       --dynamic-line-height: 1px; 
       .... 
       line-height: var(--dynamic-line-height); 
      } 
     </style> 

     ... 

      ready: function() { 
       var height = Polymer.dom(this).node.offsetHeight + 'px'; 
       this.customStyle['--dynamic-line-height'] = height; 
       this.updateStyles(); 
      } 

Plunker example

Siehe auch Changing CSS variables via JS in Polymer

+0

Danke, ich getan habe, wie Sie gesagt haben - aber '--dynamic-line-height' nicht aktualisiert, und keine Fehler werden ausgelöst. Außerdem gibt '$ (this) .height()' jetzt einen falschen Wert für die Höhe des Elements zurück - aber gehe in die Konsole und tippe '$ (" # element_id "). Height()' gibt den korrekten Wert – Ankush

+0

I ' d versuche die Variablendeklaration in einen separaten ': host {}' Selektorblock zu verschieben. Versuchen Sie 'Polymer.dom (this) .height()'. Wenn es nicht funktioniert, werde ich später in einem Plunker trx. –

+1

'Polymer.dom (this) .height()' gibt: 'Uncaught TypeError: Kann 'in' Operator nicht verwenden, um nach" Höhe "in undefiniert zu suchen, und' --dynamic-line-height' zu einem anderen ': host {} 'gibt' Uncaught TypeError: property.indexOf ist keine Funktion' – Ankush