Use o ícone Fonte impressionante como conteúdo CSS

279

Quero usar um ícone de Fonte impressionante como conteúdo CSS, ou seja,

a:before {
    content: "<i class='fa...'>...</i>";
}

Sei que não posso usar o código HTML content, então só restam imagens?

sdvnksv
fonte
Na memória, você não pode injetar HTML no DOM usando o atributo content. Apenas texto antigo.
Mike Causador

Respostas:

634

Atualização para FontAwesome 5 Graças a Aurelien

Você precisa alterar font-familypara Font Awesome 5 BrandsOR Font Awesome 5 Free, com base no tipo de ícone que você está tentando renderizar. Além disso, não se esqueça de declararfont-weight: 900;

a:before {
   font-family: "Font Awesome 5 Free";
   content: "\f095";
   display: inline-block;
   padding-right: 3px;
   vertical-align: middle;
   font-weight: 900;
}

Demo

Você pode ler o restante da resposta abaixo para entender como funciona e conhecer algumas soluções alternativas para o espaçamento entre o ícone e o texto.


Impressionante 4 e abaixo

Essa é a maneira errada de usá-lo. Abra a folha de estilo impressionante da fonte, vá para a classfonte que você deseja usar fa-phone, copie a propriedade content sob essa classe com a entidade e use-a como:

a:before {
    font-family: FontAwesome;
    content: "\f095";
}

Demo

Apenas certifique-se de que se você deseja segmentar uma atag específica , considere usar uma opção classpara torná-la mais específica, como:

a.class_name:before {
    font-family: FontAwesome;
    content: "\f095";
}

Usando o caminho acima, você colará o ícone com o texto restante, portanto, se você quiser ter um pouco de espaço entre os dois, faça-o display: inline-block;e use alguns padding-right:

a:before {
    font-family: FontAwesome;
    content: "\f095";
    display: inline-block;
    padding-right: 3px;
    vertical-align: middle;
}

Estendendo esta resposta ainda mais, já que muitos podem ter um requisito para alterar um ícone ao passar o mouse; portanto, para isso, podemos escrever um seletor e regras de :hoveração separados :

a:hover:before {
    content: "\f099"; /* Code of the icon you want to change on hover */
}

Demo

Agora, no exemplo acima, o ícone se desloca por causa do tamanho diferente e você certamente não deseja isso; portanto, você pode definir uma widthdeclaração fixa na base, como

a:before {
    /* Other properties here, look in the above code snippets */
    width: 12px; /* add some desired width here to prevent nudge */
}

Demo

Mr. Alien
fonte
Com font-family: FontAwesome;ele, também muda a fonte das tags âncora. Como podemos lidar com isso?
Shubh
@Shubh ler o código com cuidado, font-familyé suposto ser chamado :beforetag pseudo e não âncora
Sr. Estrangeiro
Pensei em acrescentar aqui que você pode encontrar a especificação unicode para um ícone específico sem precisar procurar na fonte. Basta ir à lista de ícones no site incrível de fontes e clicar no ícone que você deseja. Você verá o valor Unicode na página logo abaixo as amostras do ícone: fortawesome.github.io/Font-Awesome/icon/pencil-square-o
Allen Underwood
Esta lista CSS Unicode para FontAwesome é melhor: astronautweb.co/snippet/font-awesome, porque mostra os contentcódigos corretos para a cópia direta (ou seja, não é necessário). PS: Ainda me pergunto por que os caras do FontAwesome não colocam os códigos de conteúdo em cada página de ícone ?!
Kai Noack
25

Outra solução sem que você precise mexer manualmente com os caracteres Unicode pode ser encontrada em Como tornar a fonte impressionante - Usando ícones sem i-tags ( aviso: escrevi este artigo ).

Em poucas palavras, você pode criar uma nova classe como esta:

.icon::before {
    display: inline-block;
    margin-right: .5em;
    font: normal normal normal 14px/1 FontAwesome;
    font-size: inherit;
    text-rendering: auto;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    transform: translate(0, 0);
}

E use-o com qualquer ícone, por exemplo:

<a class="icon fa-car" href="#">This is a link</a>
dustinmoris
fonte
23

Se você tiver acesso aos arquivos SCSS de font-awesome, poderá usar esta solução simples:

.a:after {
    // Import mixin from font-awesome/scss/mixins.scss
    @include fa-icon();

    // Use icon variable from font-awesome/scss/variables.scss
    content: $fa-var-exclamation-triangle;
}
ersefuril
fonte
3

Você pode usar unicode para isso em CSS. Se você estiver usando a fonte awesome 5, esta é a sintaxe;

.login::before {
    font-family: "Font Awesome 5 Free"; 
    font-weight: 900; 
    content: "\f007";  
}

Você pode ver a documentação deles aqui .

Mahib
fonte
3

Você deve ter o peso da fonte definido como 900 para que a família de fontes Font Awesome 5 Free funcione.

Este é o trabalho:

.css-selector::before {
   font-family: 'Font Awesome 5 Free';
   content: "\f101";
   font-weight: 900;
}

fonte
1

Como diz o site FontAwesome FontAwesome =>

HTML:

<span class="icon login"></span> Login</li>

CSS:

 .icon::before {
    display: inline-block;
    font-style: normal;
    font-variant: normal;
    text-rendering: auto;
    -webkit-font-smoothing: antialiased;
  }

    .login::before {
        font-family: "Font Awesome 5 Free";
        font-weight: 900;
        content: "\f007";
   }

Em .login::before-> edite content:'';para se adequar ao seu unicode.

Prusakov
fonte
1

Atualização para o Font Awesome 5 usando SCSS

.icon {
  @extend %fa-icon;
  @extend .fas;

  &:before {
    content: fa-content($fa-var-user);
  }
}
Código Amigável
fonte
0

Aqui está minha solução webpack 4 + font awesome 5:

plugin webpack:

new CopyWebpackPlugin([
    { from: 'node_modules/font-awesome/fonts', to: 'font-awesome' }
  ]),

estilo css global:

@font-face {
    font-family: 'FontAwesome';
    src: url('/font-awesome/fontawesome-webfont.eot');
    src: url('/font-awesome/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),
    url('/font-awesome/fontawesome-webfont.woff2') format('woff2'),
    url('/font-awesome/fontawesome-webfont.woff') format('woff'),
    url('/font-awesome/fontawesome-webfont.ttf') format('truetype'),
    url('/font-awesome/fontawesome-webfont.svgfontawesomeregular') format('svg');
    font-weight: normal;
    font-style: normal;
}

i {
    font-family: "FontAwesome";
}
setec
fonte