ol、liを用いた番号リストがあります。これの番号部のみを好きに作る方法に:beforeの疑似要素を用いるものがあります。
これは
ol.only-before {
list-style-type: none;
}
の様に元々の番号を消し、
ol.has-before {
counter-reset:num;
}
ol.has-before li:before {
counter-increment: num;
content: counter(num);
background: cyan;
border-radius: 50%;
display: inline-block;
height: 1em;
width: 1em;
text-align: center;
}
の様にcounter-reset, counter-increment, contentで番号を制御、表示し、background以下で好きなように修飾する方法です。
このように好きに番号リストの番号部のデザインを作れますが、面倒な部分もあります。それは疑似要素はDOMでないためJavaScriptで操りにくい点とli要素の度のcounter-increment: num;でしか値を増やせない点です。
本来の番号リストは次の様にli要素の属性valueで番号を制御できます。:beforeの方は制御できていません。
制御する方法の一つはCSSです。適宜リセットするstyleを定義します。この方法はCSSが膨れ上がるという問題点がありますが、一応対処が可能です。
適宜インクリメント、デクリメントするのみの要素を定義する、ということもできます。これはこれでHTMLの要素数が無駄に増えます。また、抜け版を表すのには適していますが、任意に操りやすいとは言い難いです。
両方を使えばそれぞれの欠点は多少補いあえます。
もしデザインに最初から関われるのであれば、CSSで閉じている疑似要素を使うのでなく、本物の要素を扱った番号リストを作った方がよいでしょう。その方が後の変更が楽になります。Vue.jsなら簡単です。