Можете ли вы оформить номера упорядоченного списка?

89

Я пытаюсь стилизовать числа в упорядоченном списке, я хотел бы добавить цвет фона, радиус границы и цвет, чтобы они соответствовали дизайну, над которым я работаю:

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

Я думаю, это невозможно, и мне придется использовать разные изображения для каждого числа, т.е.

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

Есть ли решение попроще?

Pixelomo
источник
3
Вы можете найти решение из моей демонстрации здесь jsfiddle.net/viphalongpro/Hj8Nn Кстати, я не думаю, что это невозможно для поиска, сначала поиск может дать вам много результатов , прямо в SO, этот вопрос был спрашивал много раз.
King King
1
несколько ссылок для информации 1. codeitdown.com/ordered-list-css-styles 2. css-tricks.com/numbering-in-style Это хороший qtn, но небольшой поиск мог бы дать вам ответ
crafter
1
@KingKing - Тогда я бы посоветовал пометить это как дубликат ...
Ли Тейлор,

Ответы:

188

Вы можете сделать это с помощью счетчиков CSS в сочетании с :beforeпсевдоэлементом:

 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
источник
12
Он counter-reset: item;должен находиться в блоке ol, иначе счетчик не будет сброшен во вложенном <ol>.
Michael Klöpzig
2
хорошее решение, но как рендеринг, когда тело liэлемента занимает больше одной строки?
cmhughes
Я думаю, что, как и в stackoverflow.com/questions/13354578/… , вы можете использовать, например, `margin-left: -2.0em; width: -2.0em; `
cmhughes
Для получения круга достаточно значения 50%for border-radius(а не 100%). (См., Например, Lea Verou, « Любопытный случай border-radius: 50% », 30 октября 2010 г.)
Джим Рэтлифф,
@cmhughes - если бы вы хотели это сделать, вы бы дали li position: relative;, а затем :beforeвы дали бы это, position: absolute;а затем использовали topи, leftчтобы расположить его точно так, как вам нравится.
Майк
25

Я искал что-то другое и нашел этот пример на CodePen;

попробуйте это: 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>

Русь
источник