Я предлагаю поиграть с атрибутом: before и посмотреть, чего можно достичь с его помощью. Это будет означать, что ваш код действительно ограничен хорошими новыми браузерами и исключает (раздражающе большой) сегмент рынка, все еще использующий старые мусорные браузеры,
Что-то вроде следующего, которое заставляет фиксироваться на предметах. Да, я знаю, что выбирать ширину не так уж и красиво, но использование CSS для вашего макета похоже на работу полиции под прикрытием: какими бы хорошими ни были ваши мотивы, она всегда становится грязной.
li:before {
content: counter(item) ") ";
counter-increment: item;
display: marker;
width: 2em;
}
Но вам придется экспериментировать, чтобы найти точное решение.