非常感谢 Mike 和 Robertc 的有用帖子!
如果您的 HTML 中有两个元素,并且您希望 :hover 超过一个并针对另一个中的样式更改,则这两个元素必须直接相关 - 父级、子级或兄弟级。这意味着这两个元素要么必须在另一个元素中,要么必须都包含在同一个更大的元素中。
当我的用户阅读我的网站和:hover 突出显示的术语时,我想在浏览器右侧的框中显示定义;因此,我不希望 'definition' 元素显示在 'text' 元素内。
我几乎放弃了,只是在我的页面中添加了 javascript,但这就是未来!我们不应该忍受来自 CSS 和 HTML 的 back sass 告诉我们必须将元素放置在哪里才能实现我们想要的效果!最后我们妥协了。
虽然文件中的实际 HTML 元素必须嵌套或包含在单个元素中才能使 :hover 相互有效,但 css position 属性可用于显示任何位置的任何元素你要。我使用 position:fixed 将 :hover 操作的目标放置在用户屏幕上我想要的位置,而不管它在 HTML 文档中的位置。
html:
<div id="explainBox" class="explainBox"> /*Common parent*/
<a class="defP" id="light" href="http://en.wikipedia.or/wiki/Light">Light /*highlighted term in text*/
</a> is as ubiquitous as it is mysterious. /*plain text*/
<div id="definitions"> /*Container for :hover-displayed definitions*/
<p class="def" id="light"> /*example definition entry*/ Light:
<br/>Short Answer: The type of energy you see
</p>
</div>
</div>
CSS:
/*read: "when user hovers over #light somewhere inside #explainBox
set display to inline-block for #light directly inside of #definitions.*/
#explainBox #light:hover~#definitions>#light {
display: inline-block;
}
.def {
display: none;
}
#definitions {
background-color: black;
position: fixed;
/*position attribute*/
top: 5em;
/*position attribute*/
right: 2em;
/*position attribute*/
width: 20em;
height: 30em;
border: 1px solid orange;
border-radius: 12px;
padding: 10px;
}
在此示例中,来自 #explainBox 内元素的 :hover 命令的目标必须是 #explainBox 或也位于 #explainBox 内。分配给 #definitions 的位置属性会强制它出现在所需的位置(#explainBox 之外),即使它在技术上位于 HTML 文档中不需要的位置。
我理解为多个 HTML 元素使用相同的 #id 被认为是错误的形式;但是,在这种情况下,#light 的实例可以独立地描述,因为它们在唯一的#id'd 元素中各自的位置。在这种情况下,有什么理由不重复id#light?