Почитайте про
text-overflow, может быть легче не ограничивать размер блока, а скрыть то, что не влазит. Мне кажется, это идеально.
А высчитать можно будет только динамически, то есть при вводе, ведь буквы (к примеру) "Ш" и "ь" имеют совсем разную ширину, а пользователь может ввести любой набор символов.
Под "динамически" я имею ввиду при каждом Нажатии клавиши обрабатывать его - получать ширину буквы (создавать Текстовый узел с этой буквой и получать его ширину) на нажатой клавише и уже исходя из оставшегося места в блоке либо делать preventDefault() и т.п, либо, собственно, допускать букву к вводу. Но это такая морока :)