Muito obrigado a Mike e Robertc por suas publicações úteis!
Se você possui dois elementos no HTML e deseja :hover
sobrepor 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 :hover
termos 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 :hover
destinos válidos um para o outro, o position
atributo css pode ser usado para exibir qualquer elemento onde você desejar. Eu usei position: Fixed para colocar o destino da minha :hover
açã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 :hover
comando de um elemento dentro #explainBox
deve ser #explainBox
ou 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 #id
para mais de um elemento HTML; no entanto, neste caso, as instâncias de #light
podem ser descritas independentemente, devido às suas respectivas posições em #id
elementos exclusivos . Existe alguma razão para não repetir o id
#light
caso?
~
para 'cubo está em algum lugar após o contêiner no DOM e compartilha um pai'