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 :hover
Ziele für einander zu sein, kann das CSS- position
Attribut verwendet werden, um jedes Element anzuzeigen, wo immer Sie möchten. Ich habe position: fix verwendet, um das Ziel meiner :hover
Aktion 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 :hover
Befehls von einem Element innerhalb oder #explainBox
entweder #explainBox
innerhalb 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 #id
für mehr als ein HTML-Element zu verwenden. In diesem Fall können die Instanzen von #light
jedoch aufgrund ihrer jeweiligen Position in eindeutig #id
d-Elementen unabhängig beschrieben werden. Gibt es einen Grund, id
#light
dies in diesem Fall nicht zu wiederholen ?
~
für "Würfel ist irgendwo nach Container im DOM und teilt sich ein Elternteil"