Спеціальний стиль списку li із чудовим значком шрифту


156

Мені цікаво, чи можна використовувати приголомшливі шрифти (чи будь-який інший знаковий шрифт) для створення користувальницького <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>

Налаштуйте набивання / розмір шрифту / тощо за своїм смаком, і все. Ось звичайна загадка: 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. Вам потрібно сімейство шрифтів: "Шрифт Awesome 5 Free"; а також явний шрифт для його роботи. Див stackoverflow.com/questions/47894414 / ...
kloddant

1
Мені потрібно додати конкретну вагу, щоб це працювало:font-weight: 900;
Майер, дизайн проекту

62

Відповідно до Документації щодо шрифту :

<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" /> ...
justin.m.chase

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
З останнім шрифтом Awesome ви повинні замінити "значки-ul" на "fa-ul", а "icon-li" на "fa-li": [код] <ul class = "fa-ul"> <li class = " fa-li fa fa-check "> ... </li> </ul> [/ code]
Томас

4

Я хотів додати відповідь JOPLOmacedo. Його рішення моє улюблене, але у мене завжди були проблеми з відступом, коли у лі було більше одного рядка. Сміливо було знайти правильний відступ з маржами тощо. Але це може стосуватися лише мене.

Для мене :beforeнайкраще працює абсолютне позиціонування псевдоелемента. Я встановив padding-leftul, негативне положення, залишене на :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 звідси , оскільки мені потрібен лише цей значок із приголомшливого шрифту

Крок 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.