Angular Material Typography не установлен правильно

Я пытаюсь внедрить Angular Material Typography, однако у меня возникли некоторые трудности, и я не уверен, в чем может быть проблема.

Я следовал инструкциям, предоставленным Angular здесь, однако столкнулся с проблемой. Проблема в том, что похоже, что все в приложении затронуто, однако некоторые из них переопределяются тем, что выглядит как типографика по умолчанию, и я не уверен, что делаю неправильно.

Типографика создана и используется

$typography-configuration: mat-typography-config(
  $font-family: 'Roboto, "Helvetica Neue", sans-serif',
  $display-4: mat-typography-level(112px, 112px, 300),
  $display-3: mat-typography-level(100px, 56px, 400),
  $display-2: mat-typography-level(100px, 48px, 400),
  $display-1: mat-typography-level(100px, 34px, 400),
  $headline: mat-typography-level(100px, 32px, 400),
  $title: mat-typography-level(100px, 32px, 500),
  $subheading-2: mat-typography-level(100px, 28px, 400),
  $subheading-1: mat-typography-level(100px, 24px, 400),
  $body-2: mat-typography-level(100px, 24px, 500),
  $body-1: mat-typography-level(100px, 22px, 400),
  $caption: mat-typography-level(100px, 22px, 400),
  $button: mat-typography-level(100px, 14px, 500),
  $input: mat-typography-level(100px, 1.125, 400)
);

@include angular-material-typography($typography-configuration);

Как вы можете видеть, для типографики я специально установил первый параметр (размер шрифта) на 100px, чтобы я мог видеть, все ли работает в приложении.

Пример №1: кнопка материала

Для кнопок Angular Material (с использованием «mat-button» на «кнопке» элемента html) я вижу то, что ожидал, как показано ниже. Текст установлен на 100px. Angular Material Typography не установлен правильно

Пример №2: Панель инструментов

Однако для панели инструментов Mat я не вижу, чтобы размер шрифта был установлен на 100 пикселей. Мне кажется, что размер шрифта по умолчанию, как показано ниже, переопределяет размер 100 пикселей:

Angular Material Typography не установлен правильно

Пример № 3: Другая панель инструментов с несколькими переопределениями

В последнем примере на другой панели инструментов мы видим, что 100 пикселей добавляются несколько раз, каждый раз переопределяя друг друга, пока последний переопределяющий размер также не будет 20 пикселей, поэтому размер шрифта не будет 100 пикселей.

Angular Material Typography не установлен правильно

Подробности:

Руководство Angular Material, найденное здесь, показывает, что у нас есть 3 способа использования типографики в приложении:

// Override typography CSS classes (e.g., mat-h1, mat-display-1, mat-typography, etc.).
@include mat-base-typography($custom-typography);

// Override typography for a specific Angular Material components.
@include mat-checkbox-typography($custom-typography);

// Override typography for all Angular Material, including mat-base-typography and all components.
@include angular-material-typography($custom-typography);

Насколько я понимаю, третий вариант, который я использовал, должен применяться ко всему, где вы используете class = "mat-typography". Поэтому я добавил это в body приложения, а также попробовал app-root. Однако, как мы видим выше, правильно затронуты только некоторые приложения.

Я попытался добавить его к более мелким частям приложения в компонентах, но результат оказался таким же.

Я не уверен, что мое понимание неверно, и я не использую его правильно, или если есть проблема где-то еще, я предполагаю, что использую его неправильно, однако я не могу найти никаких руководств и примеров, созданных другими. удивительно.

Я попытался сам добавить классы к таким элементам, как class = "mat-display-1", что, кажется, работает нормально, однако это не похоже на хорошее решение, если мне нужно применять его повсюду в приложении.

Я бы хотел, чтобы он применялся во всем приложении без необходимости устанавливать сотни классов только для типографики.

Я знаю, что могу сделать то, что предлагается здесь для применения к моим собственным элементам в sass, однако я думаю, что они делают это сами.

Тестирование функциональных 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
8
0
7 045
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это может произойти по нескольким причинам, связанным с порядком файлов sass, а также с вызываемыми ими функциями:

Причина:

Причина, по которой это происходит, связана с порядком вызова миксинов sass файлом _theming.scss Angular Material, который можно найти по адресу node_modules\@angular\material\_theming.scss.

Беда миксинов mat-core, а также angular-material-typography.

Использование темы:

Когда вы создаете тему и вызываете миксин темы Angular Material mat-core, он включает в себя ряд миксинов.

@mixin mat-core($typography-config: null) {
  @include angular-material-typography($typography-config);
  @include mat-ripple();
  @include cdk-a11y();
  @include cdk-overlay();
  @include cdk-text-field();
}

Как вы можете видеть в приведенном выше фрагменте кода, миксин действительно вызывается. Когда вызывается angular-material-typography, он ищет конфигурацию типографики, если она не указана, она будет использовать конфигурацию по умолчанию.

Использование типографики:

Когда вы используете только типографический файл, обычно можно увидеть что-то вроде следующего:

@import '~@angular/material/theming';

$typography-configuration: mat-typography-config(
  $font-family: 'Roboto, "Helvetica Neue", sans-serif',
  $display-4: mat-typography-level(112px, 112px, 300),
  $display-3: mat-typography-level(100px, 56px, 400),
  $display-2: mat-typography-level(100px, 48px, 400),
  $display-1: mat-typography-level(100px, 34px, 400),
  $headline: mat-typography-level(100px, 32px, 400),
  $title: mat-typography-level(100px, 32px, 500),
  $subheading-2: mat-typography-level(100px, 28px, 400),
  $subheading-1: mat-typography-level(100px, 24px, 400),
  $body-2: mat-typography-level(100px, 24px, 500),
  $body-1: mat-typography-level(100px, 22px, 400),
  $caption: mat-typography-level(100px, 22px, 400),
  $button: mat-typography-level(100px, 14px, 500),
  $input: mat-typography-level(100px, 1.125, 400)
);

@include angular-material-typography($typography-configuration);

Как видно из приведенного выше фрагмента кода, мы создали конфигурацию типографики. А также мы называем тематический миксин Angular Material mat-core. Это установит типографику для вас, но если вы используете как тему Angular Material Theme, так и типографику Angular Material Typography, у вас могут быть случаи, когда ваша типографика переопределяется. Вот где порядок - проблема.

Неправильная реализация, вызывающая вашу проблему:

@import './_theme-master.scss';
@import './theme-typography';
@include mat-core();

Например выше: скажем, в ваш файл typography-configuration вы импортируете файл темы, содержащий настройку палитры тем и вызов styles.scss. После этого вы решаете импортировать файл типографики. Ваш типографический файл имеет типографическую конфигурацию, а также вы вызываете @include angular-material-theme($theme); передачу своей конфигурации.

Теперь, когда это сделано, вы решили вызвать своему @include angular-material-typography($typography-configuration);. В это время ваши стили созданы для вашей типографики, и вы счастливы, однако, при вызове mat-core Angular создает другой набор стилей, используя конфигурации типографики по умолчанию. Теперь это новейшие стили, и поэтому ваши стили переопределяются новейшими созданными стилями.

По сути, ваши вызывающие миксины выглядят так:

@include angular-material-typography($typography-configuration);
@include mat-core();

Чтобы устранить проблему:

Вместо этого загрузите конфигурацию типографики следующим образом:

@include mat-core($typography-configuration);

Теперь о проблеме создания множества стилей типографики, переопределяющих друг друга. Скорее всего, это связано с тем, что файл (вероятно, ваш файл, содержащий вашу типографику) импортируется несколько раз, что приводит к тому, что миксин вызывает несколько раз. Попробуйте разместить файл типографики в 1 центральном месте, например, вызывая файл один раз в mat-core

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