React hook used to fit text in a div
use-fit-text
React hook that iteratively adjusts the font size so that text will fit in a div.
- checks if text is overflowing by using
scrollHeightandoffsetHeight - recalculates when container is resized (using (polyfilled)
ResizeObserver) - recalculates when content changes
- uses binary search; with default options, makes a maximum of 5 adjustments with a resolution of 5% font size from 20-100%
- < 4 kB minified + gzipped
- written in TypeScript
Installation
npm install --save use-fit-text
Usage
import React from "react";
import useFitText from "use-fit-text";
function Example() {
const { fontSize, ref } = useFitText();
return (
<div ref={ref} style={{ fontSize, height: 40, width: 100 }}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</div>
);
}
Demo / example code
- Demo site: https://saltycrane.github.io/use-fit-text/
- Example code is in the
/examplesfolder
API
useFitText(options)
-
Returns an object with the following properties:
fontSize(string) - the font size as a string (CSS percent) to be passed as thefontSizeproperty of thestyleprop of thedivref(React.MutableRefObject<HTMLDivElement>) - the ref to be passed to therefattribute of thediv
-
options(optional) - an object with the following optional properties:maxFontSize(number, default:100) - maximum font size in percentminFontSize(number, default:20) - minimum font size in percentonFinish((fontSize: number) => void, default:undefined) - function that is called when resizing
finishes. The final fontSize is passed to the function as an argument.onStart(() => void, default:undefined) - function that is called when resizing startsresolution(number, default:5) - font size resolution to adjust to in percent