Это может быть очень сложно (я бы хотел сказать «невозможно») сделать это на стороне сервера, потому что существует слишком много клиентских эффектов, которые невозможно рассчитать (настройки браузера по умолчанию для полей, отступов, Высота строки, размер шрифта и пользовательские настройки для увеличения), я бы предпочел сделать это на стороне клиента.
Я сделал небольшой пример, используя jQuery: http://jsfiddle.net/doktormolle/XwUuA/
Он берет дочерние узлы целевого элемента и упаковывает их в новые элементы, которые имеют те же размеры, что и целевой элемент (если высота обертки не превышает высоту целевого элемента) ,
Может быть, это полезно для вас (это черновик, конечно, над ним еще нужно поработать, чтобы он соответствовал вашим потребностям)