¡Muchas gracias a Mike y Robertc por sus útiles publicaciones!
Si tiene dos elementos en su HTML y desea :hover
superar uno y orientar un cambio de estilo en el otro, los dos elementos deben estar directamente relacionados: padres, hijos o hermanos. Esto significa que los dos elementos deben estar uno dentro del otro o ambos deben estar contenidos dentro del mismo elemento más grande.
Quería mostrar las definiciones en un cuadro en el lado derecho del navegador mientras mis usuarios leen mi sitio y :hover
sobre los términos resaltados; por lo tanto, no quería que el elemento 'definición' se mostrara dentro del elemento 'texto'.
Casi me doy por vencido y acabo de agregar JavaScript a mi página, ¡pero este es el futuro! ¡No deberíamos tener que aguantar el back sass de CSS y HTML diciéndonos dónde tenemos que colocar nuestros elementos para lograr los efectos que queremos! Al final nos comprometimos.
Si bien los elementos HTML reales en el archivo deben estar anidados o contenidos en un solo elemento para ser :hover
objetivos válidos entre sí, el position
atributo css se puede usar para mostrar cualquier elemento donde lo desee. Usé position: fixed para colocar el objetivo de mi :hover
acción donde lo quería en la pantalla del usuario, independientemente de su ubicación en el documento HTML.
El 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>
El 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;
}
En este ejemplo, el objetivo de un :hover
comando de un elemento dentro #explainBox
debe ser #explainBox
o también dentro #explainBox
. Los atributos de posición asignados a #definiciones lo obligan a aparecer en la ubicación deseada (fuera #explainBox
) a pesar de que técnicamente se encuentra en una posición no deseada dentro del documento HTML.
Entiendo que se considera una mala forma usar lo mismo #id
para más de un elemento HTML; sin embargo, en este caso, las instancias de #light
pueden describirse independientemente debido a sus respectivas posiciones en #id
elementos 'd únicos . ¿Hay alguna razón para no repetirlo id
#light
en este caso?
~
para 'el cubo está en algún lugar después del contenedor en el DOM y comparte un padre'