2015-01-07 3 views
3

У меня есть пользовательский элемент Polymer, который я хочу стилизовать определенным образом и предоставить в качестве плагина на множество разных веб-сайтов. Я хотел бы иметь возможность инкапсулировать стили моих пользовательских компонентов таким образом, чтобы они выглядели одинаково на всех веб-сайтах, на которых они встроены. Вот пример того, как директива шрифта на веб-странице родительского конфликтует со стилем моего компонента:Как предотвратить внешний CSS от переопределения стилей веб-компонентов

<style> 
 
* { 
 
    font-size: 18px; 
 
} 
 
</style> 
 
<script src="http://www.polymer-project.org/webcomponents.js"></script> 
 
<link rel="import" href="http://www.polymer-project.org/components/polymer/polymer.html"> 
 

 
<polymer-element name="polymer-css-test"> 
 
    <template> 
 
    <style> 
 
     :host { 
 
     font-size: 12px; 
 
     } 
 
    </style> 
 
    <div> 
 
     Please tell me how to make this 12pt. 
 
    </div> 
 
    </template> 
 
    <script> 
 
    Polymer('polymer-css-test', { 
 
     ready: function() { 
 
     } 
 
    }); 
 
    </script> 
 
</polymer-element> 
 
<polymer-css-test></polymer-css-test>

Заранее спасибо за вашу помощь.

ответ

1

Существует два способа достижения этого (и вы можете использовать оба).

Если вы хотите, чтобы ваши правила стилей, чтобы применить здесь, что вам нужно, чтобы сделать их более конкретными, чем «глобальные» правила:

:host * { 
    font-size: 12px; 
} 

Кроме того, вы можете добавить !important маркер правило, чтобы сделать его переопределение другие правила, однако это следует использовать с осторожностью:

:host { 
    font-size: 12px!important; 
} 

для получения дополнительной информации о специфичности (какие правила применяются к которым элементы), контроль this page.

+1

Спасибо @ timo-d. Я немного смущен, потому что Shadow DOM должен помешать внешнему CSS помешать стилям моих компонентов. См. Эту статью: http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom-201/. Вы знакомы с веб-компонентами? – cayblood

+0

Верно, что теневая DOM является каким-то собственным пространством с точки зрения стилей DOM и CSS, и верно, что вы не можете применять стили CSS к элементам в Shadow DOM ** напрямую ** без использования ':: shadow' или '/ глубоко /'. Однако существуют некоторые свойства CSS, такие как «font-size», которые могут быть унаследованы от родителя, даже если правило стилирования не относится к самому дочернему элементу. И я думаю, что это то, что здесь происходит. Я признаю, что это довольно странно, и я не могу найти источники, подтверждающие мою теорию. –

+0

Я думаю, что вы правы. Вот подтверждение вашей теории: https://groups.google.com/forum/#!topic/polymer-dev/06zYBZ_IMjc – cayblood

Смежные вопросы