使用iron-media-query将CSS应用于Polymer自定义元素

时间:2016-06-24 20:19:15

标签: html css polymer polymer-1.0

我试图实现一个简单的媒体查询&#39;使用Polymer API中的<iron-media-query>在我的自定义元素上的行为。

假设我的容器顶部有一些文字,下面是主要内容.. 我的目标是编写媒体查询,以便当元素显示在大屏幕上时(对于我的测试而言,大于768px),我可以对元素本地DOM样式进行一些简单的边距和填充修改。

我无法让它发挥作用。 有什么我完全错过了吗?

<link rel="import" href="../../bower_components/polymer/polymer.html"/>
<link rel="import" href="../../bower_components/iron-media-query/iron-media-query.html" />

<iron-media-query query="(max-width:768px)" query-matches="{{isMobilePhone}}"></iron-media-query>

<template is="dom-if" if="{{isMobilePhone}}">

    <style>
        #title {
            color: #000000;
            font-size: 1.8em;
        }
    </style>


</template>


<template>
    <style>
        :host {
            background-color: gray;
            flex-direction: column;
            margin: auto;
            margin-top: 40px;
            display: flex;
            width: 90%;
            flex-grow: 1;
            max-width: 1300px;
        }

        #title {
            color: #7DB8C9;
            font-size: 1.3em;
        }

        .content-wrapper {
            height: 100%;
        }
    </style>


    <p id="title">
        [[title]]
    </p>

    <div class="content-wrapper">
        <content select=".content"></content>
    </div>

</template>




<script>
    Polymer({

        is: 'content-container',
        properties: {
            title: String,
            isMobilePhone: Boolean
        },
        listeners: {
            'tap': 'spit'
        },
        spit: function() {
            console.log("BOOL: " + this.isMobilePhone);
        }

    });
</script> </dom-module>

我还尝试将整个模板(带有样式和标记)复制到&#39; if&#39;模板,只需修改我想要的样式,但它也不起作用。

(一切都在同一个文件中,即content-container.html)

2 个答案:

答案 0 :(得分:2)

实现此目标的最简单方法之一(which is the one used in the iron-media-query demo)是将Polymer annotated attribute bindingsattribute selectors一起使用。

元素模板的简单示例如下所示

<template>
<style>
  .content-wrapper ::content {
    color: blue;
  }

  .content-wrapper[mobile-layout] ::content {
    color: green;
  }
</style>

<iron-media-query query="(max-width:768px)" query-matches="{{isMobilePhone}}"></iron-media-query>
<div class="content-wrapper" mobile-layout$="[[isMobilePhone]]">
  <content></content>
</div>
</template>

这是fiddle显示它的实际效果

答案 1 :(得分:2)

<style>内的任何位置的{p> <dom-module>标记(偶数dom-if)会立即应用于该元素(如此demo所示),因此请<style>dom-if内部不会给你条件样式。

如果使用<iron-media-query>的唯一目的是添加条件<style>,则根本不需要该元素。只需在CSS中使用媒体查询:

<style>
    ...

    #title {
        color: #7DB8C9;
        font-size: 1.3em;
    }

    @media (max-width:768px) {
        #title {
            color: #000000;
            font-size: 1.8em;
        }
    }
</style>

codepen