На похожий вопрос я уже отвечал на stackoverflow, поэтому чтобы не дублировать просто дам ссылку на
свой ответ c пояснением и примером кода.
В том примере, шрифт будет уменьшаться только в том случае, если он не влезает в блок, а в ином случае остается как есть по умолчанию. Если вам необходимо, чтобы шрифт также и увеличивался (т.е. совсем полностью подстраивался), то возможно
этот чуть доработанный пример на codepen вам более подойдет.
Если вкратце, то текст в блоке оборачивается дополнительным контейнером с
overflow: hidden
под размер блока и враппером, который просто оборачивает текст. Взяв огромный размер шрифта (так, чтобы враппер переполнял контейнер) и затем уменьшая его, мы уменьшаем размеры враппера и как только этот враппер перестает переполнять контейнер - убираем все лишнее(и контейнер и враппер) и оставляем подобранный размер. Данный пример похож на тот, что упоминал
Semantic.Moscow, с расчетом размера шрифта за счет
overflow: scroll
и снижения размера шрифта до тех пор, пока скролл не пропадет.
Решение не самое лучшее, но возможно оно вам поможет.