Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Automatic inlining of fonts results in jagged fonts for Windows users #22248

Closed
1 of 15 tasks
oriondean opened this issue Nov 29, 2021 · 4 comments · Fixed by #26623
Closed
1 of 15 tasks

Automatic inlining of fonts results in jagged fonts for Windows users #22248

oriondean opened this issue Nov 29, 2021 · 4 comments · Fixed by #26623

Comments

@oriondean
Copy link

oriondean commented Nov 29, 2021

🐞 Bug report

Command (mark with an x)

  • new
  • build
  • serve
  • test
  • e2e
  • generate
  • add
  • update
  • lint
  • extract-i18n
  • run
  • config
  • help
  • version
  • doc

Is this a regression?

Yes, automatic inlining of fonts was introduced in Angular 11 (defaulted to on)

Description

Some Google fonts are rendering poorly for Windows users when automatic font inlining is turned on

🔬 Minimal Reproduction

Start up a new angular project, and add google open sans font into your index.html like so:

  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link href="https://fonts.googleapis.com/css2?family=Open+Sans&display=swap" rel="stylesheet">

Set the font-family of text to 'Open Sans' and font size to 12px.
Build the project so that the font inlining happens, and serve the static bundle locally.
One quick example to do this is to run npx http-server dist/{PROJECT_NAME_HERE}
Notice that the rendered fonts look jagged and poor aliased.

image

If I turn off font-inlining and rebuild the font renders better:

image

🌍 Your Environment


Angular CLI: 12.2.13
Node: 15.3.0 (Unsupported)
Package Manager: npm 7.0.14
OS: win32 x64

Angular: 12.2.13
... animations, cli, common, compiler, compiler-cli, core, forms
... platform-browser, platform-browser-dynamic, router

Package                         Version
---------------------------------------------------------
@angular-devkit/architect       0.1202.13
@angular-devkit/build-angular   12.2.13
@angular-devkit/core            12.2.13
@angular-devkit/schematics      12.2.13
@schematics/angular             12.2.13
rxjs                            6.6.7
typescript                      4.3.5

Anything else relevant?

Looking at how the build-time font inlining works, it's making a request at build time with a Mac OSX user-agent which returns a different set of fonts than if I hit the Google Fonts endpoint with a Windows user-agent. In my testing when I replaced the inlined styles with fonts inlined with a Windows user agent the fonts rendered fine.

@alan-agius4
Copy link
Collaborator

It appears that when using a Windows user-agent the woff2 font content size is about 1.7Kb larger. It doesn't appear to effect the font rendering on OSX in anyway.

@mgechev, has offered to reach out to the Chrome team to understand this problem a bit better.

@foo6
Copy link

foo6 commented Mar 15, 2022

Do you think this problem will be fixed?
We currently experiences the exact same problem and don't find a workaround excepted to not use the Optimization. It occurs for us exactly with the same font "Open Sans" and it's clearly noticeable for the same font size of 12px.

@alan-agius4
Copy link
Collaborator

@foo6, we have reached out the the Chrome team again to gather some more information and their recommended.

alan-agius4 added a commit to alan-agius4/angular-cli that referenced this issue Dec 8, 2023
…ed fonts for Windows users

We now replace the user agent string used to perform font inlining with a Windows one. This is because Google fonts will including hinting in fonts for Windows. Hinting is a technique used with Windows files to improve appearance however results in 20-50% larger file sizes, however this will make the fonts display correctly on all platforms.

More information about this can be found in:
- https://fonts.google.com/knowledge/glossary/hinting
- https://glyphsapp.com/learn/hinting-manual-truetype-hinting
- http://google3/java/com/google/fonts/css/OpenSansWebFontsCssBuilder.java?l=22

Closes angular#22248
alan-agius4 added a commit that referenced this issue Dec 9, 2023
…ed fonts for Windows users

We now replace the user agent string used to perform font inlining with a Windows one. This is because Google fonts will including hinting in fonts for Windows. Hinting is a technique used with Windows files to improve appearance however results in 20-50% larger file sizes, however this will make the fonts display correctly on all platforms.

More information about this can be found in:
- https://fonts.google.com/knowledge/glossary/hinting
- https://glyphsapp.com/learn/hinting-manual-truetype-hinting
- http://google3/java/com/google/fonts/css/OpenSansWebFontsCssBuilder.java?l=22

Closes #22248
alan-agius4 added a commit that referenced this issue Dec 9, 2023
…ed fonts for Windows users

We now replace the user agent string used to perform font inlining with a Windows one. This is because Google fonts will including hinting in fonts for Windows. Hinting is a technique used with Windows files to improve appearance however results in 20-50% larger file sizes, however this will make the fonts display correctly on all platforms.

More information about this can be found in:
- https://fonts.google.com/knowledge/glossary/hinting
- https://glyphsapp.com/learn/hinting-manual-truetype-hinting
- http://google3/java/com/google/fonts/css/OpenSansWebFontsCssBuilder.java?l=22

Closes #22248

(cherry picked from commit bf5fbdd)
@angular-automatic-lock-bot
Copy link

This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.

Read more about our automatic conversation locking policy.

This action has been performed automatically by a bot.

@angular-automatic-lock-bot angular-automatic-lock-bot bot locked and limited conversation to collaborators Jan 9, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.