Ответ 1
Я попробую сам.
- Используйте
window.getComputedStyle()
в родительском элементе и сохраните имя тега и информацию о стиле. - Создайте новый элемент с сохраненным именем тега и назначьте ему стили с помощью атрибута
style
. - Добавить дочерний элемент
<foo>
(строго говоря, он должен иметь имя тега, которое не упоминается в текущих правилах CSS, так что они не влияют на него). - Прикрепите родительский элемент к
<head>
документа (специфичный для Webkit). - Используйте
window.getComputedStyle()
для дочернего элемента. - Задайте
inline
как значение свойстваdisplay
(поскольку текстовые узлы всегда встроены).
Обратите внимание на результаты фрагмента кода. color
красный, margin-left
равен нулю, несмотря на то, что родитель имеет левое поле, а width
(и height
тоже) - auto
.
var source = document.querySelector('.bar');
var sourceStyle = window.getComputedStyle(source);
var sourceTag = source.tagName;
var clone = document.createElement(sourceTag);
var child = document.createElement('foo');
var head = document.querySelector('head');
child.innerHTML = 1;
child.setAttribute('style', 'display: inline;');
clone.appendChild(child);
clone.setAttribute('style', sourceStyle.cssText);
head.appendChild(clone);
alert(window.getComputedStyle(source).marginLeft); // 100px
alert(window.getComputedStyle(child).color); // rgb(255, 0, 0);
alert(window.getComputedStyle(child).marginLeft); // 0px
alert(window.getComputedStyle(child).width); // auto
.bar {
color: red;
margin-left: 100px
}
<html>
<head>
<title>An example</title>
</head>
<body>
<div class="bar">
foo
</div>
</body>
</html>