DEV Community

Cover image for Typography in a CRA
Manav Misra
Manav Misra

Posted on

Typography in a CRA

Unsplash Photo by Alice Donovan Rouse

This post assumes familiarity with CRA (create-react-app).

Ease of Typography โœจ

Recently, I discovered Typography.js. I love utilities like this because thinking about design sometimes is just too much for my feeble mind ๐Ÿง .

A powerful toolkit for building websites with beautiful design.

This means that we simply yarn add typography and then pick a theme (e.g. yarn add typography-theme-fairy-gates).

Then, in our app (maybe in 'index.js'):

import Typography from "typography";
import fairyGatesTheme from "typography-theme-fairy-gates";

const typography = new Typography(fairyGatesTheme);

typography.injectStyles();
Enter fullscreen mode Exit fullscreen mode

Upon removing ๐Ÿ”ฅ all of the 'boilerplate CRA ๐Ÿ’ฉ,' adding some basic text to render and then doing yarn start ๐Ÿ’ฆ and then checking โœ”๏ธ our app in the dev tools:

'script tags' for typography

With that, your typography already looks better...but depending on what fonts are on your system, you're probably looking ๐Ÿ‘€ at a 'fallback font.'

Actually Loading the 'Google Fonts' Stylesheet

This is b/c we are not actually linking to the font's 'Google fonts' stylesheet, and this is a bit tricky to 'inject' when using create-react-app due to it being a 'server' generated app.

We would need: yarn add react-typography...but since we are using CRA, it's not clear how to 'directly' inject this into our app.

The directions in the documentation are for 'non-CRA' apps where we are directly generating our entire HTML structure, as opposed to using the 'public' directory ๐Ÿ“.

Here's the fix:

  1. import { GoogleFont } from "react-typography";
  2. Inside of ReactDOM.render (in 'index.js' as per CRA):
  ReactDOM.render(
  <React.StrictMode>
    <App />

    {/* Add this element so we can see the 'link tag' generated in the dev tools markup. */}
    <GoogleFont typography={typography} />
  </React.StrictMode>,
  document.getElementById("root")
);
Enter fullscreen mode Exit fullscreen mode

Now, have a look again in 'dev tools' for your App and see something like this:

link tag to Google Fonts

Notice the link tag there.

Copy that and dump it into the <head> tag of 'public/index.html':

<link
      href="//fonts.googleapis.com/css?family=Work+Sans:600|Quattrocento+Sans:400,400i,700"
      rel="stylesheet"
      type="text/css"
    />
    <title>Expenses!</title>
  </head>
Enter fullscreen mode Exit fullscreen mode

You can now completely remove:

{/* Add this element so we can see the 'link tag' generated in the dev tools markup. */}
    <GoogleFont typography={typography} />
Enter fullscreen mode Exit fullscreen mode

You can also yarn remove react-typography

Top comments (0)