bug(mat-icon): Inline mat-icon inherits line-height incorrectly resulting in clipping
- Dominant language
- TypeScript
- Stars
- 25k
- Forks
- 6.8k
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 91
Description
### Is this a regression?
- [X] Yes, this behavior used to work in the previous version
### The previous version in which this bug was not present was
13
### Description
Any `line-height` set on a parent of an inline `mat-icon` with a larger font size results in clipping. As an example, let's add `mat-typography` on `body` which sets the font of the element it is placed on to `body-1`. This includes setting `line-height` to 20px. `.mat-icon-inline` sets `line-height` to `inherit`. This results in the line height being set to 20px and any font size larger than 20px causing clipping.
This problem was hidden by the fact that in earlier versions, the mat-icon overflowed so no clipped occurred. However, since #12429, overflow is set to hidden and clipping occurs.
### A fix
The fix I found is removing `line-height: inherit` which allows `.material-icons`'s `line-height: 1` to apply. I can make a PR to make this change.
### Reproduction
Steps to reproduce:
1. Set line height on body
2. Add an inline mat-icon with font-size larger than the line height set previously
See https://stackblitz.com/edit/components-issue-vwhnst?file=src/app/example-component.html
**Before v14 (overflowing mat-icon)**
This mat-icon has 38.4 margin top and bottom and a font-size of 76.8px.

**Since v14**

### Expected Behavior
The icon should scale with font-size without clipping.
In this screenshot, the line-height is set to 1, the margin is correctly applied, and no clipping occurs.

### Actual Behavior
The icon is clipped due to the line-height not being 1. This is caused by `line-height: inherit`.
### Environment
Angular CLI: 14.1.3
Node: 16.18.1
Package Manager: npm 8.19.2
OS: linux x64
Angular: 14.1.3
... animations, cdk, cli, common, compiler, compiler-cli, core
... forms, language-service, material, material-moment-adapter
... platform-browser, platform-browser-dynamic, router
Package Version
---------------------------------------------------------
@angular-devkit/architect 0.1401.3
@angular-devkit/build-angular 14.1.3
@angular-devkit/core 14.1.3
@angular-devkit/schematics 14.1.3
@schematics/angular 14.1.3
rxjs 6.6.7
typescript 4.7.4
Contributor guide
Research direction
Start with the .mat-icon-inline and .material-icons styles, then run the linked StackBlitz reproduction at src/app/example-component.html with a parent line-height and larger inline icon font size. The work is done when the icon scales with the font size and is no longer clipped, while the existing material icon behavior remains intact.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- angular, css, typescript
- Domain
- frontend
- Issue type
- Bug
- Difficulty
- 1/5
- Estimated time
- 1-3 hours
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 52/100