Пользовательский стиль списка li со значком шрифта


156

Я задаюсь вопросом, можно ли использовать классы font-awesome (или любой другой иконический шрифт) для создания настраиваемого <li>типа стиля списка?

В настоящее время я использую jQuery для этого, то есть:

$("li.myClass").prepend("<i class=\"icon-chevron-right\"></i>");

Тем не менее, это не работает должным образом, когда <li>текст переносится по странице, так как считает значок частью текста, а не фактическим маркером-маркером.

Какие-нибудь советы?

Ответы:


333

Модуль « Списки и счетчики CSS» уровня 3 представляет ::markerпсевдоэлемент. Из того, что я понял, это позволило бы такое. К сожалению, ни один браузер не поддерживает его .

Что вы можете сделать, это добавить некоторые отступы к родителю ulи перетащить значок в это заполнение:

ul {
  list-style: none;
  padding: 0;
}
li {
  padding-left: 1.3em;
}
li:before {
  content: "\f00c"; /* FontAwesome Unicode */
  font-family: FontAwesome;
  display: inline-block;
  margin-left: -1.3em; /* same as padding-left set on li */
  width: 1.3em; /* same as padding-left set on li */
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<ul>
  <li>Item one</li>
  <li>Item two</li>
</ul>

Отрегулируйте padding / font-size / etc по своему вкусу и все. Вот обычная скрипка: http://jsfiddle.net/joplomacedo/a8GxZ/

=====

Это работает с любым типом шрифта. FontAwesome, однако, предоставляет свой собственный способ решения этой «проблемы». Посмотрите ответ Даррррррена ниже для более подробной информации.


12
Я сделал справочную страницу с кодами содержимого CSS, соответствующими каждой иконке Font Awesome, здесь: astronautweb.co/snippet/font-awesome
Astrotim

1
Это решение даже работает с многостолбцовыми элементами. (Другие, которые используют позицию: абсолютный не)
sbaechler

2
@Astrotim Вы можете получить эти коды непосредственно из официального списка FontAwesome: fortawesome.github.io/Font-Awesome/cheatsheet
rybo111

1
Это решение нуждается в небольших изменениях для использования с FontAwesome 5. Вам необходимо семейство шрифтов: 'Font Awesome 5 Free'; а также явный вес шрифта для его работы. См stackoverflow.com/questions/47894414/...
kloddant

1
Мне нужно добавить определенный вес, чтобы заставить это работать:font-weight: 900;
Mayersdesign

62

Согласно Font Awesome Документация :

<ul class="fa-ul">
  <li><i class="fa-li fa fa-check"></i>Barbabella</li>
  <li><i class="fa-li fa fa-check"></i>Barbaletta</li>
  <li><i class="fa-li fa fa-check"></i>Barbalala</li>
</ul>

Или, используя Jade:

ul.fa-ul
  li
    i.fa-li.fa.fa-check
    | Barbabella
  li
    i.fa-li.fa.fa-check
    | Barbaletta
  li
    i.fa-li.fa.fa-check
    | Barbalala

Для меня это <ul class="fa-ul"><li class="h4"><font-awesome-icon icon="check" /> ...
сработало так

50

Я хотел бы предложить альтернативное, более простое решение, специфичное для FontAwesome. Если вы используете другой иконический шрифт, ответ JOPLOmacedo по-прежнему идеально подходит для использования.

FontAwesome теперь обрабатывает стили списков внутренне с помощью классов CSS .

Вот официальный пример:

<ul class="fa-ul">
  <li><span class="fa-li"><i class="fas fa-check-square"></i></span>List icons can</li>
  <li><span class="fa-li"><i class="fas fa-check-square"></i></span>be used to</li>
  <li><span class="fa-li"><i class="fas fa-spinner fa-pulse"></i></span>replace bullets</li>
  <li><span class="fa-li"><i class="far fa-square"></i></span>in lists</li>
</ul>

18
В последнем Font-Awesome вы должны заменить "icons-ul" на "fa-ul" и "icon-li" на "fa-li": [code] <ul class = "fa-ul"> <li class = " fa-li fa fa-check "> ... </ li> </ ul> [/ code]
Томас

4

Я хотел добавить к ответу JOPLOmacedo. Его решение - мое любимое, но у меня всегда были проблемы с отступом, когда в li было больше одной строки. Было трудно найти правильный отступ с полями и т. Д. Но это может касаться только меня.

Для меня абсолютное позиционирование :beforeпсевдоэлемента работает лучше всего. Я установил padding-leftна ul, отрицательная позиция слева на :beforeэлементе, так же, как ul padding-left. Чтобы получить расстояние содержимого от :beforeэлемента вправо, я просто установил padding-leftна li. Конечно, ли должен иметь относительную позицию. Например

ul {
  margin: 0 0 1em 0;
  padding: 0 0 0 1em;
  /* make space for li's :before */
  list-style: none;
}

li {
  position: relative;
  padding-left: 0.4em;
  /* text distance to icon */
}

li:before {
  font-family: 'my-icon-font';
  content: 'character-code-here';
  position: absolute;
  left: -1em;
  /* same as ul padding-left */
  top: 0.65em;
  /* depends on character, maybe use padding-top instead */
  /*  .... more styling, maybe set width etc ... */
}

Надеюсь, это понятно и имеет значение для кого-то другого, кроме меня.


3
Для всех начинающих, это отформатировано на языке предварительной обработки CSS под названием SASS. Чистый CSS не может быть вложен таким образом.
JoshWillik

1

Я сделал это так:

li {
  list-style: none;
  background-image: url("./assets/img/control.svg");
  background-repeat: no-repeat;
  background-position: left center;
}

Или вы можете попробовать это, если вы хотите изменить цвет:

li::before {
  content: "";
  display: inline-block;
  height: 10px;
  width: 10px;
  margin-right: 7px;

  background-color: orange;
  -webkit-mask-image: url("./assets/img/control.svg");
  -webkit-mask-size: cover;
}

0

Я сделал две вещи, вдохновленные комментарием @OscarJovanny, с некоторыми взломами.

Шаг 1:

  • Скачайте файл иконок как svg отсюда , так как мне нужен только этот значок из шрифта awesome

Шаг 2:

<style>
ul {
    list-style-type: none;
    margin-left: 10px;
}

ul li {
    margin-bottom: 12px;
    margin-left: -10px;
    display: flex;
    align-items: center;
}

ul li::before {
    color: transparent;
    font-size: 1px;
    content: " ";
    margin-left: -1.3em;
    margin-right: 15px;
    padding: 10px;
    background-color: orange;
    -webkit-mask-image: url("./assets/img/check-circle-solid.svg");
    -webkit-mask-size: cover;
}
</style>

Полученные результаты

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.