.outerWidth([includeMargin])
- Возвращает ширину элемента вместе с отступами слева и справа, границей и (необязательно) полем в пикселях.
Установка параметра [includeMargin]
на true
добавляет поля к этому числу:
.outerWidth(true)
- Возвращает ширину элемента вместе с отступами слева и справа, границей, и полем в пикселях.
.width()
- Возвращает значение без единиц измерения пикселей, не включая отступы слева и справа, границы или поля.
В соответствии с документами jQuery разница только между .width()
и .css(width)
заключается в том, что последняя включает единицы измерения ('px'), где width()
просто возвращает число (без 'px' «).
Так что, если по определению width()
не включает поля, отступы и границы, то ни один не может css(width)
У меня есть скрипт jQuery, который устанавливает ширину элемента на 50% через
обычный атрибут ширины CSS.
Это установка самого элемента (не включая поля, отступы или границы) на 50% его контейнера. Если окно является контейнером, то ширина элемента будет составлять 50% от этого.
Пример: С окном шириной 1160 пикселей ваш сценарий создаст элемент с 50% шириной 1160 пикселей или 580 пикселей (не включая поля, отступы или границы).
Если затем вывести outerWidth(true)
этого элемента, чтобы получить точное
значение в пикселях, иногда оно не соответствует $(window).width()/2
.
Когда вы смотрите на тот же элемент с outerWidth(true)
, теперь вы добавляете поле, отступ или границы к числу.
Используя мой тот же пример: С окном 1160 пикселей, $(window).width()/2
будет 580. Предполагая, что ваш элемент также 580 пикселей, .outerWidth(true)
добавит (или вычтет) поля, добавит границу и добавьте отступ к самому элементу, чтобы вы не получили 580, если поля, отступы и границы не равны нулю.
Так что, естественно, с другой "темой" (используя ваше определение), элемент, вероятно, будет иметь разные отступы, границы и поля. Я не могу сказать наверняка, так как я не вижу ни одного вашего кода.
Просто используйте .width()
вместо .outerWidth(true)
, чтобы обеспечить согласованность всех ваших тем.
EDIT:
В консоли Safari я вижу поле на body
, вызывающее то, что вы описываете. Внутри consolidated-screen-2.css
листа у вас есть 20 пикселей слева.
При расчете необходимо учитывать это поле для тела.
Так как ваш JavaScript не обновляется динамически, и его нет в jsFiddle, я больше не могу его тестировать. Когда я устанавливаю поле 0 в DOM, я не могу вызвать JS для пересчета чисел, не перезагружая страницу, что, разумеется, стирает мое переопределение DOM.
Одним из решений было бы придерживаться .width()
(игнорировать поля) во всех ваших расчетах.
Альтернативное решение, по-видимому, включает установку поля body
на ноль.
РЕДАКТИРОВАТЬ 2:
Вы продолжаете говорить, что он сообщает неправильно, но у меня есть полупрозрачная утилита линейки пикселей, наложенная на мой экран для следующего, и все проверяется ...
Эта страница в окне шириной 1228 пикселей. Правитель проверяет это.
console.log('width = ' + $slider.outerWidth(true));
= 1188
1188 плюс 40 пикселей (body
поля слева / справа) = 1228 (аналогично линейке)
Ящик открыт, и линейка проверяет, что он ровно 614 пикселей в ширину (без правой границы).
console.log('width = ' + $slider.css('width'));
= 594 px;
594 плюс 20 пикселей (body
левое поле) = 614 (аналогично линейке)
console.log('width = ' + $slider.width());
= 594
594 плюс 20 пикселей (body
левое поле) = 614 (аналогично линейке)