Eu sei que não existe um seletor pai CSS , mas é possível estilizar um elemento parental ao passar o mouse sobre um elemento filho sem esse seletor?
Para dar um exemplo: considere um botão de exclusão que, quando pairado, destacará o elemento que está prestes a ser excluído:
<div>
<p>Lorem ipsum ...</p>
<button>Delete</button>
</div>
Por meio de CSS puro, como alterar a cor de fundo desta seção quando o mouse está sobre o botão?
Respostas:
Bem, essa pergunta é feita muitas vezes antes, e a resposta curta e típica é: Ela não pode ser feita por CSS puro. Está no nome: as folhas de estilo em cascata suportam apenas o estilo na direção em cascata, e não para cima.
Mas na maioria das circunstâncias em que esse efeito é desejado, como no exemplo dado, ainda há a possibilidade de usar essas características em cascata para alcançar o efeito desejado. Considere esta pseudo marcação:
O truque é dar ao irmão o mesmo tamanho e posição do pai e estilizar o irmão em vez do pai. Parece que o pai está estilizado!
Agora, como estilizar o irmão?
Quando a criança passa o mouse, o pai também, mas o irmão não. O mesmo vale para o irmão. Isso termina em três caminhos possíveis do seletor de CSS para estilizar o irmão:
Esses caminhos diferentes permitem algumas boas possibilidades. Por exemplo, desencadear esse truque no exemplo da pergunta resulta nesse violino :
Obviamente, na maioria dos casos, esse truque depende do uso de posicionamento absoluto para dar ao irmão o mesmo tamanho do pai e ainda deixar a criança aparecer dentro do pai.
Às vezes, é necessário usar um caminho de seletor mais qualificado para selecionar um elemento específico, como mostrado neste violino que implementa o truque várias vezes em um menu em árvore. Muito bom mesmo.
fonte
Eu sei que é uma pergunta antiga, mas consegui fazê-lo sem um pseudo filho (mas um pseudo wrapper).
Se você definir o pai como não
pointer-events
, e um filhodiv
com opointer-events
conjuntoauto
, ele funcionará :)Observe que a
<img>
tag (por exemplo) não funciona.Lembre-se também para definir
pointer-events
aauto
de outras crianças que têm o seu próprio ouvinte de evento, ou caso contrário, eles vão perder a sua funcionalidade clique.Edit:
Como o Shadow Wizard observou gentilmente: vale a pena mencionar que isso não funcionará no IE10 e abaixo. (Versões antigas do FF e Chrome também, veja aqui )
fonte
Outra abordagem mais simples (para uma pergunta antiga) ..
seria colocar elementos como irmãos e usar:
Seletor de irmão adjacente (
+
) ou Seletor de irmão geral (~
)Demonstração Fiddle aqui .
fonte
não há seletor de CSS para selecionar um pai de um filho selecionado.
você poderia fazer isso com JavaScript
fonte
Como mencionado anteriormente "não há seletor de CSS para selecionar um pai de um filho selecionado".
Então você:
Aqui está o exemplo da solução javascript / jQuery
No lado do javascript:
E no lado CSS, você teria algo parecido com isto:
fonte
Essa solução depende totalmente do design, mas se você tiver uma div pai que deseja alterar o plano de fundo ao passar o mouse em um filho, tente imitar o pai com um
::after
/::before
.CSS:
Veja um exemplo completo aqui
fonte
Uma solução simples de jquery para quem não precisa de uma solução css pura:
fonte
Isso é extremamente fácil de fazer em Sass! Não mergulhe no JavaScript para isso. O seletor & no sass faz exatamente isso.
http://thesassway.com/intermediate/referencing-parent-selectors-using-ampersand
fonte