96 votes

Comment changer la taille de l'icône md dans Material

Cette question provient du Github de Material2. repo .

J'ai toujours des problèmes pour styliser un composant matériel qui est enveloppé dans un composant personnalisé.

J'ai un <logo> qui contient <md-icon svgIcon="logo"></md-icon>

En ajoutant :

:host { 
   .mat-icon {
    width: 100px;
    height: 100px;
    font-size: 56px;
  }
}

Ne s'applique pas au composant matériel à l'intérieur de mon composant personnalisé.

1 votes

"Dans" ou "sur" ? Le site :host est censée s'appliquer au composant lui-même, et la syntaxe no à ses enfants. On dirait que vous avez un "enfant" de md-icon et cela signifie que vous voulez juste ajuster le css avec la simple classe et ne pas utiliser :host

0 votes

Le site width / height / font-size sont mieux adaptés aux icônes matérielles intégrées. Malheureusement, la modification de la taille de la police ne fonctionnera pas si vous utilisez l'option svgIcon

109voto

Mariusz.v7 Points 855

Dans mon cas, cela fonctionne parfaitement. J'utilise le matériel le plus récent (6.2.0).

CSS :

.icon {
    font-size: 36px;
}

HTML :

  <div class="icon">
    <mat-icon [inline]="true">done</mat-icon>
  </div>

L'essentiel est d'établir : [inline]="true"

De l'API :

@Input() inline : booléen - Indique si l'icône doit être inline, automatiquement l'icône en fonction de la taille de la police de l'élément. dans lequel l'icône est contenue.

7 votes

C'est la meilleure solution maintenant. Pas besoin de toutes les autres préparations.

2 votes

Fonctionne pour les icônes de police, pas pour les SVG

0 votes

Je suis d'accord, [inline]="true" semble être une solution plus élégante, si la taille de police correspondante correspond à la taille dont nous avons besoin.

71voto

Mackelito Points 445

MISE À JOUR : 2019-05-22

Les versions plus récentes de Material Design ont l'option de définir [inline]="true" comme une propriété de l'élément HTML.

Je vous recommande plutôt d'utiliser cette approche.

<mat-icon svgIcon="thumbs-up" inline="true"></mat-icon>

Lorsque vous utilisez cette option, l'icône hérite du conteneur parent !

GLHF ! :)


J'ai reçu quelques questions à ce sujet, alors je voulais juste donner un exemple plus clair de la façon de l'utiliser...

/* 1. Add this mixin to a "global" scss */

@mixin md-icon-size($size: 24px) {
  font-size: $size;
  height: $size;
  width: $size;
  line-height: $size;
}

/* 2. Then use it like this in you component scss */

mat-icon {
  @include md-icon-size(32px);
}

exemple d'utilisation

<mat-icon class="myIcon" svgIcon="search"></mat-icon>

:host {
  .myIcon {
    &mat-icon {
      @include md-icon-size(32px);
    }
  }
}

5 votes

Cette solution utilise SCSS, quelle serait la solution CSS classique ? En outre, cette solution ne modifie que la taille de la boîte englobante du wrapper. <md-icon> et non l'élément <svg> qu'il contient.

0 votes

Notez que cela aura un comportement inattendu si vous utilisez em car em se rapporte à l'unité de l'élément font-size . Donc @include md-icon-size(3em); va vraiment le faire 9em

0 votes

Je suis d'accord avec le point de vue de @GerardoFigueroa. Il ne s'agit pas de changer la taille du svg, mais de changer la taille de la boîte englobante.

31voto

Pierre Chavaroche Points 381

J'utilise

<mat-icon svgIcon="cellphone-link"></mat-icon>

avec

.mat-icon {
    transform: scale(2);
}

pour redimensionner l'élément svg. C'était la seule solution qui fonctionnait pour moi, où 2 correspond à 200 % de la taille réelle (un redimensionnement à 0,5, par exemple, serait également possible).

La définition de "height" et "width" n'était pas une option pour moi, car l'élément svg rendu du composant mat-icon n'a pas d'attribut viewBox pour le moment. Mais l'attribut viewBox est obligatoire pour que le composant fonctionne avec les styles "height" et "width". Peut-être l'équipe d'Angular Material améliorera-t-elle cet aspect à l'avenir.

A titre d'information : Vous pouvez centrer la mat-icône avec un wrapper parent et des

display: flex;
align-items: center;
justify-content: center;

1 votes

Excellente solution. Elle a fonctionné pour moi !

0 votes

C'est la solution parfaite

9voto

Mackelito Points 445

Edit : Veuillez voir la réponse acceptée !

L'utiliser comme ça fonctionne très bien.

<md-icon svgIcon="arrow-down" class="size-16"></md-icon>

après avoir défini ceci dans les css du thème (pas dans le composant :host)

md-icon.size-16 {
  width: 16px;
  height: 16px;
  line-height: 16px;
}

1 votes

Taille de la police manquante ?

0 votes

Pas dans cette réponse. Vous pourriez fusionner vos 3 réponses différentes en une seule ?!

0 votes

Ce n'est pas une bonne idée dans tous les cas. Je choisis généralement la réponse qui est la mieux notée. Dans votre cas : pourquoi proposez-vous 3 réponses différentes ?

6voto

eltonplima Points 71

Essayez ça.

@mixin md-icon-size($size: 24px) {
  font-size: $size;
  height: $size;
  width: $size;
}

.material-icons.mat-icon {
  @include md-icon-size(32px);
}

0 votes

Cette solution est identique à la mienne, mais elle est plus souple Je vais donc me convertir à cette façon de faire :) Merci.

0 votes

.mat-icon a fait l'affaire

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X