Есть такая функция получения 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).
Результат такой везде.
Видел кто такое? Что не так?