3
respostas

[Dúvida] CSS Selector

Olá, boa noite!

Estou montando meu portfólio e testando alguns efeitos nos botões do meu cabeçalho entretanto quando acrescento algum elemento ou altero o valor dele nos seletores (:hover e :active) a página dá uma "movimentada". Alguns exemplos:

  • No momento que eu passo o ponteiro do mouse em cima dos botões e aparece a linha embaixo deles todo conteúdo da página vai um pouquinho pra baixo.
.cabecalho {
    padding: 1% 0% 0% 4%; /* top / right / bottom / left */
}

.cabecalho__menu {
    display: flex;
    gap: 40px;
}

.cabecalho__menu__link {
    font-family: 'Montserrat Alternates', sans-serif;
    font-size: 20px;
    color: #4AF79A;
    text-decoration: none;
}

.cabecalho__menu__link:hover {
    border-bottom: 2px solid #4AF79A;
}
  • Quando eu clico no botão "home" o botão "sobre mim" se movimenta também, enquanto que se clico no "sobre mim" funciona normal.
.cabecalho {
    padding: 1% 0% 0% 4%; /* top / right / bottom / left */
}

.cabecalho__menu {
    display: flex;
    gap: 40px;
}

.cabecalho__menu__link {
    font-family: 'Montserrat Alternates', sans-serif;
    font-size: 20px;
    color: #4AF79A;
    text-decoration: none;
}

.cabecalho__menu__link:active {
    color: white;
    font-size: 18px;
}

Uma imagem do cabeçalho caso facilite a visualização: Cabeçalho

Obrigada!

3 respostas

Olá, Cecília! Boa noite!

Pelo que entendi, você está enfrentando um problema em relação aos efeitos aplicados nos botões do cabeçalho do seu portfólio. Ao adicionar elementos ou alterar valores nos seletores :hover e :active, a página sofre uma pequena movimentação.

No primeiro exemplo que você deu, onde a página se move um pouco para baixo quando você passa o mouse sobre os botões e aparece uma linha embaixo deles, isso acontece devido ao acréscimo da borda inferior (border-bottom) no seletor :hover. Ao adicionar essa borda, o tamanho do elemento aumenta ligeiramente, fazendo com que os elementos abaixo sejam empurrados para baixo.

Para resolver esse problema, existem várias soluções, mas eu vou fornecer duas:

  1. Você pode adicionar uma margem inferior (margin-bottom) igual ao tamanho da borda adicionada. Por exemplo:

    .cabecalho__menu__link:hover {
        border-bottom: 2px solid #4AF79A;
        margin-bottom: -2px;
    }
    

    Dessa forma, a margem inferior negativa compensará o aumento de tamanho causado pela borda, evitando que os elementos abaixo se movam.

  2. Ou você pode adicionar uma linha transparente com a mesma espessura da linha colorida usando a propriedade border-bottom ao estilo .cabecalho__menu__link:hover. Dessa forma, a altura do botão não será alterada quando o mouse passar sobre ele, evitando o deslocamento do conteúdo.

    Aqui está um exemplo de como o código ficaria:

    .cabecalho__menu__link {
        font-family: 'Montserrat Alternates', sans-serif;
        font-size: 20px;
        color: #4AF79A;
        text-decoration: none;
        border-bottom: 2px solid transparent;
    }
    
    .cabecalho__menu__link:hover {
        border-bottom: 2px solid #4AF79A;
    }
    

    Ao definir a cor como transparente, você mantém a aparência visual desejada sem alterar a altura do botão.


No segundo exemplo, onde o botão "sobre mim" se movimenta quando você clica no botão "home", isso pode acontecer devido à alteração do tamanho da fonte (font-size) no seletor :active. Ao diminuir o tamanho da fonte na palavra "home", o tamanho do botão também é reduzido, fazendo com que os demais botões se movam (nesse caso seria o botão "Sobre Mim" que está ao lado do "home"). Para resolver esse problema, você pode definir um tamanho de fonte fixo para os botões, tanto no estado normal quanto no estado :active. Por exemplo:

.cabecalho__menu__link {
    font-family: 'Montserrat Alternates', sans-serif;
    font-size: 20px;
    color: #4AF79A;
    text-decoration: none;
}

.cabecalho__menu__link:active {
    color: white;
    font-size: 20px; /* ou qualquer outro tamanho desejado */
}

Dessa forma, o tamanho da fonte será o mesmo tanto no estado normal quanto no estado :active, evitando que os botões se movam quando clicados.

Ou você pode definir o tamanho da fonte e a cor para o estado normal do botão, adicionando uma regra adicional ao estilo .cabecalho__menu__link. Assim, quando o botão "home" não estiver ativo, ele manterá o mesmo tamanho da fonte e a cor original, evitando a movimentação do botão "sobre mim".

Veja um exemplo de como atualizar o código:

.cabecalho__menu__link {
    font-family: 'Montserrat Alternates', sans-serif;
    font-size: 20px;
    color: #4AF79A;
    text-decoration: none;
}

.cabecalho__menu__link:active {
    color: white;
    font-size: 18px;
}

/* Nova regra para o estado normal */
.cabecalho__menu__link:not(:active) {
    font-size: 20px;
}

Com essa nova regra, o botão "home" manterá o mesmo tamanho da fonte do estado normal, independentemente de estar ativo ou não.

Espero que essas soluções possam te ajudar a resolver os problemas com os efeitos nos botões do cabeçalho do seu portfólio! Se tiver mais alguma dúvida, é só me dizer.

Espero ter ajudado e bons estudos!

Obrigada pela ajuda, Renan! :)

Realmente, quando trabalhamos com borda, ela nos trás esse 'efeito colateral', no sentido de modificar o tamanho do elemento.

Em alguns contextos, uma alternativa visual que uso é a propriedade box-shadow, para aplicar o mesmo visual que trabalharia com a borda. Você conseguirá representar o mesmo visual, mas essa propriedade não afeta o tamanho dos elementos.

Pode ser uma boa saída em alguns casos.