withAsyncFonts
This is small and flexible module for managing custom loaded fonts. It's designed to work with css modules & css-in-js tools out of the box.
import withAsyncFonts from 'react-with-async-fonts'; const openSansFont = family: 'Open Sans' class: initial: 'system-font' success: 'opensans-font' ; openSansFont openSansFont <h1 =>Hello!</h1>;
Full Usage
className
With basic import withAsyncFonts from 'react-with-async-fonts'; // Required fonts objectconst fonts = // Font key will be prop with same name when passed to component openSans300: // Only required field, should be same as in CSS // Fonts can be loaded in any way (e.g. via link or @import) family: 'Open Sans' // Additional font props you can use weight: 300 style: 'normal' stretch: 'normal' // Class prop for using via `className` class: initial: 'system-font' success: 'opensans-font' // `initial` will be used instead if not set fallback: 'system-font' styles: initial: fontFamily: 'Arial, Helvetica, sans-serif' success: fontFamily: 'Open Sans, sans-serif' fallback: // `initial` will be used instead if not set fontFamily: '"Comic Sans", cursive' // `timing` prop will be set for successfully loaded fonts only timing: 100 // You can also provide custom data which will be passed only // for successfully loaded font fooBar: 42 ; const options = // Optional callbacks for handling fonts status {} {} // Optional timeout (5s by default), in ms timeout: 5000; const FooComponent = openSans300 <div =>Hello world</div>; fonts optionsFooComponent;
React JSS
Withimport React from 'react';import withAsyncFonts from 'react-with-async-fonts';import injectSheet from 'react-jss'; const fonts = openSansFont: family: 'Open Sans' ready: true ; // Styles with dynamic `fontFamily` propconst styles = heading: color: 'purple' fontSize: 25 openSansFontready ? 'Open Sans, sans-serif' : 'Helvetica, Arial, sans-serif' ; const Heading = classes children <h1 => children </h1>; // You can compose those HoCs for sureconst HeadingWithFonts = Heading;const HeadingWithStyles = HeadingWithFonts; ;
styled-components
Withimport withAsyncFonts from 'react-with-async-fonts';import styled from 'styled-components'; const fonts = openSansFont: family: 'Open Sans' ready: true styles: initial: fontFamily: 'Arial, Helvetica, sans-serif' success: fontFamily: 'Open Sans, sans-serif' fallback: // `initial` will be used instead if not set fontFamily: '"Comic Sans", cursive' ; const Button = styledbutton` font-family: ; visibility: ; border-radius: 3px; padding: 0.25em 1em; margin: 0 1em; background: transparent; color: palevioletred; border: 2px solid palevioletred;`; fontsButton;
License
MIT