Вы можете применить переход к % width и просто использовать min-width в качестве фиксированного значения px.
.elem {
min-width:50px; /* min-width as the pixel value */
width:0%; /* width as the % value */
transition:width .8s ease; /* transition applied to width */
}
.apply-new-width {
width:100% !important;
}
Будьте осторожны минимальная ширина сильнее ширина . Поэтому, когда вы примените новую ширину (в%), min-width все равно переопределит ее. У вас есть несколько вариантов, чтобы справиться с этим: увеличить .apply-new-width специфичность (например: .elem.apply-new-width или div.apply-new-width) или использовать правило! Important. Обычно! Важный - это плохое решение, но здесь оно делает свое дело.
Вот jsfiddle рабочего примера. Он работает во всех браузерах, кроме, конечно, в IE, где переходы не поддерживаются, но он изящно ухудшается, поэтому мы можем сказать, что он работает везде, где:)
Приветствия