Czy możesz stylizować uporządkowane numery list?

89

Próbuję stylizować liczby na uporządkowanej liście, chciałbym dodać kolor tła, promień obramowania i kolor, aby pasowały do ​​projektu, nad którym pracuję:

wprowadź opis obrazu tutaj

Myślę, że nie jest to możliwe i będę musiał użyć różnych obrazów dla każdego numeru, tj

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

Czy istnieje prostsze rozwiązanie?

Pixelomo
źródło
3
Możesz poszukać rozwiązania z mojego demo tutaj jsfiddle.net/viphalongpro/Hj8Nn BTW, nie sądzę, że jest to niemożliwe do wyszukania, wyszukiwanie może dać wiele wyników , właśnie w SO, tego rodzaju pytanie pytał wiele razy.
King King
1
kilka linków do informacji 1. codeitdown.com/ordered-list-css-styles 2. css-tricks.com/numbering-in-style To dobry qtn, ale trochę wyszukiwania może dać ci odpowiedź
crafter
1
@KingKing - Sugerowałbym oznaczenie tego jako duplikatu, a następnie ...
Lee Taylor

Odpowiedzi:

188

Możesz to zrobić za pomocą liczników CSS w połączeniu z :beforepseudoelementem:

 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
źródło
12
counter-reset: item;Powinien iść w bloku ol, w przeciwnym razie licznik nie zostanie zresetowany w zagnieżdżonych <ol>.
Michael Klöpzig
2
fajne rozwiązanie, ale jak wygląda renderowanie, gdy ciało lielementu składa się z więcej niż jednej linii?
cmhughes
Myślę, że tak jak w stackoverflow.com/questions/13354578/… , możesz użyć na przykład `margin-left: -2.0em; width: -2.0em; `
cmhughes
Wartość 50%for border-radius(zamiast 100%) jest wystarczająca, aby uzyskać okrąg. (Patrz np. Lea Verou, „ The curious case of border-radius: 50% ”, 30 października 2010 r.)
Jim Ratliff,
@cmhughes - jeśli chcesz to zrobić, dasz li position: relative;, a potem :beforeto, position: absolute;a następnie użyj topi ustaw leftdokładnie tak, jak chcesz.
mike
25

Szukałem czegoś innego i znalazłem ten przykład w CodePen;

spróbuj tego: 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
źródło