非常感谢Mike和Robertc的有用帖子!
如果您的HTML中有两个元素,并且您想要在一个元素上进行:hover
并针对另一个元素进行样式更改,则这两个元素必须直接相关-父项、子项或同级项。这意味着这两个元素必须要么一个在另一个内部,要么都包含在同一个较大的元素中。
我想在用户阅读我的网站时,在浏览器右侧显示定义框,并在高亮词上进行:hover
; 因此,我不希望“定义”元素显示在“文本”元素内。
我差点放弃了,只是在我的页面上添加了JavaScript,但这是未来的趋势!我们不应该忍受CSS和HTML的反向说法,告诉我们必须将元素放置在哪里才能实现我们想要的效果!最终,我们妥协了。
虽然文件中的实际HTML元素必须嵌套或包含在单个元素中,以成为彼此有效的:hover
目标,但可以使用css position
属性将任何元素显示在所需位置。我使用了position:fixed将我的:hover
操作的目标放置在用户屏幕上我想要的位置,而不管它在HTML文档中的位置。
HTML代码:
<div id="explainBox" class="explainBox">
<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>
样式表:
/*read: "when user hovers over
set display to inline-block for
#explainBox #light:hover~#definitions>#light {
display: inline-block;
}
.def {
display: none;
}
#definitions {
background-color: black;
position: fixed;
top: 5em;
right: 2em;
width: 20em;
height: 30em;
border: 1px solid orange;
border-radius: 12px;
padding: 10px;
}
在这个例子中,来自于
#explainBox
内部元素的
:hover
命令的目标必须是
#explainBox
或者在
#explainBox
内部。为了让#definitions出现在期望的位置(在
#explainBox
外面),已经分配了位置属性,即使它在HTML文档中实际上处于一个不想要的位置。
我知道在多个HTML元素中使用相同的
#id
被认为是不好的做法;然而,在这种情况下,由于它们分别位于唯一的
#id
元素中,可以独立地描述
#light
的各个实例。在这种情况下重复
id
#light
有没有什么理由不这样做?
~
,表示“立方体在容器后面且它们有共同的父级元素” 。 - robertc#container
紧挨着#cube
,也就是说#container
接在#cube
后面,那会怎样呢? - PeterKA