CSS会改变DOM吗?

问题描述 投票:0回答:1

我想知道CSS是否会改变DOM.我问这个问题的原因是,每当我用CSS改变一个Element时,我在 "Element".style属性中没有看到它的值被改变。

css dom
1个回答
2
投票

不,CSS不会改变DOM。


0
投票

不,CSS不会改变DOM。使用:after或:before注入的内容也不会改变DOM。


0
投票

事实上......有一些情况下,CSS可以 更改DOM但这有点牵强,因为它不会改变DOM树的结构,除了在一个更牵强的情况下...。

有一个 成了 的定义,在某些情况下确实会影响DOM的行为,基于CSS计算的样式。

例如

onload = (evt) => {
  console.log( 'rendered', document.getElementById( 'disp' ).width );
  console.log( 'not rendered', document.getElementById( 'no-disp' ).width );
}
img { width: 100px; } 
#no-disp { display: none; }
<img id="disp" src="https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png">
<img id="no-disp" src="https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png">
  • 不属于下列情况的要素: 成了 不可能 可聚焦元素:

document.getElementById( 'rendered' ).focus();
console.log( document.activeElement ); //  <input id="rendered">
document.getElementById( 'rendered' ).blur();

document.getElementById( 'not-rendered' ).focus();
console.log( document.activeElement ); //  <body>
#not-rendered {
  display: none;
}
<input id="rendered">
<input id="not-rendered">

而DOM树被修改的一种情况,涉及到一个内部Document的DOM树。当一个<object>或一个<embed>元素的样式被设置为 display:none, 按规格的情况下,应重新加载其内部文档。

当出现以下情况之一时

[...]

  • 该元素从 成了 到不被呈现,反之亦然。

...用户代理必须在给定对象元素的DOM操作任务源上排队一个元素任务,以运行以下步骤来(重新)确定对象元素所代表的内容。

所以这意味着,简单地切换 成了 这样的<object>或<embed>元素的状态应该是完全重载其内部的Document,也就是其DOM树。

现在,只有Safari有这样的行为,Firefox从来没有实现这样的行为,而 Chrome浏览器最近确实改变了他们的 以配合FF的一个,对照规格。对于Safari用户。琴瑟和鸣 展示它。

© www.soinside.com 2019 - 2024. All rights reserved.