почему начальные стили CSS не видны в поле .style элемента DOM? - PullRequest
0 голосов
/ 23 января 2019

ОК. Я вполне ожидаю, что пойду в огне, чтобы спросить что-то глупое (или хотя бы дублирующее), но в прикрепленном фрагменте, почему я должен использовать window.getComputedStyle для доступа к стилям, применяемым CSS?У меня сложилось впечатление, что поле .style будет, по крайней мере, отражать те стили, которые изначально применялись CSS и / или изменились с тех пор вручную.

Если нет, то какие именно правила определяют, какие свойства отражаются (и когда) в поле .style элемента?

setTimeout(() => {
    console.log("the bckg color:", reddish.style.backgroundColor);
    console.log("the width:", reddish.style.width);
    console.log("from a computed style:", window.getComputedStyle(reddish).backgroundColor);
    console.log("from a computed style:", window.getComputedStyle(reddish).width);
}, 100);
#reddish {
    background-color: #fa5;
    width: 100px;
    height: 100px;
}
<html>
    <body>
        <div id="reddish"></div>
    </body>
</html>

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Свойство HTMLElement.style не используется полностью изучение стилей, примененных к элементу, поскольку он представляет только объявления CSS , установленные во встроенном стиле элемента атрибут , а не те, которые приходят из правил стиля в другом месте, такие как правила стилей в разделе или внешние таблицы стилей. Получить значения всех свойств CSS для элемента, который вы должны использовать Window.getComputedStyle () вместо.

Via- MDN Web Docs | Получать стиль Информация


HTMLElement.style:

Свойство HTMLElement.style используется для get , а также set the встроенный стиль элемента.

console.log(document.getElementById("para").style.fontSize); // will work since the "font-size" property is set inline
console.log(document.getElementById("para").style.color); // will not work since the "color" property is not set inline
#para {color: rgb(34, 34, 34);}
<p id="para" style="font-size: 20px;">Hello</p>

Window.getComputedStyle ():

Метод getComputedStyle () , однако, возвращает объект, содержащий значения всех свойств CSS элемента, после применения активных таблиц стилей и разрешения любых базовых вычислений, которые эти значения могут содержать, таким образом возвращая свойства css из обоих встроенные объявления стилей, а также из внешних таблиц стилей.

console.log(window.getComputedStyle(document.getElementById("para")).fontSize); // will work
console.log(window.getComputedStyle(document.getElementById("para")).color); // will work
#para {
  color: rgb(34, 34, 34);
}
<p id="para" style="font-size: 20px;">Hello</p>
0 голосов
/ 23 января 2019

HTMLElement.style для встроенного стиля элемента .Он не учитывает CSS вообще.В основном это просто установка или получение свойства объекта элемента.

<div style="color: red;">Hello</div>

Window.getComputedStyle() учитывает встроенные стили и CSS после разрешения каскадирования, наследование и т. д. Это в основном "окончательное" фактическое значение стиля, используемое для визуализации элемента на странице.

// CSS
#blue-text {
  color: blue !important;
}

// HTML
<div style="color: red;" id="blue-text">Hello</div>

// JS
const myElement = document.querySelector("#blue-text");
myElement.style.color; // "red" because that's the inline style
window.getComputedStyle(myElement).color; // "rgb(0, 0, 255)" because CSS !important overrides inline style
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...