5

Is it possible to pad counter numbers depending on its value?

div {
  counter-reset: ruler;
}

div > span {
  display: block;
  line-height: 1rem;
}

div > span::before {
  counter-increment: ruler;
  content: counter( ruler ) ' ';
}
<div>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
</div>

Like if there are 42 lines, numbers will be like 09 or  9, 420 — 009 or   9.

2 Answers2

11

Use decimal-leading-zero inside the counter.

div {
  counter-reset: ruler;
}

div > span {
  display: block;
  line-height: 1rem;
}

div > span::before {
  counter-increment: ruler;
  content: counter( ruler , decimal-leading-zero) ' ';
}
<div>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
</div>
Mehul Rudatala
  • 401
  • 3
  • 8
  • 3
    awesome! didn't know about this. I noticed however that once you get to 100, the numbers before that don't have leading zeros, so the alignment goes off again – Craig Wayne Dec 17 '19 at 07:25
0

Without leading zeroes and aligned right. But since it uses a static width you'd have to adjust that if you expect more than 999 lines.

document.querySelector("div").innerHTML = `<span>Hello, World!</span>`.repeat(150);
div {
  counter-reset: ruler;
}

div>span {
  display: block;
  line-height: 1rem;
}

div>span::before {
  counter-increment: ruler;
  content: counter( ruler) '\A0';
  width: 2em;
  display: inline-block;
  text-align: right;
}
<div>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
  <span>Hello, World!</span>
</div>
Thomas
  • 11,958
  • 1
  • 14
  • 23