O que eu quero fazer é que quando um certo div
é pairado, isso afetaria as propriedades de outro div
.
Por exemplo, nesta demonstração do JSFiddle , quando você passa o mouse sobre #cube
ele, muda o, background-color
mas o que eu quero é que, quando passe o mouse #container
, #cube
seja afetado.
div {
outline: 1px solid red;
}
#container {
width: 200px;
height: 30px;
}
#cube {
width: 30px;
height: 100%;
background-color: red;
}
#cube:hover {
width: 30px;
height: 100%;
background-color: blue;
}
<div id="container">
<div id="cube">
</div>
</div>
~
para 'cubo está em algum lugar após o contêiner no DOM e compartilha um pai'#container
for o próximo#cube
, ou seja,#container
segue#cube
?Neste exemplo em particular, você pode usar:
Este exemplo funciona apenas desde que
cube
é filho decontainer
. Para cenários mais complicados, você precisará usar CSS diferente ou JavaScript.fonte
O uso do seletor de irmãos é a solução geral para estilizar outros elementos ao passar o mouse sobre um determinado elemento, mas funciona apenas se os outros elementos seguirem o elemento especificado no DOM . O que podemos fazer quando os outros elementos devem realmente estar antes do pairar? Digamos que queremos implementar um widget de classificação da barra de sinal como o abaixo:
Na verdade, isso pode ser feito facilmente usando o modelo flexbox CSS, configurando
flex-direction
parareverse
, para que os elementos sejam exibidos na ordem oposta à que estão no DOM. A captura de tela acima é de um widget implementado com CSS puro.O Flexbox é muito bem suportado por 95% dos navegadores modernos.
Mostrar snippet de código
fonte
.rating div
border-right: 4px solid white;
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, oposition
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:
O css:
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 oid
#light
caso?fonte
ID
várias vezes. Basta usar umclass
.Só isso funcionou para mim:
Onde
.cube
está CssClass do#cube
.Testado no Firefox , Chrome e Edge .
fonte
Aqui está outra idéia que permite afetar outros elementos sem considerar nenhum seletor específico e usando apenas o
:hover
estado do elemento principal.Para isso, contarei com o uso de propriedades personalizadas (variáveis CSS). Como podemos ler na especificação :
A idéia é definir propriedades customizadas no elemento principal e usá-las para estilizar elementos filhos e, como essas propriedades são herdadas, precisamos alterá-las no elemento principal ao passar o mouse.
Aqui está um exemplo:
Por que isso pode ser melhor do que usar o seletor específico combinado com o hover?
Posso fornecer pelo menos dois motivos que tornam este método um bom ponto a considerar:
border
,linear-gradient
,background-color
,box-shadow
etc. Isso irá evitar nos zerando todas estas propriedades em foco.Aqui está um exemplo mais complexo:
Como podemos ver acima, precisamos apenas de uma declaração CSS para alterar muitas propriedades de diferentes elementos.
fonte