Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   непонятно работает getComputedStyle с % (https://javascript.ru/forum/dom-window/24559-neponyatno-rabotaet-getcomputedstyle-s-%25.html)

land15 05.01.2012 22:09

непонятно работает getComputedStyle с %
 
Есть такая функция получения CSS свойств в любой единице измерения:
function getStyleValue(e, name) {
if (name == 'float') name = 'cssFloat';

function getIEComputedStyle(e, name) {

  var value = e.currentStyle[name] || 0;
  if (isNaN(parseInt(value))) { value = 0; }
  var leftCopy = e.style.left
  var runtimeLeftCopy = e.runtimeStyle.left

  e.runtimeStyle.left = e.currentStyle.left
  e.style.left = (name === "fontSize") ? "1em" : value
  value = e.style.pixelLeft + "px";

  e.style.left = leftCopy 
  e.runtimeStyle.left = runtimeLeftCopy 
 
  return value
}
   return window.getComputedStyle ? (window.getComputedStyle(e, null)[name] || 0) : getIEComputedStyle(e, name);

}

Она взята отсюда, работает везде правильно.
Вот в этом участке возникает вопрос при задании внутренних отступов в процентах
availableWidth = VisibleWidth - parseInt(getStyleValue(e, 'borderLeftWidth')) - 
                                parseInt(getStyleValue(e, 'borderRightWidth'))  - 
                                parseInt(getStyleValue(e, 'paddingLeft')) - 
                                parseInt(getStyleValue(e, 'paddingRight')) + "px";
         e.style.width = availableWidth;
availableHeight = VisibleHeight - parseInt(getStyleValue(e, 'borderTopWidth')) - 
                                  parseInt(getStyleValue(e, 'borderBottomWidth')) - 
                                  parseInt(getStyleValue(e, 'paddingTop')) - 
                                  parseInt(getStyleValue(e, 'paddingBottom')) + "px";
         e.style.height = availableHeight;

availableWidth вычисляется правильно, availableHeight - нет, т.к. процентаж вычисляется почему-то от ширины, т.е если задано в CSS width:500px; height:400px; padding:10%; я получаю pLeft-50px, pRight-50px, pTop-50px and pBottom-50px (instead 40px).
Результат такой везде.
Видел кто такое? Что не так?


Часовой пояс GMT +3, время: 17:53.