Получить запас элемента, если он 'авто' - PullRequest
4 голосов
/ 07 сентября 2011

Привет. Я пытаюсь расположить новый элемент dom так же, как старый, а затем скрыть старый, чтобы новый заменил его: http://jsfiddle.net/jC33F/5/

Хотя, если оригинальный элемент имеет поле: auto jQuery не может получитьЭто.Есть ли способ определить, имеет ли элемент margin: auto;?

Редактировать: Благодаря @Vibhu я придумал это http://jsfiddle.net/jC33F/43/ выглядит ужасно: D И я не уверен, что это всегда будет работать.

Не стесняйтесь предлагать что-толучше.

Ответы [ 4 ]

2 голосов
/ 07 сентября 2011

Это может быть сумасшествием, но как насчет того, чтобы проверить, есть ли у элемента margin: 0 auto (кажется, не может найти другого пути):

var margin = $("#parent").css("margin");
if($('#parent').position().left*2 == ($('#parent').parent().innerWidth() - $('#parent').outerWidth())) {
  margin = "0px auto";
}

$("#positionable").css({
    position: $("#parent").css("position"),
    top: $("#parent").css("top"),
    left: $("#parent").css("left"),
    margin: margin
});
$("#parent").hide();

Этот код в основном проверяет, равно ли левое значение #parent половине пространства между 2 краями его контейнера. Сработал для меня в этом случае, может потерпеть неудачу в других случаях.

0 голосов
/ 01 апреля 2016

Мне не понравилось ни одно из этих решений. Проверка фактической таблицы стилей является решением. Другое решение, которое я придумала, - сохранить левые / правые значения, временно изменить левое значение и посмотреть, совпадает ли правое значение. Если нет, то он установлен на авто.

var mLeft = el.css('margin-left');
var mRight = el.css('margin-Right');
el.css('margin-left',(parseInt(mLeft)-2)+'px');
var mRightChanged = el.css('margin-Right');
if (mRight != mRightChanged) {
    console.log('read element left/right margins as auto');
    el.css('margin-left','auto');
} else {
    console.log('read element left/right margins as their value');
    el.css('margin-left',mLeft);
}

Обратите внимание, это решение только для левого / правого поля.

0 голосов
/ 07 сентября 2011

Проверьте, будет ли работать возвращаемое поле пустым. Полагаю,

Имейте в виду, что если вы не установите какое-либо свойство поля, оно все равно установит #positionable свойство поля в auto

http://jsfiddle.net/jC33F/22/

РЕДАКТИРОВАТЬ:

Я нашел этот плагин jQuery, который утверждает, что он может вернуть свойство margin из элемента

http://www.bramstein.com/projects/jsizes/

0 голосов
/ 07 сентября 2011

Попробуйте с абсолютным положением для # позиционируемого

$("#positionable").css({
    position: 'absolute',
    top: $("#parent").position().top,
    left: $("#parent").position().left,
    margin: $("#parent").css("margin"),
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...