Você pode estilizar números de lista ordenados?

91

Estou tentando definir o estilo dos números em uma lista ordenada, gostaria de adicionar cor de fundo, raio de borda e cor para que correspondam ao design a partir do qual estou trabalhando:

insira a descrição da imagem aqui

Acho que não é possível e terei que usar imagens diferentes para cada número, ou seja,

ol li:first-child {list-style-image:url('1.gif')};
ol li:nth-child(2) {list-style-image:url('2.gif');} 
etc...

Existe uma solução mais simples?

Pixelomo
fonte
3
Você pode pesquisar uma solução da minha demonstração aqui jsfiddle.net/viphalongpro/Hj8Nn BTW, não acho que isso seja impossível de pesquisar, pesquisar primeiro pode dar muitos resultados , certo no SO, esse tipo de pergunta tem sido perguntou muitas vezes.
Rei Rei
1
alguns links para a informação 1. codeitdown.com/ordered-list-css-styles 2. css-tricks.com/numbering-in-style É um bom qtn, mas um pouco de pesquisa pode ter encontrado a resposta
crafter
1
@KingKing - Eu sugeriria marcar isto como uma duplicata então ...
Lee Taylor

Respostas:

189

Você pode fazer isso usando contadores CSS , em conjunto com o :beforepseudo elemento:

 ol {
   list-style: none;
   counter-reset: item;
 }
 li {
   counter-increment: item;
   margin-bottom: 5px;
 }
 li:before {
   margin-right: 10px;
   content: counter(item);
   background: lightblue;
   border-radius: 100%;
   color: white;
   width: 1.2em;
   text-align: center;
   display: inline-block;
 }
<ol>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
</ol>

SW4
fonte
12
O counter-reset: item;deve ir para o bloco ol, caso contrário, o contador não será zerado no <ol> aninhado.
Michael Klöpzig
2
uma boa solução, mas como é a renderização quando o corpo do lielemento é mais de uma linha?
cmhughes de
Acho que, como em stackoverflow.com/questions/13354578/… , você pode usar, por exemplo, `margin-left: -2,0em; largura: -2,0em; `
cmhughes
Um valor 50%para border-radius(em vez de 100%) é suficiente para obter um círculo. (Ver, por exemplo, Lea Verou, " The curious case of border-radius: 50% ", 30 de outubro de 2010.)
Jim Ratliff
@cmhughes - se você quisesse fazer isso, você daria o li position: relative;, e então :beforevocê daria position: absolute;e então usaria tope leftposicionaria exatamente como você gostaria.
mike
25

Eu estava procurando por algo diferente e encontrei este exemplo na CodePen;

tente isto: http://codepen.io/sawmac/pen/txBhK

body {
  font-size: 1.2em;
  font-family: "Helvetica Neue", Helvetica, sans-serif;
  margin: 50px;
}
.custom-counter {
  margin: 0;
  padding: 0;
  list-style-type: none;
}
.custom-counter li {
  counter-increment: step-counter;
  margin-bottom: 5px;
}
.custom-counter li::before {
  content: counter(step-counter);
  margin-right: 20px;
  font-size: 80%;
  background-color: rgb(180, 180, 180);
  color: white;
  font-weight: bold;
  padding: 3px 8px;
  border-radius: 11px;
}
<ol class="custom-counter">
  <li>This is the first item</li>
  <li>This is the second item</li>
  <li>This is the third item</li>
  <li>This is the fourth item</li>
  <li>This is the fifth item</li>
  <li>This is the sixth item</li>
</ol>

Russ
fonte