Material2: правильное изменение размера mat-mini-fab и размера значка

Извините, если дублирую вопрос - не нашел информации о своей проблеме.

Я использую угловой 6 с материальный дизайн. Мне нужно изменить размер кнопки mat-fab-mini и значка внутри нее. В инструменте проверки html представлен таким образом:

Material2: правильное изменение размера mat-mini-fab и размера значка

Чтобы изменить размер, я использовал следующий код, но он не уменьшает размер значка внутри кнопки:

html

<button mat-mini-fab class = "my-fab">
    <mat-icon aria-label = "favorite">favorite</mat-icon>
</button>

scss

.my-fab {
    width: 20px;
    height: 20px;
    line-height: 16px;

    .mat-button-wrapper {
         padding: 2px 0 !important;
         line-height: 16px !important;
         width: 16px !important;
         height: 16px !important;

         .mat-icon {
              font-size: 16px;
              padding-right: 4px;
              line-height: 16px;
          }
    }
}

И вот результат:

Material2: правильное изменение размера mat-mini-fab и размера значка

Атрибуты .mat-button-wrapper вообще не меняются. Значок находится внизу кнопки, размер значка не изменился. Как я могу изменить размер значка в material2, чтобы этого не произошло?

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

Ответы 7

Исходя из моего опыта возиться со стилями для компонентов материала angular, я могу сказать, что их стили глубоко вложены, и почти всегда иерархия такова, что любой код, который вы пишете для классов элементов, не работает.

Однако, что касается иконок, есть простое решение. Используйте тег <i> и значимые классы материалов вместо <mat-icon>.

<button mat-mini-fab class = "my-fab">
  <i class = "material-icons md-18" aria-label = "favorite">favorite</i>
</button>

В приведенном выше коде класс md-18 определяет размер шрифта значка 18 пикселей. вы также можете использовать md-24, md-36 или md-48, которые являются предопределенными классами в структуре материалов. Если вам нужен нестандартный размер, вы можете настроить таргетинг на тег <i> внутри вашей кнопки с помощью класса my-fab в css и изменить его размер шрифта, как показано ниже.

.my-fab i {
  font-size: 15px;
}

надеюсь это поможет!

Примечание. md-18, md-24, md-36 и md-48 включены в нет вместе с значками материалов Google. Вы должны сами их заявить.

Edric 03.07.2018 17:10

@rgantla, к сожалению, не помогло. что span class = "mat-button-wrapper" всегда переопределяет line-height, какие бы атрибуты я ни предоставил. Не знаю, как исправить. Кажется, этот span создан mat-mini-fab

Merge-pony 04.07.2018 09:46
Ответ принят как подходящий

Хорошо, я нашел решение. Очень сложно изменить свойства наследования в компонентах angular material 2. Для этого в моей ситуации я должен сделать, как ответил здесь (уже плюсовал: D)

Итак, в своем коде я внес следующие изменения в scss:

.my-fab {
     width: 20px;
     height: 20px;
     line-height: 14px;
     font-size: 14px;

     &::ng-deep .mat-button-wrapper{
         line-height: 14px;
         padding: 0;

          .mat-icon {
              font-size: 14px;
              padding-right: 4px;
              padding-top: 4px;
          }
    }
}

А теперь все отлично. Если вы знаете лучший и правильный способ изменения размера mat-fab-mini и значка внутри него - ответьте здесь, если это сработает, я отмечу это как правильный ответ. В противном случае я отмечу свой ответ как правильный через 2 дня.

использование ng-deep - не лучшее решение (устарело)

tprieboj 19.12.2018 10:48

ng-deep устарел, но в настоящее время нет разработанной замены для достижения желаемой цели (angular.io/guide/component-styles). Это цитата: «Комбинатор потомков, проникающих в тень, устарел, и его поддержка прекращается из основных браузеров и инструментов. В связи с этим мы планируем отказаться от поддержки в Angular (для всех трех из / deep /, >>> и :: ng -deep). До тех пор следует предпочесть :: ng-deep для более широкой совместимости с инструментами ».

Yennefer 02.01.2019 12:50

У меня получилось так:

html

<button mat-mini-fab color = "basic" class = "button24">
  <mat-icon class = "icon24">attach_file</mat-icon>
</button>

css

.button24 {
  background-color: #eee;
  width: 24px;
  height: 24px;
}
.icon24 {
  font-size: 16px;
  margin-top: -8px;
}

JPM

Основная причина этой проблемы в том, что значок является встроенным элементом.

Итак, самый простой способ изменить размер значка - превратить его в блочный элемент:

HTML

<button mat-raised-button>
  <mat-icon>create</mat-icon>
</button>

CSS

button {

      mat-icon {
        display: block;
        width: 128px;
        height: 128px;
        font-size: 128px;
        line-height: 128px;
      }
    }

Работал на меня

HTML

  <button mat-fab>
    <mat-icon class = "md-36" inline aria-label = "Home button">
      home
    </mat-icon>
  </button>
  <button mat-fab>
    <mat-icon class = "md-48" inline aria-label = "Up button">
      expand_less
    </mat-icon>
  </button>

CSS

.material-icons.md-18 {
  margin-top: -3px;
  font-size: 18px;
}
.material-icons.md-24 {
  margin-top: -3px;
  font-size: 24px;
}
.material-icons.md-36 {
  margin-top: -3px;
  font-size: 36px;
}
.material-icons.md-48 {
  margin-top: -4px;
  font-size: 48px;
}

Значки правильно отцентрированы, и div-оболочка не переполняет fab / button Думаю, не слишком элегантно

Мое решение использовать меньшую кнопку редактирования в заголовках (SCSS):

h3 > button {
    width: 1.8rem !important;
    height: 1.8rem !important;
    line-height: 80% !important;

    .mat-button-wrapper {
        padding-top: 0.4rem !important;
        line-height: 80% !important;
    }

    .mat-icon {
        width: 80%;
        height: 80%;
        font-size: 80%;
    }
}

Шаблон:

<h3>
    Title
    <button mat-mini-fab color = "primary" class = "ml-2" title = "Edit" (click) = "edit()">
        <mat-icon>edit</mat-icon>
    </button>
</h3>

похоже, чтобы изменить размер кнопки, мы изменили 1. размер кнопки 2. диапазон, который является оболочкой для значка и 3. размер включенного значка. Также создайте миксин в вашем глобальном файле style.scss, как показано ниже, чтобы его можно было повторно использовать для разных размеров.

@mixin change-button-size($btnsize,$fontsize) {
    height: $btnsize;
    width: $btnsize;
    line-height: $btnsize;
    span{
        height: $btnsize;
        padding: 0px !important;
        i{
            font-size: $fontsize;
        }
    }
}
.mat-mini-fab.mdb-30{
    @include change-button-size(30px, 15px);
}
.mat-mini-fab.mdb-40{
    @include change-button-size(40px, 20px);
}

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