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

Mudança de imagem do menu hambúrguer com pseudo-class checked

Olá!

Estou tentando deixar o comportamento do menu hambúrguer igual demonstrado no figma, quando o menu está aberto a cor do background muda para o azul degradê e a cor do ícone do menu muda para branco. A imagem abaixo demonstra o resultado final desejado.

Imagem demonstando cores do menu, com background azul degradê e ícone azul

Entretanto, estou com dificuldade de fazer a mudança da imagem com o :checked, o background está ok. Consegui sobrepor as imagens mudando position para relative e absolute e estou tentando fazer a mudança de acordo com o z-index, mas parece que o z-index não muda com o :checked. A imagem abaixo é o que consegui obter.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Como posso fazer a mudança da imagem com :checked? Ou há alguma outra forma mais fácil de solucionar o problema?

Segue o código abaixo:

<!DOCTYPE html>
<html lang="pt-br">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>AluraBooks</title>
        <link rel="stylesheet" href="./reset.css" />
        <link rel="preconnect" href="https://fonts.googleapis.com" />
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
        <link
            href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;700&display=swap"
            rel="stylesheet"
        />
        <link rel="stylesheet" href="./styles.css" />
    </head>

    <body>
        <header class="header">
            <div class="container">
                <input type="checkbox" id="menu" class="container__button" />
                <label for="menu" class="container__label">
                    <span
                        class="header__menu-hamburguer container__image blue-menu"
                    ></span>
                    <span
                        class="header__menu-hamburguer container__image white-menu"
                    ></span>
                </label>
                <ul class="list-menu">
                    <li class="list-menu__title">Categorias</li>
                    <li class="list-menu__item">
                        <a href="#" class="list-menu__link">Programação</a>
                    </li>
                    <li class="list-menu__item">
                        <a href="#" class="list-menu__link">Front-end</a>
                    </li>
                    <li class="list-menu__item">
                        <a href="#" class="list-menu__link">Infraestrutura</a>
                    </li>
                    <li class="list-menu__item">
                        <a href="#" class="list-menu__link">Business</a>
                    </li>
                    <li class="list-menu__item">
                        <a href="#" class="list-menu__link">Design & UX</a>
                    </li>
                </ul>
                <img
                    src="./img/logo.svg"
                    alt="Logo da AluraBooks"
                    class="container__image"
                />
            </div>
            <div class="container">
                <a href="#"
                    ><img
                        src="./img/heart.svg"
                        alt="Meus favoritos"
                        class="container__image"
                /></a>
                <a href="#"
                    ><img
                        src="./img/bag.svg"
                        alt="Carrinho de compras"
                        class="container__image"
                /></a>
                <a href="#"
                    ><img
                        src="./img/profile.svg"
                        alt="Meu perfil"
                        class="container__image"
                /></a>
            </div>
        </header>
.header__menu-hamburguer {
    width: 24px;
    height: 24px;
    background-position: center;
    background-repeat: no-repeat;
    display: inline-block;
    position: relative;
    left: 0;
}

.blue-menu {
    background-image: url(../img/menu-blue.svg);
}

.white-menu {
    background-image: url(../img/menu-white.svg);
    z-index: -1;
    position: absolute;
}

.header {
    background-color: var(--white);
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: relative;
}

.container {
    display: flex;
    align-items: center;
    position: relative;
}

.container__image {
    padding: 1em;
}

.container__label {
    position: relative;
}

.list-menu {
    display: none;
    position: absolute;
    top: 100%;
    width: 60vw;
}

.container__button:checked ~ .list-menu {
    display: block;
}

.container__button:checked ~ .container__label {
    background: var(--blue-gradient);
}

.container__button:checked ~ .blue-menu {
    z-index: -2;
}

.list-menu__title,
.list-menu__item {
    padding: 1em;
    background-color: var(--white);
}

.list-menu__title {
    color: var(--orange);
    font-weight: 700;
}

.list-menu__link {
    background: var(--blue-gradient);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    text-transform: uppercase;
}

.container__button {
    display: none;
}
2 respostas

Aconteceu a mesma coisa agora com o swiper-pagination, que fica na frente do menu quando é aberto, e estou tentando mudar visibility para hidden mas não funciona :(. Quando tento adicionar só no swiper-pagination, sem pseudo-class, funciona normal...

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

.container__button:checked ~ .swiper-pagination {
    visibility: hidden;
}
solução!

Bom dia!

Percebi que o problema era com o combinador ~ que seleciona apenas elementos irmãos. Consegui solucionar o problema para a cor do menu da seguinte forma:

.blue-menu {
    background-image: url(../img/menu-blue.svg);
    z-index: 1;
}

.white-menu {
    background-image: url(../img/menu-white.svg);
    z-index: 0;
    position: absolute;
}

.container__button:checked ~ .container__label .blue-menu {
    z-index: -1;
}

Mas no caso do swiper-pagination, o problema é maior, pelo fato da distância entre esse elemento e .container__button. Em casos de elementos muito distantes, há alguma solução apenas com HTML e CSS ou só seria possível com JavaScript?