Fitting Text to a Container
There are a number of ways to go about putting some text in a container and having it size itself to fill that container. There are different technologies we can use and different considerations to think about. Let us count the ways.
Magic Number it with viewport units
If you set type with
vw (viewport width) units, you can find an exact number where the text pretty closely fits the container and doesn’t break as you resize. I’d call this a magic number.
In this case,
font-size: 25.5vw; works down to a 320px viewport, but still will break much lower than that.
This is kind of a less exotic version of fluid typography, which involves more of a sprinkling of viewport units and min/max sizes.
Dave Rupert’s FitText is up for the job. You still need a bit of a magic number to get the sizing just right for any particular job:
FitText without jQuery
If you aren’t using jQuery, there are options. Listed from the repo:
- non-jQuery FitText from @adactio
- Angular.js FitText.js from @patrickmarabeas
- AMP-HTML FitText
- FitText UMD by @peacechen
Example of the first:
height on the element for it to do it’s thing.
fitty is more like FitText in that it resizes type to maximize just horizontally, but actually seems to require no magic numbers.
TextFill is jQuery-based and requires a width, height, and a configured maximum font size to work. Here’s the basic demo we’ve been working from:
FlowType is kind of designed to work on a whole document of text, resizing it all fluidly at once, with minimum and maxium viewport sizes. But you can scope it however you want. You also apply a magic number to get things how you want them.
Just use SVG
width: 100% and a
viewBox, SVG will be a fullsize box that resizes with an aspect ratio. Pretty neat trick! To set the type, you’ll need some magic numbers to get that
viewBox just right and push the text into the right spot — but it’s doable with zero dependencies, just like the viewport units demo.