EDIT 3/Final: проблема/вопрос Computed Style объяснена ниже, но для других, которые появятся позже, моя настоящая проблема решена с помощью Flex Boxes и измерений Vx в сочетании с border-box. ИМХО "дисплей: гибкий;" является ответом на многие вопросы, и, хотя я изо всех сил пытаюсь заставить его делать то, что я хочу, избавляет вас от необходимости работать против CSS!
РЕДАКТИРОВАТЬ 2: Следующее, несомненно, нуждается в рефакторинге, но если вы можете сказать мне, что оно делает то, о чем я просил, это было бы здорово. Изменение, которое я должен был сделать, состояло в том, чтобы добавить clientTop с offsetTop в уравнении: -
function resizeContent()
{
var browserHeight = window.outerHeight;
var offesetHeight, offsetWidth;
var viewHeight = window.innerHeight;
var viewWidth = window.innerWidth;
var chromeFootPrint = browserHeight - viewHeight;
var tmpHeight = viewHeight;
if (window.matchMedia("(orientation: portrait)").matches) {
if (viewWidth > viewHeight) {
viewHeight = viewWidth - chromeFootPrint;
viewWidth = tmpHeight + chromeFootPrint;
}
} else {
if (viewWidth < viewHeight) {
viewHeight = viewWidth - chromeFootPrint;
viewWidth = tmpHeight + chromeFootPrint;
}
}
var dimTarget = logScroll;
var offsetTop = dimTarget.offsetTop + dimTarget.clientTop;
var offsetLeft = dimTarget.offsetLeft + dimTarget.clientLeft;
while (dimTarget = dimTarget.offsetParent) {
offsetTop += dimTarget.offsetTop + dimTarget.clientTop;
offsetLeft += dimTarget.offsetLeft + dimTarget.clientLeft;
}
logScrollHeight = viewHeight - (offsetTop + fireBreak);
logScroll.style.height = logScrollHeight + "px";
logScroll.style.width = getStyle(contentDiv).width;
logWindow.style.height = logScroll.style.height;
logWindow.style.width = logScroll.style.width;
logWindow.scrollTop = logWindow.scrollHeight - logScrollHeight;
contentDiv.style.visibility = "visible"; // Now we're presentable
}
а это противопожарный расчет: -
var outerStyle = getStyle(wholeScreen);
fireBreak = Number(outerStyle.paddingBottom.match("[0-9.]*"))
+ Number(outerStyle.borderBottomWidth.match("[0-9.]*"))
;
resizeContent();
РЕДАКТИРОВАТЬ 1: Хорошо, позвольте мне перефразировать вопрос: - Как узнать высоту моего содержимого DIV с помощью: -
width: 250px;
border: 3px solid green;
padding: 0.5em;
box-sizing: border-box;
В настоящее время мне нужно сделать это: -
logScrollHeight = viewHeight -
(offsetTop + Number(getStyle(headerDiv).paddingBottom.match("[0-9.]*")));
Оригинальный вопрос: -
Это обязательно будет дубликат, но после почти часа поиска я нашел много похожих/идентичных вопросов, но не нашел реального ответа :-(
Почему границы и отступы не вычитаются из высоты?
К счастью, возвращаемые значения boundryBottomWidth и PaddingBottom были преобразованы в пиксели (включая, к сожалению, строку «px»), но разве в стандарте не сказано, что должна быть возвращена полезная высота?
getComputedStyle
возвращает только текущие назначенные правила, после синтаксического анализа и сериализации вы не можете получить из него высоту элемента (например, он может быть обернут масштабированным элементом). Чтобы получить высоту элемента, либо вызовите его методgetBoundingClientRect
, или его свойстваclientHeight
илиoffsetHeight
в зависимости от того, что вы хотите. - person Kaiido   schedule 15.07.2017let s = getComputedStyle(element); let height = element.clientHeight - (parseFloat(s.paddingTop) + parseFloat(s.paddingBottom)
. Обратите внимание, чтоbox-sizing
будет влиять на то, как будут вычисляться свойства CSSheight
иwidth
, но здесь вы не устанавливаетеheight
: это не влияет на то, откуда эти методы будут выводить текущие значения. - person Kaiido   schedule 16.07.2017