2015-08-30 3 views
1

Попытка сделать контейнер с текстом постепенно расширяется при добавлении к нему нового текста, я использовал свойство css transition. Точно, я фиксирую текущую ширину, добавляю текст, а затем отпускаю ширину. JS код выглядит следующим образом:Переход CSS зависит от порядка назначения стиля

footer.style['max-width'] = footer.offsetWidth + 'px' 
footer.innerHTML += ' additional text' 
footer.style['max-width'] = '500px' 

с этим CSS для footer:

overflow: hidden; 
text-overflow: clip; 
white-space: nowrap; 

Это did't работу. Пытаясь найти обходной путь, я добавил еще одну строку кода:

footer.style['height'] = footer.offsetHeight + 'px' 

Теперь, когда эта линия будучи поставлен перед присвоением max-width (так в начале фрагмента кода), она не работает. Но поместив его после этой строки (делая ее второй строкой) - делает. Вопрос в том, почему? и каков правильный способ работы с переходами? (?, Но в основном, почему)

Fiddle испытан в светлячок 40,0 и 39,0 хром: http://jsfiddle.net/53dbm6vz/

+0

вы можете объяснить "* не работает *"? (Используя IE11, все, кажется, * работает *) – Amit

+0

Вы правы, в IE это работает. В других браузерах видно, что одна линия получает полную ширину моментально. –

+0

Попробуйте инициализировать max-width до некоторого разумного значения (например, offsetWidth, например ..), а модификация текста и ширины происходит в более позднем цикле, либо в качестве обработчика события (например, нажатие кнопки), либо с помощью setTimeout , Возможно, FF/Chrome «игнорируют» промежуточное значение max-width, потому что оно находится внутри одного цикла JS. – Amit

ответ

1

Вполне вероятно, что проблема заключается в том, что оба ваших footer.style['max-width'] заданий происходят внутри одной синхронной работы. Браузер (ы), вероятно, полностью игнорируют промежуточное значение.

Она может быть решена, если разделить операцию на 2-х частей:

  1. Установите ширину инициализации и ...
  2. Использовать setTimeout, чтобы вызвать фактическое назначение.

Попробуйте так:

footer.style['max-width'] = footer.offsetWidth + 'px' 
window.setTimeout(function() { 
    footer.innerHTML += ' additional text' 
    footer.style['max-width'] = '500px' 
}, 0) 
Смежные вопросы