Когда вы применяете border-collapse: collapse;
к таблице, чтобы "объединить" границы своих ячеек, они начинают вызывать проблемы при определении ширины ячеек таблицы в Javascript. Например, посмотрите эту страницу:
http://game-point.net/misc/browserTests/scratchpads/jsTableWidth/
Есть две таблицы, одна с обрушенными границами и одна без. Если вы нажмете на строку в строке без сложенных границ, функции jQuery innerWidth и outerWidth сообщают о том, что я ожидаю увидеть (ширина содержимого и содержание плюс ширина границы соответственно, нет отступов).
Однако, если вы нажмете на строку в таблице со сложенными границами, вы получите непоследовательное поведение браузера, особенно в свойстве clientWidth
. В Firefox clientWidth
совпадает с width()
. В IE и Chrome он на 1 пиксель выше, а в Opera - то же, что и width()
, но Opera width()
слишком мала. Фактически, width()
- один пиксель слишком мал во всех браузерах, которые я тестировал, кроме Firefox. Поэтому, если вы сделаете скриншот, а контент на самом деле 80px, width()
- 79px (jQuery получает его из вычисленного значения CSS). Почему это?
Я хочу получить ширину фактического содержимого. Кажется, я не использую width()
, потому что только Firefox получает это право со сложенными границами. Я не могу использовать outerWidth()
, потому что это включает границы (или, может быть, только одну границу, видя, что она на 1px больше, чем фактическая ширина содержимого). Я не могу использовать clientWidth
, потому что его значение несовместимо между браузерами. Что мне делать и почему width()
1px слишком короткий в большинстве браузеров, когда границы сбрасываются?