根据Mozilla Doc,CSS属性none
的值display
执行以下操作:
关闭元素的显示(它对布局没有影响);所有后代元素也都关闭了它们的显示。该文档呈现为好像该元素不存在。
我知道这意味着我看不到元素。由于元素对布局没有影响,因此它看起来好像不存在。
我的问题是:它是否仍然存在于布局中(它仍然响应用户事件)?或者它根本不存在于布局中(因此不仅仅是外观)?
只是为了澄清:
我知道元素仍然存在于DOM中。我问的是,与视图的交互是否仍会影响该元素的状态。例如,如果我单击隐藏元素存在的位置,是否仍会触发事件?
我问,因为我知道你可以像这样定位CSS中的隐藏元素:
input[type="checkbox"] {
display: none;
}
input[type="checkbox"]:checked + otherElement {
...
}
某些事件必须触发,否则第二个CSS选择器将无效。
有人可以解释一下吗?
答案 0 :(得分:2)
例如,如果我点击隐藏元素所在的位置, 这仍然会引发事件吗?
没有“点击隐藏元素存在的地方”这样的事情。
例如,如果在建造房屋时没有使用砖块,则不能通过触摸另外两块砖之间的线来触摸它,即使它可能在那里也是如此。
因此,没有用户导致的事件适用于布局中未包含的不可见对象。
但我很确定它仍会产生其他事件,例如MutationObserver
报告的事件。我希望dispatchEvent
发送的事件也能正常运行,但我没有对此进行测试。
答案 1 :(得分:1)
它对您的布局没有任何影响,就好像它不存在一样,但内容仍然存在于HTML DOM中。 CSS属性display:none
只是一个CSS属性,它不会修改您的HTML内容。
您仍然可以在元素上执行javascript函数。
答案 2 :(得分:1)
您不能通过直接与元素交互来影响display: none
元素的状态,因为该元素不会被渲染。但是,您仍然可以通过与其他元素交互来影响其状态,这些元素会触发事件,而这些元素又会通过DOM更改该元素的状态。
某些事件必须触发,否则第二个CSS选择器将无效。
有人可以解释一下吗?
国家和事件完全不同。事件不需要为要更改的元素的状态触发,并且当元素更改其状态时,它不一定触发任何事件。选择器从不对事件进行操作;他们总是以国家为基础。
在您的示例中,如果已经通过input
属性检查了checked
元素,那么DOM将以该状态加载该元素,并且不会触发任何事件,并且仍然允许otherElement
立即匹配选择器。此外,它会继续匹配该选择器,直到某些事情导致input
取消选中(或者在CSS选择器术语中:not(:checked)
)。
请参阅我对this other question的回答,了解有关CSS中状态与事件的更多解释。