Importing fonts used to be pretty straightforward. With modern JavaScript focused projects and build tools it can be quite confusing. This is the approach that worked for my Gatsby project.
I wanted to add custom fonts to my Gatsby project, but a lot of resources online seemed outdated. Some suggested directly importing font files in your TypeScript or JavaScript files but that didn’t work for me.
I use styled-components for CSS, but createGlobalStyle wouldn’t work for me since I use object syntax.
import { createGlobalStyle } from "styled-components";
createGlobalStyle({
"@font-face": {
// font 1
},
"@font-face": {
// font 2 would override font 1
// because the "@font-face" key is the same
},
});
I downloaded my fonts from Google Fonts and generated the .woff and .woff2 files with the Font Squirrel Webfont Generator.
I could have used the typeface-source-sans-pro package but I didn’t want any unused font definitions, so I briefly checked how the packages in the Typefaces repository worked and copied that. It turned out to just be a CSS file. Simple enough!
@font-face {
font-family: "Source Sans Pro";
font-style: normal;
font-display: swap;
font-weight: 400;
src:
local("Source Sans Pro Regular normal"),
local("Source Sans Pro-Regularnormal"),
url("./ssp-regular.woff2") format("woff2"),
url("./ssp-regular.woff") format("woff");
}
@font-face {
font-family: "Source Sans Pro";
font-style: normal;
font-display: swap;
font-weight: 600;
src:
local("Source Sans Pro SemiBold normal"),
local("Source Sans Pro-SemiBoldnormal"),
url("./ssp-semibold.woff2") format("woff2"),
url("ssp-semibold.woff") format("woff");
}
I then imported it in my gatsby-browser.js. This will create a new <link> tag in your <head>.
// gatsby-browser.js
import "./src/assets/fonts/index.css";
After importing the CSS file I was able to use the fonts anywhere in my CSS like my typography.js config or my Styled Components.
const MyComponent = styled.div({
fontFamily: `'Source Sans Pro', sans-serif`,
});
That’s it! I hope this helped you in any way.