IE лежит о borderWidth ?! Как получить актуальную стоимость? - PullRequest
3 голосов
/ 10 ноября 2010

По умолчанию, многие из вас знают, IE имеет 2px границу вокруг тега body.IE считает эту границу за пределами обычной страницы.По сути, это означает, что источник документа на самом деле имеет значение [borderLeftWidth, borderTopWidth].

Это создает проблемы при выполнении вычислений в JavaScript, которые требуют как clientXY, так и screenXY.Поскольку между двумя значениями есть граница, вы должны компенсировать это, добавив borderWidth.По умолчанию эта граница составляет 2 пикселя (если вы не изменяете страницу).

Однако, так как тело может иметь также определенную пользователем рамку (например, сплошной красный цвет 7px), вы не можете просто компенсировать, добавив иливычитая 2px.Очевидно, вам нужно использовать фактическое значение document.body.currentStyle['borderTopWidth'].По умолчанию это возвращает medium.Поскольку значение medium может варьироваться в зависимости от версии браузера, вам необходимо выполнить проверку getPixelValue (я использовал: http://blog.stchur.com/2006/09/20/converting-to-pixels-with-javascript/).

При выполнении этой проверки medium возвращает 4px. Но это не так! Граница тела на самом деле 2px, хотя она говорит о medium. Это заставило меня задуматься, IE может по-разному отображать значения для границы тела. Но после ручной установки borderWidth на medium, он исправляет себя до 4pxПо какой-то причине, IE лежит в теле borderWidth по умолчанию.

Итак, мой вопрос: есть ли способ получить реальное значение границы тела? Или есть способ проверить, есть ли у пользователяустановить границу уже (таким образом, она больше не является 2px по умолчанию). Выполнение проверки измененной пользователем границы определенно было бы моим последним средством, так как IE может решить удалить границу по умолчанию, таким образом нарушая мои сценарии.

1 Ответ

0 голосов
/ 11 ноября 2010

Сегодня утром в ванной было прозрение, и я нашел решение.

var b = document.body;
var first1 = b.clientHeight;
var first2 = b.clientWidth;
b.style.borderTopWidth = '0px';
b.style.borderLeftWidth = '0px';
b.style.borderTopWidth = first1 - b.clientHeight + "px";
b.style.borderLeftWidth = first2 - b.clientWidth + "px";

, которое подтверждает неправильное значение medium в IE.Если у кого-то есть лучшее решение, покажите его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...