Дело в том, что для того, чтобы определить новую ширину, приходится считать старую. А старая равна значению, установленному при предыдущем запуске функции пересчета.
Т.е., по-хорошему, нужно сделать примерно так:
- скидываем старое значение style.width в переменную
- устанавливаем style.width в auto !important
- считаем clientWidth
- устанавливаем обратно style.width
- если clientWidth, посчитанный ранее, оказался меньше, чем надо,— кладем нужное значение, так, чтобы expression его вернул
Но тут есть одно но: для того, чтобы посчитать clientWidth, нужно сделать reflow, а для этого нужно значение самого expression, и ie6 вываливается в бесконечную рекурсию, а после этого очень скоро падает. :/