Используйте иконку Font Awesome в качестве контента CSS

279

Я хочу использовать значок Font Awesome в качестве содержимого CSS, т.е.

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

Я знаю, что не могу использовать HTML-код content, так что остались только изображения?

sdvnksv
источник
Из памяти вы не можете внедрить HTML в DOM, используя атрибут содержимого. Просто старый текст.
Майк Каузер

Ответы:

634

Обновление для FontAwesome 5 Благодаря Aurelien

Вам нужно изменить font-familyна Font Awesome 5 BrandsOR Font Awesome 5 Free, основываясь на типе значок , который вы пытаетесь визуализировать. Также не забудьте объявитьfont-weight: 900;

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

демонстрация

Вы можете прочитать остальную часть ответа ниже, чтобы понять, как он работает, и узнать некоторые обходные пути для расстояния между значком и текстом.


FontAwesome 4 и ниже

Это неправильный способ его использования. Откройте потрясающую таблицу стилей шрифта, перейдите к classшрифту, который вы хотите использовать, скажем fa-phone, скопируйте свойство содержимого этого класса вместе с сущностью и используйте его следующим образом:

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

демонстрация

Просто убедитесь, что, если вы ищете целевой aтег, рассмотрите возможность использования classвместо него, чтобы сделать его более конкретным, например:

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

При использовании вышеописанного способа значок будет прикреплен к оставшемуся вашему тексту, поэтому, если вы хотите, чтобы между ними было немного свободного пространства, сделайте его display: inline-block;и используйте немного padding-right:

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

Расширяя этот ответ далее, поскольку у многих может возникнуть необходимость изменить значок при наведении, поэтому для этого мы можем написать отдельный селектор и правила для :hoverдействий:

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

демонстрация

Теперь в приведенном выше примере значок подталкивает из-за разного размера, и вы, конечно, не хотите этого, поэтому вы можете установить фиксированное widthзначение для базового объявления, например

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

демонстрация

Мистер инопланетянин
источник
С font-family: FontAwesome;его помощью также изменяется шрифт для тегов привязки. Как мы можем справиться с этим?
Шуб
@Shubh внимательно прочитайте код, font-familyпредполагается , что он вызывается на :beforeпсевдо-теге, а не на привязанном теге
Mr. Alien
Просто подумал, что я добавил бы здесь, что вы можете найти спецификацию юникода для конкретной иконки без необходимости копаться в источнике. Просто перейдите к списку значков на веб-сайте шрифтов и нажмите на значок, который вы хотите. Вы увидите значение Unicode на странице прямо под образцами иконки: fortawesome.github.io/Font-Awesome/icon/pencil-square-o
Аллен Андервуд
Этот список CSS Unicode для FontAwesome лучше: astronautweb.co/snippet/font-awesome, потому что он показывает правильные contentкоды для прямого копирования (то есть, простую задачу). PS: я до сих пор удивляюсь, почему ребята из FontAwesome не размещают коды контента на каждой странице значков ?!
Кай Ноак
25

Другое решение без необходимости вручную возиться с символами Unicode можно найти в статье « Создание шрифта Awesome awesome» - использование значков без i-тегов ( отказ от ответственности: я написал эту статью ).

В двух словах, вы можете создать новый класс, например:

.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);
}

А затем используйте его с любым значком, например:

<a class="icon fa-car" href="#">This is a link</a>
dustinmoris
источник
23

Если у вас есть доступ к файлам SCSS из font-awesome, вы можете использовать это простое решение:

.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
источник
3

Вы можете использовать Unicode для этого в CSS. Если вы используете шрифт Awesome 5, это синтаксис;

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

Вы можете увидеть их документацию здесь .

Mahib
источник
3

Для работы Font Awesome 5 Free font-family у вас должно быть установлено значение font-weight - 900 .

Это рабочий:

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

источник
1

Как говорится на сайте 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";
   }

В .login::before-> изменить content:'';в соответствии с вашим Unicode.

Прусаков
источник
1

Обновление для Font Awesome 5 с использованием SCSS

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

  &:before {
    content: fa-content($fa-var-user);
  }
}
Дружественный код
источник
0

Вот мой шрифт Webpack 4 +, отличное решение 5:

плагин webpack:

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

глобальный стиль CSS:

@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
источник