Хотя это может показаться повторяющимся вопросом, вопросы, заданные ранее, были основаны на Polymer, а не на нативных CustomElements, и речь идет о самом css, а не о проникновении в ShadowDOM или пользовательские свойства/переменные CSS
Итак, у нас есть простой пользовательский элемент (примечание: на момент написания он работает только в более новых версиях Chrome).
class StyleMe extends HTMLElement {
constructor () {
super();
let shadow = this.attachShadow({ mode: 'closed' });
shadow.appendChild(document.querySelector('#style-me').content.cloneNode(true));
}
}
customElements.define('style-me', StyleMe);
h1 {
/* even !important doesn't penetrate */
color: red !important;
}
<h1>I'm a normal heading</h1>
<style-me>I'm heading hidden in style-me's shadow</style-me>
<template id="style-me">
<style>
:host {
background: blue;
display: block;
}
h1 {
color: yellow;
}
</style>
<h1><slot></slot></h1>
</template>
Это прекрасно демонстрирует, как стили изолированы при использовании ShadowDOM.
Что было бы неплохо сделать, так это сохранить содержимое <style>
внутри <template>
во внешнем файле, возможно, сгенерированном препроцессором, например less.
После долгих поисков только для того, чтобы найти ответы, связанные с полимером, я ничего не понял, есть какие-нибудь мысли?
Я не ищу настраиваемые свойства, которые они позволили бы мне использовать.
<style>
:host {
background: blue;
display: block;
}
h1 {
color: var(--something);
}
</style>
И установите цвет с помощью
style-me {
--something: yellow;
}
Мой вопрос о переезде
:host {
background: blue;
display: block;
}
h1 {
color: yellow;
}
Из тега <style>
в отдельный файл