Muito obrigado a Mike e Robertc por suas publicações úteis!
Se você possui dois elementos no HTML e deseja :hoversobrepor um e direcionar uma mudança de estilo no outro, os dois elementos devem estar diretamente relacionados - pais, filhos ou irmãos. Isso significa que os dois elementos devem estar um dentro do outro ou devem estar contidos no mesmo elemento maior.
Eu queria exibir definições em uma caixa no lado direito do navegador enquanto meus usuários liam o meu site e os :hovertermos destacados; portanto, não queria que o elemento 'definition' fosse exibido dentro do elemento 'text'.
Eu quase desisti e acabei de adicionar javascript à minha página, mas este é o futuro! Não devemos ter que tolerar o CSS e HTML nos dizendo onde devemos colocar nossos elementos para obter os efeitos desejados! No final, nos comprometemos.
Embora os elementos HTML reais no arquivo devam estar aninhados ou contidos em um único elemento para serem :hoverdestinos válidos um para o outro, o positionatributo css pode ser usado para exibir qualquer elemento onde você desejar. Eu usei position: Fixed para colocar o destino da minha :hoveração onde eu queria na tela do usuário, independentemente da sua localização no documento HTML.
O 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>
O 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;
}
Neste exemplo, o destino de um :hovercomando de um elemento dentro #explainBoxdeve ser #explainBoxou também dentro #explainBox. Os atributos de posição atribuídos a #definitions forçam a exibição no local desejado (fora #explainBox), mesmo que tecnicamente esteja localizado em uma posição indesejada no documento HTML.
Entendo que é considerado incorreto usar o mesmo #idpara mais de um elemento HTML; no entanto, neste caso, as instâncias de #lightpodem ser descritas independentemente, devido às suas respectivas posições em #idelementos exclusivos . Existe alguma razão para não repetir o id #lightcaso?
~para 'cubo está em algum lugar após o contêiner no DOM e compartilha um pai'