How to use CSS Counter ?

About

css supports counter variable 1) that can be used in a property value (for instance in a content property to add numbering to:

Example

List

For instance:

  • We create two counters:
    • one for the level 1
    • one for the level 2

counter-set is not yet supported by Apple Safari

 ol { counter-set: level1 } ol > ol { counter-set: level2 } 
  • Styling to show the counter value
 li { display: block } ol li::before { content: counter(level1) ". "; counter-increment: level1 } ol ol li::before { content: counter(level1) "." counter(level2, upper-roman) " "; counter-increment: level2 } 
  • The html
 <ol> <li> first item </li> <li> second item </li> <ol> <li> second level, first item </li> <li> second level, first item </li> </ol> <li> third item </li> <li> fourth item </li> </ol> 
  • The result:

Chapter and section

This example shows a way to number chapters and sections with “Chapter 1”, “1.1”, “1.2”, etc.

  • The css
 body { counter-set: chapter 0 section 0; /* scope is on the body */ } h1::before { content: "Chapter " counter(chapter) ". "; counter-increment: chapter 1; /* Add 1 to chapter */ counter-set: section 0; } h2::before { content: counter(chapter) "." counter(section) " "; counter-increment: section; } 
  • The html
 <h1>Chapter</h1> <h2>Section</h2> <h2>Section</h2> <h2>Section</h2> <h1>Chapter</h1> <h2>Section</h2> <h2>Section</h2> <h2>Section</h2> 
  • Output:

Property

  • counter-set 2) to create if not exist the named counter in the scope (ie the selected node and its descendants) and set a value.
  • counter-reset to reset the named counter to create and reset the named counter in the scope
  • counter-increment 3) to increment the named counter (by default +1)

Nested Counter

Nested counter 4) are pretty wild if you don't understand their internal.

Counter:

  • got an added extra internal id by scope (even if named)
  • their scope/creation is created:
    • explicitly with:
      • the counter-set
      • or counter-reset is called.
    • implicitly with:
      • the counter-increment if counter-set or counter-reset was not called before

For instance:

  • We create an item counter, for all children ol of the body element
 body > ol { counter-reset: item } 
  • We create / reset a new counter at the third ol descendant
 body > ol > ol > ol { counter-reset: item } 
  • Styling to show the counter value
 li { display: block } li::before { content: counter(item) ". "; counter-increment: item } 
  • The html and the explanation in comment or text
 <ol> <!-- item0 is created, set to 0 --> <li> item0 is incremented to 1 </li> <li> item0 is incremented to 2 </li> <ol> <li> item0 is incremented to 3 </li> <li> item0 is incremented to 4 </li> <ol> <!-- item1 is created, set to 0, nested in item0 --> <li> item1 is incremented to 1 </li> <li> item1 is incremented to 2 </li> </ol> <li> item1 is incremented to 3 and not item0 ! because their was no call to counter-set or reset</li> </ol> <li> item0 is incremented to 5 </li> <li> item0 is incremented to 6 </li> </ol> <ol> <!-- item2 is created, set to 0 --> <li> item2 is incremented to 1 </li> <li> item2 is incremented to 2 </li> </ol> 
  • The result:





Discover More
CSS - list-item (list formatting with marker box)

This page is the formatting of element seen as a list-item. A list-item has: a principal block box (the normal box) and anadditional box known as themarker box (the marker). All properties applies...
How to do HTML heading / outline numbering with CSS

Adding a number before a heading is a css feature made available through: the counter feature of the content property heading numbering of a section The CSS The HTML Result:



Share this page:
Follow us:
Task Runner