Импорт глобальных стилей в scss без дублирования scss для каждого компонента

У меня есть несколько файлов scss, которые содержат несколько классов atomik:

atomik.scss

.w-100 { width: 100%}
.w-75 { width: 75%}
.w-60 { width: 60%}
[...] //dozens of others classes

Я могу использовать их в HTML:

<div class = "w-100">

Или в других файлах scss:

foo.component.scss

 @import 'atomik'
 .foo {
   @extend .w-100;
   [...]
 }

Вначале это казалось изящным, пока я не понял, что файл всеatomik.scss был скопирован в каждый компонент, который его импортировал. Похоже, это ожидаемое поведение scss.

сгенерированный foo.component.js

[...]
  styles: ["
  .w-100 { width: 100%};
  .w-75 { width: 75%}
  .w-60 { width: 60%}
  [...] //dozens of others classes
  .foo {
    width: 100%
  }"]
[...]

Вроде есть решение с заполнители.

Тогда atomik.scss станет:

%w-100 { width: 100%}
%w-75 { width: 75%}
%w-60 { width: 60%}
[...] //dozens of others classes

и foo.component.scss станет:

@import 'atomik'
.foo {
  @extend %w-100;
  [...]
}

и сгенерированный foo.component.js:

[...]
  styles: ["
  .foo {
    width: 100%
  }"]
[...]

Хороший ! Но ... теперь классы atomik больше не могут использоваться в HTML:

<div class = "%w-100"> <!-- will be interpreted as class %w-100 -->

Как я могу сделать эти свойства CSS повторно используемыми в HTML, не переопределяя вручную все свойства в scss, которые будут объявлены глобально.

Есть общая закономерность?

Если atomik.scss является глобальным, вы можете просто @import 'atomik' на вашем style.scss, предоставленном angular. Или импортировать через angular.json

penleychan 07.12.2018 17:36

@penleychan Я не понимаю. Насколько я понимаю, это не сделало бы эти свойства доступными из HTML. Заполнители будут вести себя как переменные scss.

Arnaud Denoyelle 07.12.2018 17:38
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
2
775
1

Ответы 1

Все классы, объявленные в глобальном style.scss, по умолчанию доступны для всех ваших компонентов в вашем приложении angular. Вам следует добавить любую такую ​​широко используемую таблицу стилей в style.scss, чтобы сделать ее доступной для всего приложения.

Вы можете импортировать свой atomik.scss в styles.scss, и это решит вашу проблему. просто будьте осторожны с порядком импорта файлов scss здесь, если есть несколько импортов, вы можете в конечном итоге переопределить несколько классов. Также убедитесь, что atomik.scss написан таким образом, чтобы его можно было применять к другим компонентам (с учетом классов родительско-дочернего стиля).

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