документ.тело.стиль.marginTop возвращает пустую строку в JS
насколько я понимаю, это [какой-то элемент].стиль.maginTop вернет строку с верхним краем элемента.
вместо этого я всегда получаю пустую строку. Я хочу использовать это с телом, но я также попробовал div, и это тоже не сработало.
console.log(document.body.style.marginTop); // logs ""
console.log(typeof(document.body.style.marginTop)); // logs "String"
var elem = document.getElementById("testDiv");
console.log(elem.style.marginTop); // logs ""
body {
margin-top:100px;
}
#testDiv {
margin-top:50px;
}
hi!
<div id="testDiv">test</div>
Я не уверен, что я делаю неправильно... У кого-нибудь есть не-jQuery решение для этого?
5 ответов
на HTMLElement.стиль возвращает только встроенные стили:
HTMLElement.свойство style возвращает объект CSSStyleDeclaration, представляющий атрибут стиля элемента.
для доступа к стилям из таблиц стилей используйте
можно использовать getComputedStyle
и getPropertyValue
чтобы получить верхнюю границу.
console.log(document.body.style.marginTop); // logs ""
console.log(typeof(document.body.style.marginTop)); // logs "String"
var elem = document.getElementById("testDiv");
//console.log(elem.style.marginTop); // logs ""
console.log(getComputedStyle(elem).getPropertyValue("margin-top"));
alert(getComputedStyle(elem).getPropertyValue("margin-top"));
body {
margin-top:100px;
}
#testDiv {
margin-top:50px;
}
hi!
<div id="testDiv">test</div>
проверено и работает.
я не знаю, почему, но я получил его работу, неявно назначив Я знаю, почему мой ответ работает (прошло более 2 лет, поэтому я лучше знаю, почему). Установив значения margin-top
через JS в первую очередь.div#test
и body
to 50px
и
100px
такой:
document.getElementById("testDiv").style.marginTop = '50px';
document.body.style.marginTop = '100px';
я фактически устанавливаю свойство CSS / значение встроенных элементов:
<body style='margin-top: 100px'>
<div id='testDiv' style='margin-top: 50px'>test</div>
</body>
, когда .style
свойство используется, свойство/значение CSS, которое следует за ним, всегда встроено. Одна важная вещь, которую нужно помнить о встроенных стилях CSS, - это то, что они имеют более высокий приоритет, чем другие 2 средства объявления CSS: внешние таблицы стилей (ex. <link href="file.css"...
) и встроенная таблица стилей (ex. <style>...</style>
). Единственный способ переопределить встроенный стиль-использовать !important
(если конечно встроенный стиль имеет !important
как хорошо.)
Итак, если.style
свойство используется для чтения свойства / значения элемента, оно будет возвращать только встроенное значение стиля, если оно действительно существует, которое в Случай OP этого никогда не делал, и в моем случае это было так, потому что я использовал .style
для присвоения свойства / значений. Хотя мое решение является правильным, ответы на Николо и Г-Н Карлссон лучше, так как вы получите значения из всех таблиц стилей CSS.
document.getElementById("testDiv").style.marginTop = '50px';
document.body.style.marginTop = '100px';
console.log(document.getElementById("testDiv").style.marginTop);
console.log(document.body.style.marginTop);
body {
margin-top: 100px;
}
#testDiv {
margin-top: 50px;
}
hi!
<div id="testDiv">test</div>
Хм, я тоже пробовал с тем же результатом, что и вы. Быстрый поиск google оказался использование JavaScript для чтения html / body tag margin-top который использует стиль.getPropertyValue() возвращает информацию, которую вы ищете.
вместо использования основного javascript, позвольте вам использовать JS library jQuery. Затем используйте этот syntaxt, чтобы получить его значение.:
console.log($('body').css('margin-top'));
для чистого javascript используйте это
var element = document.body,
style = window.getComputedStyle(element),
margin_top = style.getPropertyValue('margin-top');
console.log(margin_top);