Что-то не так с CSS в IE сверху и слева?

Следующий код jQuery отлично работает с Safari, Opera, FF2 и FF3. Он помещает загруженный DIV (с оживленным загруженным GIF-файлом) поверх элемента FORM на моей веб-странице. Проблема в том, что в IE6 и IE7 он получает ширину и высоту должным образом, но не кажется, что он правильно перемещается вверх и вниз. В чем подвох?

var nH = $('#' + sForm).attr('offsetHeight');
var nW = $('#' + sForm).attr('offsetWidth');
var nT = $('#' + sForm).attr('offsetTop');
var nL = $('#' + sForm).attr('offsetLeft');

$('#busy')
    .css('position','absolute')
    .css('height', nH + 'px')
    .css('width', nW + 'px')
    .css('top', nT + 'px')
    .css('left', nL + 'px')
    .show();

Обратите внимание, что на моей странице есть несколько элементов FORM. (Причина загруженного GIF в том, что я делаю сообщение AJAX в фоновом режиме при отправке формы.)

Обратите внимание: я также пробовал значение .position() плагина 1.2 jQuery Dimensions для верхнего и левого угла, и это помогло, но, похоже, значение top становилось все меньше, чем дальше я двигался вниз по странице.

Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
0
4 057
3

Ответы 3

Я заставил его работать со значением .position () плагина jQuery Dimensions 1.2 для верхнего и левого угла. (Он возвращает массив, в котором вы можете получить значения верхнего и левого массивов.) Исправление заключалось в том, что мне пришлось перехватить IE6 и просто вычесть некоторое фиксированное число (12 пикселей в моем случае) для вершины и добавить это же число по высоте. В IE7 я мог сделать то же самое, но по какой-то причине мне пришлось по-разному вычислять верх и высоту для первых 200 пикселей или меньше. Ваша ситуация может быть другой, в зависимости от вашего предыдущего CSS, вашего reset.css и так далее.

Вы уверены, что элемент настроен на отображение: блок? Также вы можете избежать множественных вызовов функции css, передав такой хэш:

$('#busy')
    .css({'position':'absolute',
          'height': nH + 'px',
          'width', nW + 'px',
          'top', nT + 'px',
          'left', nL + 'px'})
    .show();

Спасибо за совет. Я не думал о производительности, а должен был думать. Ты прав.

Volomike 09.01.2009 19:41

Прямо сейчас jQuery (последняя общедоступная версия) включает измерения в качестве основных функций.

Попробуйте использовать $ (element) .offset () (он возвращает объект со свойствами "left" и "top"). Я много использовал его, и он идеально подходит для многих браузеров (ie6 / 7, opera, safari, chrome, ff2 / 3).

Спасибо за чаевые. Похоже, я могу перестать использовать плагин jQuery Dimensions. Я попробую посмотреть, поможет ли мне смещение. Может быть еще одна вещь, чтобы ускорить веб-страницу и порадовать YSlow.

Volomike 09.01.2009 19:42

Другие вопросы по теме