Может ли компонент StencilJS использовать внешние темы? - PullRequest
0 голосов
/ 03 октября 2018

Я пробую StencilJS создать многократно используемые веб-компоненты для нескольких проектов, над которыми я работаю.Но мне трудно унаследовать цветовые темы от моих основных приложений, скажем, до моего компонента Stencil button.Пример: я хочу использовать разные основные и дополнительные цвета для своих приложений, которые применяются к моим компонентам трафарета, как основная цветная кнопка.Но как мне это сделать?Я использую sass-стилизацию, и у меня есть основная переменная, локально установленная в моем проекте Stencil с моей темой.Но я не знаю, как импортировать внешние файлы sass / css после компиляции.

<my-button color="primary">This is a primary button</my-button>

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Один из вариантов - отключить Shadow DOM при определении компонента.Это позволит вашему веб-компоненту наследовать CSS от приложения, в котором он используется.

@Component({
  tag: 'shadow-component',
  styleUrl: 'shadow-component.css',
  shadow: false
})
0 голосов
/ 05 октября 2018

В нижней части документа Styling есть раздел о том, как использовать переменные CSS:

В этом примере мы определили переменную CSS с именем --app-primary-color, котораяустановлен цвет #488aff.Селектор :root в этом примере является псевдоселектором CSS, который определяет переменную в корневом элементе вашего проекта (обычно <html>), чтобы эту переменную можно было использовать в вашем приложении.

Поэтому, если у вас есть такой компонент кнопки:

@Component({ tag: 'my-button', styleUrl: 'button.css' })
export class Button {
  render() {
    return <div class="button"><slot /></div>;
  }
}

и следующий button.css для него:

.button {
  background: var(--primary-color, tomato);
  color: var(--light-color, white);

  display: block;
  padding: 1em 2em;
  border-radius: 0.2em;
  font-family: sans-serif;
  text-align: center;
  text-transform: uppercase;
}

Тогда вы можете перезаписать все цвета кнопок, установив переменную где-то вваш CSS:

:root {
  --primary-color: mediumseagreen;
}

Переменные CSS также можно установить с помощью Javascript, и они даже заполняются Stencil для старых браузеров.

Пример JSFiddle: http://jsfiddle.net/5fv9r6e1/


Кстати, в вашем компонентном декораторе вы также можете установить shadow: true для включения Shadow DOM, а затем вы можете использовать селектор :host, и в этом примере вам не нужен div-элемент для переноса:

@Component({ tag: 'my-button', styleUrl: 'button.css', shadow: true })
export class Button {
  render() {
    return <slot />;
  }
}

css:

:host {
  background: var(--primary-color, tomato);
  color: var(--light-color, white);

  display: block;
  padding: 1em 2em;
  border-radius: 0.2em;
  font-family: sans-serif;
  text-align: center;
  text-transform: uppercase;
}

Ionic 4 часто использует эту концепцию, поэтому, возможно, стоит взглянуть на их компоненты трафарета: https://github.com/ionic-team/ionic/tree/master/core/src/components

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...