你还能用display:none来影响元素的状态吗?

时间:2014-02-26 01:39:05

标签: html css dom browser

根据Mozilla Doc,CSS属性none的值display执行以下操作:

  

关闭元素的显示(它对布局没有影响);所有后代元素也都关闭了它们的显示。该文档呈现为好像该元素不存在。

我知道这意味着我看不到元素。由于元素对布局没有影响,因此它看起来好像不存在。

我的问题是:它是否仍然存在于布局中(它仍然响应用户事件)?或者它根本不存在于布局中(因此不仅仅是外观)?

只是为了澄清:

我知道元素仍然存在于DOM中。我问的是,与视图的交互是否仍会影响该元素的状态。例如,如果我单击隐藏元素存在的位置,是否仍会触发事件?

我问,因为我知道你可以像这样定位CSS中的隐藏元素:

input[type="checkbox"] {
  display: none;
}

input[type="checkbox"]:checked + otherElement {
   ...
}

某些事件必须触发,否则第二个CSS选择器将无效。

有人可以解释一下吗?

3 个答案:

答案 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中状态与事件的更多解释。