2.4.0 • Published 5 years ago
@gbericp/use-fit-text-ep v2.4.0
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-textUsage
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:logLevel(string, default:info) - one ofdebug,info,warn,error, ornonemaxFontSize(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
Questions
- Why doesn't it work with Flexbox
justify-content: flex-end;? This appears to be a bug with Flexbox. Try using CSS Grid ormargin-top: auto; - What does the "reached
minFontSize = 20without fitting text" message in the console mean? This meansuse-fit-textwas not able to fit the text using theminFontSizesetting of 20. To ensure the text fits, setminFontSizeto a smaller value.
Changelog
- v2.4.0
- handle case where
minFontSizeis set larger than thefontSizevalue needed to fit the text in the div. Log a message to the console in this case. - fix final adjustment calcuation
- add
logLeveloption to control what is logged to the console
- handle case where
- v2.3.0
- automatically recalculate font size when content changes
- fix bug where a recalculation was not done on resize if the text initially fit in the div
- v2.2.0 - add
onStartandonFinishcallbacks - v2.1.3 - export
TOptionsTypeScript type - v2.1.2 - remove
/// <reference types="next" />indist/index.d.ts - v2.1.0
- fix SSR/prerender issue where text did not resize
- suppress
useLayoutEffectwarning for server render
- v2.0.0
- use
ResizeObserverto always recalculate on container resize - remove
recalcOnResizeoption useLayoutEffectinstead ofuseEffectto avoid flashing
- use
- v1.2.1 - fix scrollbar issue in example
- v1.2.0 - add
recalcOnResizeand other options - v1.1.0 - fix binary search bug
- v1.0.2 - add example
- v1.0.0 - initial release
2.4.0
5 years ago