Vielen Dank an Mike und Robertc für ihre hilfreichen Beiträge!
Wenn Sie zwei Elemente in Ihrem HTML-Code haben und :hoverüber eines hinausgehen und eine Stiländerung im anderen anstreben möchten, müssen die beiden Elemente direkt miteinander verbunden sein - Eltern, Kinder oder Geschwister. Dies bedeutet, dass die beiden Elemente entweder ineinander liegen müssen oder beide in demselben größeren Element enthalten sein müssen.
Ich wollte Definitionen in einem Feld auf der rechten Seite des Browsers anzeigen, während meine Benutzer meine Website und :hoverüber hervorgehobene Begriffe lesen . Daher wollte ich nicht, dass das Element 'definition' im Element 'text' angezeigt wird.
Ich hätte fast aufgegeben und gerade Javascript zu meiner Seite hinzugefügt, aber das ist die Zukunft, verdammt! Wir sollten uns nicht mit CSS und HTML abfinden müssen, die uns sagen, wo wir unsere Elemente platzieren müssen, um die gewünschten Effekte zu erzielen! Am Ende haben wir Kompromisse geschlossen.
Während die tatsächlichen HTML-Elemente in der Datei entweder verschachtelt oder in einem einzelnen Element enthalten sein müssen, um gültige :hoverZiele für einander zu sein, kann das CSS- positionAttribut verwendet werden, um jedes Element anzuzeigen, wo immer Sie möchten. Ich habe position: fix verwendet, um das Ziel meiner :hoverAktion an der gewünschten Stelle auf dem Bildschirm des Benutzers zu platzieren, unabhängig von seiner Position im HTML-Dokument.
Das 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>
Das 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;
}
In diesem Beispiel muss das Ziel eines :hoverBefehls von einem Element innerhalb oder #explainBoxentweder #explainBoxinnerhalb sein #explainBox. Die Positionsattribute, die #definitions zugewiesen sind, erzwingen, dass es an der gewünschten Stelle (außerhalb #explainBox) angezeigt wird, obwohl es sich technisch an einer unerwünschten Position innerhalb des HTML-Dokuments befindet.
Ich verstehe, dass es als schlechte Form angesehen wird, dasselbe #idfür mehr als ein HTML-Element zu verwenden. In diesem Fall können die Instanzen von #lightjedoch aufgrund ihrer jeweiligen Position in eindeutig #idd-Elementen unabhängig beschrieben werden. Gibt es einen Grund, id #lightdies in diesem Fall nicht zu wiederholen ?
~für "Würfel ist irgendwo nach Container im DOM und teilt sich ein Elternteil"