Ik ben hier toevallig op het moment ook mee bezig. Het probleem is dat transitions alleen uitgevoerd worden bij verandering van waarden. In dit geval, wordt de breedte op hetzelfde moment aangepast als dat de transition actief wordt, en dat wordt door de browser niet gezien als een veranderde waarde daarom. Twee oplossingen die ik me herinner:
element.clientHeight = element.clientHeight // tussen beide stijl-aanpassingen. Dit forceert de browser om de eerste wijziging uit te voeren.
en als dat niet werkt:
element.getElementById('blok').style.transition = "width 8s linear 3s" ;
setTimeout(function () {
element.getElementById('blok').style.width = "800px" ;
}, 10);
Beide zijn hacks, maar er is voor zover ik weet geen nette manier om dit op te lossen. Testen in verschillende browsers is zeker een goed idee. (Voor het project waar ik zelf mee bezig ben werkt Firefox wel maar Chrome nog niet op het moment, bijvoorbeeld.)