Estilo de lista li personalizado com ícone incrível de fonte


156

Gostaria de saber se é possível utilizar classes impressionantes de fontes (ou qualquer outra fonte icônica) para criar um <li>tipo de estilo de lista personalizado ?

Atualmente, estou usando o jQuery para fazer isso, ou seja:

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

No entanto, isso não é apropriado quando o <li>texto passa pela página, pois considera o ícone como parte do texto, não o indicador de marcador real.

Alguma dica?

Respostas:


333

O módulo CSS Lists and Counters Level 3 introduz o ::markerpseudo-elemento. Pelo que entendi, isso permitiria uma coisa dessas. Infelizmente, nenhum navegador parece suportá-lo .

O que você pode fazer é adicionar algum preenchimento ao pai ule puxar o ícone para esse preenchimento:

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>

Ajuste o preenchimento / tamanho da fonte / etc ao seu gosto, e é isso. Aqui está o violino de sempre: http://jsfiddle.net/joplomacedo/a8GxZ/

=====

Isso funciona com qualquer tipo de fonte icônica. FontAwesome, no entanto, fornece sua própria maneira de lidar com esse 'problema'. Confira a resposta de Darrrrrren abaixo para obter mais detalhes.


12
Fiz uma página de referência dos códigos de conteúdo CSS correspondentes a cada ícone do Font Awesome aqui: astronautweb.co/snippet/font-awesome
Astrotim

1
Esta solução ainda funciona com elementos de várias colunas. (Outros que posição de uso: absolute não)
sbaechler

2
@Astrotim Você pode obter esses códigos diretamente do cheatsheet FontAwesome oficial: fortawesome.github.io/Font-Awesome/cheatsheet
rybo111

1
Esta solução precisa de pequenas revisões para ser usada com o FontAwesome 5. Você precisa da família de fontes: 'Font Awesome 5 Free'; bem como um peso de fonte explícito para que ele funcione. Veja stackoverflow.com/questions/47894414/…
kloddant 15/02/19

1
Preciso adicionar um peso específico para que isso funcione:font-weight: 900;
mayersdesign

62

De acordo com a documentação impressionante da fonte :

<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>

Ou, usando 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

Isso funcionou em vue para mim assim<ul class="fa-ul"><li class="h4"><font-awesome-icon icon="check" /> ...
justin.m.compra 07/07/2018

50

Gostaria de fornecer uma solução alternativa mais fácil, específica para FontAwesome. Se você estiver usando uma fonte icônica diferente, a resposta do JOPLOmacedo ainda será perfeitamente adequada.

FontAwesome agora lida com estilos de lista internamente com classes CSS .

Aqui está o exemplo oficial:

<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
Com o último Font-Awesome, você deve substituir "icons-ul" por "fa-ul" e "icon-li" por "fa-li": [código] <ul class = "fa-ul"> <li class = " fa-li fa fa-check "> ... </li> </ul> [/ code]
Thomas

4

Eu queria adicionar à resposta de JOPLOmacedo. Sua solução é a minha favorita, mas sempre tive problemas com o recuo quando o li tinha mais de uma linha. Foi difícil encontrar o recuo correto com margens, etc. Mas isso pode me interessar.

Para mim, o posicionamento absoluto do :beforepseudo-elemento funciona melhor. I definido padding-leftem ul, posição negativa deixada sobre o :beforeelemento, mesmo como ul de padding-left. Para obter a distância :beforecorreta entre o conteúdo e o elemento, basta definir padding-lefto li. Claro que o li tem que ter uma posição relativa. Por exemplo

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 ... */
}

Espero que isso esteja claro e tenha algum valor para outra pessoa que não eu.


3
Para todos os iniciantes, isso é formatado em uma linguagem de pré-processamento CSS chamada SASS. CSS puro não pode ser aninhado dessa maneira.
JoshWillik

1

Eu fiz assim:

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

Ou você pode tentar isso se quiser alterar a cor:

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

Fiz duas coisas inspiradas no comentário do @OscarJovanny, com alguns hacks.

Passo 1:

  • Baixe o arquivo de ícones como svg a partir daqui , pois eu só preciso deste ícone da fonte awesome

Passo 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>

Resultados

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.