Fix crossbrowser issues

It didn't work in Safari/Firefox correctly, because:

* Browsers had different default line-height
* Browsers handle float widths/heights/line-heights differently

Fixed that.

Also, made optimization for letter-size calculation - now we only do
that once, and recalculate on browser resize