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
scrollHeight
andoffsetHeight
- 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
/examples
folder
API
useFitText(options)
-
Returns an object with the following properties:
fontSize
(string
) - the font size as a string (CSS percent) to be passed as thefontSize
property of thestyle
prop of thediv
ref
(React.MutableRefObject<HTMLDivElement>
) - the ref to be passed to theref
attribute 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