Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Por que ".container__botao:checked ~ .cabecalho__menu-hamburguer" não funciona?

Em vez de

.container__botao:checked ~ .container__label > .cabecalho__menu-hamburguer {
    background-image: url("../img/menu-aberto.svg");
}

optei por

.container__botao:checked ~ .cabecalho__menu-hamburguer {
    background-image: url("../img/menu-aberto.svg");
}

Mas não funcionou, pq? e pq do outro jeito funciona?

4 respostas

Olá, Wenderson!

A diferença entre as duas seletores CSS que você mencionou está no uso do seletor > no primeiro caso.

Quando você utiliza o seletor >, você está selecionando apenas os elementos filhos diretos de .container__label. Ou seja, apenas os elementos que são imediatamente descendentes de .container__label serão afetados pela regra CSS.

Por outro lado, quando você remove o seletor >, a regra CSS será aplicada em todos os elementos que são descendentes de .container__label, não importando se são filhos diretos ou não.

Portanto, se você quer que a regra CSS seja aplicada em todos os elementos que são descendentes de .container__label, independentemente de serem filhos diretos ou não, a segunda opção é a correta.

Mas como é uma imagem aplicada especificamente a um elemento somente a primeira opção funciona

Espero ter ajudado, qualquer dúvida, me coloco à disposição! Bons estudos!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Victor, acho que entendi essa questão de especificidade. Então, caso eu utilizar

<input type="checkbox" id="menu" class="container__botao">
            <label for="menu" class="container__label">
                <span class="cabecalho__menu-hamburguer container__imagem container__imagem-transparente"></span>
            </label>

eu sempre tenho que especificar os elementos pai e filho caso eu queria alterar algum elemento filho? como o elemento pai de cabecalho__menu-hamburger é container__label, eu tenho que especificar o container__label, pois ele também é filho de container__botao ?

tentei acessar direto o .cabecalho__menu-hamburguer

.container__botao:checked ~ .cabecalho__menu-hamburguer {
    background-image: url("../img/menu-aberto.svg");
}

Mas não surtiu efeito

solução!

Olá Wanderson, tudo certo?

No exemplo que você deu, o seletor .cabecalho__menu-hamburguer não está funcionando porque não há uma relação direta entre o elemento com a classe container__botao e o elemento com a classe cabecalho__menu-hamburguer. O seletor ~ seleciona os irmãos subsequentes do elemento de referência, mas o elemento cabecalho__menu-hamburguer não é um irmão subsequente do elemento container__botao.

Em resumo, ao utilizar seletores no CSS, é importante considerar se o elemento pai tem um filho e se esse filho possui irmãos. Dessa forma, podemos garantir que estamos selecionando corretamente o elemento desejado.

Espero ter ajudado, um grande abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Valeu, perfeito.