интересная "проблема" у вас есть ... кажется, единственный способ воспроизвести это, добавив определение переменной в том же "определении" css.
Как только я добавляю значение переменной к host
, она работает нормально. Мне кажется, это ошибка браузера: /
Размещение на хосте может быть правильным решением.
Ниже приведен код, который я использовал для воспроизведения - откройте его и осмотрите различные пути, чтобы увидеть их результат.
Если вам требуется «внешняя» переменная css, вы можете обойти ее, «переназначив» ее в хосте, например,
:host {
--good-variable: var(--external-variable);
}
// can be used to disable constructable styleheets on chrome
// delete Document.prototype.adoptedStyleSheets;
html {
--svg-stroke-from-external: #ff0000;
}
import { LitElement, html, css } from 'https://unpkg.com/lit-element?module';
class SimpleGreeting extends LitElement {
static get styles() {
return css`
:host {
--svg-stroke-width: 10px;
--svg-stroke-from-host: #ff0000;
--svg-stroke-from-host-mapped-from-external: var(--svg-stroke-from-external);
}
.formaFabrica {
--svg-stroke-from-same-rule: #ff0000;
stroke: var(--svg-stroke-from-same-rule);
stroke-width: var(--svg-stroke-width);
}
.formaFabrica2 {
stroke: var(--svg-stroke-from-host);
stroke-width: var(--svg-stroke-width);
}
.formaFabrica3 {
stroke: var(--svg-stroke-from-external);
stroke-width: var(--svg-stroke-width);
}
.formaFabrica4 {
stroke: var(--svg-stroke-from-host-mapped-from-external);
stroke-width: var(--svg-stroke-width);
}
/* demo formatting */
div { float: left; }
`;
}
render() {
return html`
variable definition on same element
Results in:
stroke: #ff0000;
определение переменной на хосте
<путь d = "M150 0 L75 200 L225 200 Z" class = "formaFabrica2" />
Результаты:
stroke: var(--svg-stroke-from-host);
определение переменной через "внешний" css
<путь d = "M150 0 L75 200 L225 200 Z" class = "formaFabrica3" />
Результаты:
stroke: #ff0000;
определение переменной через "внешний" css
<путь d = "M150 0 L75 200 L225 200 Z" class = "formaFabrica4" />
Результат:
stroke: var(--svg-stroke-from-host-mapped-from-external);
`;
}
}
customElements.define ('simple-приветствие', SimpleGreeting);
<Простое-приветствие> </ простое приветствие>