Подтвердить что ты не робот

JQuery.css(): Firefox не возвращает значения "auto"

Я устанавливаю верхние или нижние и левые или правые значения в несколько элементов. Когда я пытаюсь получить доступ к этим значениям с помощью Firefox (16.0.2), я получаю неправильное значение для top (конкретное значение вместо auto)

CSS

div {
    bottom:200px;
    left:0px;
    top:auto;
    right:auto;
}

JS

$(function(){
    var top = $('div').css('top');
    alert(top);
});​

Вы можете попробовать его здесь: http://jsfiddle.net/UEyxD/2/ (хорошо работает в Chrome/Safari)

Любые идеи, как предотвратить это? Я хочу получить

4b9b3361

Ответ 1

Это зависит от браузера и того, как он интерпретирует стили, он несколько не поддается контролю. Однако, с общими обходами CSS и jQuery вы сможете обойти это. Например, если вам не нужно полностью позиционировать элемент, вы можете удалить его или изменить на position:static;

Посмотрите на question.

Что касается того, почему Chrome и IE возвращают разные значения:.css() предоставляет унифицированный шлюз для функций вычисленного стиля браузеров, но он не унифицирует способ фактического вычисления браузером стиля. Это нередко для браузеров по-разному решать такие случаи кросс.

Ответ 2

У меня также была эта неприятная проблема.

Некоторые браузеры возвращают вычисленную позицию, если элемент виден в данный момент. Трюк заключается в том, чтобы скрыть его, прочитать css, а затем снова сделать его видимым (если он еще не скрыт).

Я написал удобную функцию, которая позаботится об этом и вернет auto в Firefox.

jsFiddle

var getCss = function($elem, prop) {
        var wasVisible = $elem.css('display') !== 'none';
        try {
            return $elem.hide().css(prop);
        } finally {
            if (wasVisible) $elem.show();
        }
    };


alert( getCss($('div'), 'top') );

finally - это просто вернуть видимость элементу непосредственно перед возвратом функции.

Вы должны использовать эту функцию только для ситуаций, в которых вы ожидаете возвращения auto.

Ответ 3

Вы можете получить целочисленное значение верхнего значения при установке "auto" с помощью кода ниже:

$(function(){
    var top = $('div').offset().top;
    alert(top);
});​
  • offset Возвращаемое значение позиции Когда вы устанавливаете на авто

Ответ 4

Просто удалите стиль position, и вы получите auto вместо вычисленного значения.

div {
    top: auto;
    bottom:20px;    
    right:20px;
    left:0px;
}

вы можете протестировать его здесь.