Du måste nog använda javascript för att göra det här på något bättre sätt. Övergången kan du göra med CSS-transitions, men det fungerar inte i IE9 och nedåt.
Jag har tidigare använt jQuery pluginet Autosize för precis detta. Pluginet är litet och utan massa lulllull. Det gör exakt vad det ska och inte mer än så. För att textarean ska exponera snyggare(animeras) används här CSS-transitons, vilket inte fungerar i äldre versioner av IE. Men det är ju inte något stort problem tycker jag. Givetvis skulle man ju kunna animera det med js, men jag tycker det är onödigt att föra in massa extra komplexitet för att göra det lite snyggare i några föråldrade browsers så länge det endast är kosmetiska skillnader.
http://www.jacklmoore.com/autosize