Mixin, классы и пользовательские элементы в Polymer

Я создаю файл с именем my-mixins.html содержащий:

<link rel="import" href="../polymer/polymer.html">
<style is="custom-style">
  :root {
    --red: {
      color: red;
    };
  }

  // This won't work
  .green: {
    color: green;
  }
</style>

Затем я создаю элемент my-element.html:

<link rel="import" href="bower_components/my-mixins/my-mixins.html">

<link rel="import" href="../polymer/polymer.html">

<dom-module is="my-element">
  <style>
    .red {
      @apply(--red);
    }
    ...
  </style>

  <p class="red">This is red</p>
  <p class="green">This is not green</p>

  <script>
    Polymer({
      is: 'my-element'
    });
  </script>

</dom-module>

В то время как --red работал (как положено), .green не сделал. Я понимаю, что это нужно для того, чтобы стиль не пролился и т.д. Но... каково здесь действительное правило? Как так --red был установлен и доступен для модуля, тогда как green нет?

2 ответа

Ответ на мой конкретный вопрос был здесь:

https://www.polymer-project.org/1.0/docs/devguide/styling

В частности:

Полимер обеспечивает Пользовательский элемент для определения стилей в основном документе, который может использовать некоторые особенности системы стилей Polymer:

Стили документов, определенные в пользовательском стиле, не используются, чтобы гарантировать, что они не попадут в локальный DOM при работе в браузерах без встроенного Shadow DOM.

Пользовательские свойства, используемые шайбой Polymer для стилевого оформления, могут быть определены в пользовательском стиле. Используйте селектор: root для определения пользовательских свойств, которые применяются ко всем пользовательским элементам.

Итак, документы объясняют, что :root Селектор, в частности, должен использоваться для установки пользовательских свойств между областями действия...

Я считаю, что это работает таким образом, чтобы обеспечить возможность настройки внутренних стилей с использованием пользовательских свойств CSS в качестве заполнителей стилей.

Тогда как причина .green не протекает из-за ограниченных возможностей CSS в Shadow DOM.

Вы можете прочитать больше о стайлхуксах в учебнике Эрика Бидельмана Shadow DOM v1.

Другие вопросы по тегам