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

feat: custom fonts with preloading #209

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open

Conversation

jbmoelker
Copy link
Member

@jbmoelker jbmoelker commented Nov 9, 2024

Changes

  • Adds custom font import strategy using Fontsource so font files are served from same domain and are automatically hashed for caching (when combined with perf: cache static assets (generated by Astro) #207).
  • Adds resource hints to preload the fonts for faster page rendering.

Note: based on #208 so the <PerfHead> could easily be extended.

Associated issue

Resolves #87

How to test

  1. Open preview link
  2. Verify a custom font is used for the page (body)
  3. Open DevTools > Network and verify font files are preloaded

Checklist

  • I have performed a self-review of my own code
  • I have made sure that my PR is easy to review (not too big, includes comments)
  • I have made updated relevant documentation files (in project README, docs/, etc) created follow-up issue Document assets setup #210
  • I have added a decision log entry if the change affects the architecture or changes a significant technology
  • I have notified a reviewer

Part of #87.

# To do

- [ ] add docs (assets/fonts/README.md?)
- [ ] use swap with Fontaine?
Copy link

cloudflare-workers-and-pages bot commented Nov 9, 2024

Deploying head-start with  Cloudflare Pages  Cloudflare Pages

Latest commit: 42e0685
Status: ✅  Deploy successful!
Preview URL: https://44cda987.head-start.pages.dev
Branch Preview URL: https://feat-87-custom-fonts.head-start.pages.dev

View logs

src/assets/fonts.ts Outdated Show resolved Hide resolved
},
];

export const getFontCss = (font: Font) => {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: import raw (import archivo400css from '@fontsource/archivo/latin-400.css?raw';) is not an option as it results in font urls starting with ./files/... that are not resolved. So instead we generate the font declaration ourselves with the url that is resolved correctly in production.

Note 2: I've left out font-display: swap; as we don't have a fallback yet that doesn't cause a layout shift. See to do on Fontaine and font swap.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using fontaine seems a bit involved. Rather keep this PR small and merge this first, to add font swap as perf enhancement in a separate PR.

@jbmoelker jbmoelker requested a review from decrek November 9, 2024 15:05
@@ -1,7 +1,22 @@
---
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add tests for this file?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That also triggers the question if the fonts and preConnectOrigins should be passed as props?

@jbmoelker jbmoelker marked this pull request as ready for review November 9, 2024 17:30
Base automatically changed from perf/200-preconnect-origins to main November 11, 2024 19:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Custom Fonts
1 participant