1
resposta

Ícones

Estava estudando aqui sobre ícones e me veio uma dúvida quando me deparei com diversos meios de inserção dos ícones nas páginas, as vezes percebi a utilização dos pseudo-elementos ::before/::after com a utilização do content:'' , e por outro lado percebi que as vezes não utilizam esses pseudo-elementos. Gostaria de saber quando utilizar um ou outro, isso tem diferença?

Vou deixar alguns exemplos aqui para vocês entenderem melhor:

SEM UTILIZAÇÃO DO PSEUDO-ELEMENTO:

<ul class="lista-item">
                    <li class="item">
                        <span class="item__icone item__icone--cursor"></span>
                        <p>Escolha suas plantas</p>
                    </li>
                    <li class="item">
                        <span class="item__icone item__icone--carrinho"></span>
                        <p>Faça seu pedido</p>
                    </li>
                    <li class="item">
                        <span class="item__icone item__icone--caminhao"></span>
                        <p>Aguarde na sua casa</p>
                    </li>
</ul>
.item__icone{
    display: block;

    margin-right: 1rem;

    width: 3.25rem;
    height: 3.25rem;

    border-radius: 50%;

    background-color: var(--amarelo);
    background-size: 1.375rem;
    background-repeat: no-repeat;
    background-position: center;
}

.item__icone--cursor {
    background-image: url(../../img/icones/mouse.svg);
}

.item__icone--carrinho{
    background-image: url(../../img/icones/cart.svg);
}

.item__icone--caminhao{
    background-image: url(../../img/icones/truck.svg);
}

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

COM UTILIZAÇÃO DE PSEUDO-ELEMENTO:

<nav class="menu-lateral">

 <a href="index.html" class="menu-lateral__link menu-lateral__link--inicio menu-lateral__link--ativo">Início</a>
 <a href="#" class="menu-lateral__link menu-lateral__link--videos">Vídeos</a>
 <a href="picos.html" class="menu-lateral__link menu-lateral__link--picos">Picos</a>
 <a href="#" class="menu-lateral__link menu-lateral__link--integrantes">Integrantes</a>
 <a href="#" class="menu-lateral__link menu-lateral__link--camisas">Camisas</a>
 <a href="#" class="menu-lateral__link menu-lateral__link--pinturas">Pinturas</a>
</nav>
.menu-lateral__link::before {
    content: "";
    width: 24px;
    height: 24px;
    font-size: 24px;
    position: absolute;
    left: 24px;
}

.menu-lateral__link--inicio::before {
    content: "\e902";
}

.menu-lateral__link--videos::before {
    content: "\e90e";
}

.menu-lateral__link--picos::before {
    content: "\e909";
}

.menu-lateral__link--integrantes::before {
    content: "\e903";
}

.menu-lateral__link--camisas::before {
    content: "\e900";
}

.menu-lateral__link--pinturas::before {
    content: "\e90a";
}

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

1 resposta

Olá Gabriel.

O uso de ícone com :before / :after é mais fácil e rápido se tiver o código dele (unicodes). Porém às vezes pode não existir exatamente o ícone que você precisa ou o ícone depende de uma fonte específica.

O ícone em svg pode ser criado sob medida à necessidade do site/sistema. Por outro lado, para usar ele no css precisa ser um arquivo. Se for usar no html pode adicionar diretamente o código svg. No site heroicons há vários ícones para usar diretamente no html (as classes usadas são do Tailwind).