jQuery .css () ведет себя по-разному в FF и IE - PullRequest
3 голосов
/ 30 мая 2010

Если границы отсутствуют, почему IE возвращает medium, а FF возвращает 0px в следующем запросе?

.css("border-left-width")

Я проверял это в FF 3.6.3 и IE 6/7.

Пример здесь

Ответы [ 3 ]

7 голосов
/ 30 мая 2010

Использование css() для чтения стилей, применяемых в таблицах стилей, делает разные вещи в разных браузерах.

В IE он считывает значения из специфического для IE объекта currentStyle, который является единственным способом доступа к этой информации. currentStyle дает вам то, что CSS называет "указанным стилем" , то есть то, что вы написали в таблице стилей. Если вы не изменили его, начальное значение border-width будет «средним», так что вы получите именно это.

В других браузерах css() использует стандартный метод DOM Level 2 CSS getComputedStyle(). В отличие от IE currentStyle, это возвращает «вычисленный стиль», который отличается от указанного стиля тем, что относительные единицы, такие как «средний», разрешаются до фактической длины.

Здесь «средний» обычно разрешается до длины около 3px, но вы, вероятно, фактически не включали границу для этого элемента, поэтому по умолчанию он равен border-style: none. Это делает border-width разрешение нулевым.

Обычно «указанный стиль» и «вычисляемый стиль» достаточно близки друг к другу, чтобы вы могли справиться с ними одинаково, и именно на это опирается метод css() в jQuery. Но на самом деле они не совсем одинаковые.

1 голос
/ 30 мая 2010

Похоже, он просто возвращает настройки браузера по умолчанию. Если границы вообще не указаны, каждый браузер имеет свои значения по умолчанию. Так что здесь, если бы вы добавили стиль границы, IE автоматически отобразил бы среднюю границу в этом стиле, но FF не имел бы ничего, потому что ширина по умолчанию равна 0.

0 голосов
/ 30 мая 2010

Всякий раз, когда вы разрабатываете веб-стиль, вы должны всегда сбрасывать все элементы на значения по умолчанию, чтобы они соответствовали всем браузерам.

Включите пакет YUI Reset в ваш css, чтобы все значения были ошибочными во всех браузерах.

http://developer.yahoo.com/yui/reset/

Затем, когда вы вызываете значение элемента css, все они начинаются с того же значения, если только другой экземпляр jquery не изменил его, прежде чем вы запросили значение.

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