CSS Counters

Being somewhat similar to variables, the CSS Counters can be incremented by CSS rules. They are thus used to track the number of times they are used. A simple CSS-based incrementing can thus be achieved by using the CSS Counters. A CSS counter is created using the counter-reset.

CSS Counter Properties:

The properties used with the CSS counter are listed below:

Counter-reset:

Use: To create or reset a counter.

Counter-increment:

Use: To increment the counter value.

Content:

Use: To insert generated content.

Counter() or Counters() function:

Use: To add the value of a counter to an element.

Example:

<!DOCTYPE html>
<html>
<head>
<style>
body {
counter-reset: topic;
}
h3::before {
counter-increment: topic;
content: "Topic " counter(topic) ": ";
}
</style>
</head>
<body>
<h2>List of Topics:</h2>
<h3>HTML</h3>
<h3>CSS</h3>
<h3>JavaScript</h3>
<h3>JQuery</h3>
</body>
</html>

Explanation:

In the above example, we created a counter whose value is incremented for each <h3> element and added “Topic <value of the counter>:” to the beginning of each <h3> element.

CSS Nesting Counters:

Creating counters within a counter is called nesting of a counter.

Example:

<!DOCTYPE html>
<html>
<head>
<style>
body {
counter-reset: topic;
}
h2 {
counter-reset: subtopic;
}
h2::before {
counter-increment: topic;
content: "Topic " counter(topic) ". ";
}
h3::before {
counter-increment: subtopic;
content: counter(topic) "." counter(subtopic) " ";
}
</style>
</head>
<body>
<h2>Fruits:</h2>
<h3>Apple</h3>
<h3>Banana</h3>
<h3>Mango</h3>
<h3>Peach</h3>
<h3>Guava</h3>
<h2>Flowers:</h2>
<h3>Lily</h3>
<h3>Orchid</h3>
<h3>Rose</h3>
<h3>Hibiscus</h3>
</body>
</html>

Explanation:

In the above example, a counter is created for the section, and within the section, another nesting counter named subsection is created.

Level of nesting counters:

To create outlined lists, the nesting counters can be used. A string can also be inserted between different levels of nested counters.

Example:

<!DOCTYPE html>
<html>
<head>
<style>
ol {
counter-reset: topic;
list-style-type: none;
}
li::before {
counter-increment: topic;
content: counters(topic,".") " ";
}
</style>
</head>
<body>
<h2>Example:</h2>
<ol>
<li>Fruits</li>
<li>Flowers
<ol>
<li>Rose</li>
<li>Lily</li>
<li>Tulip</li>
<li>Orchid</li>
<li>Hibiscus</li>
<li>Lotus</li>
<li>Tulip</li>
<li>Sunflower</li></ol>
<li>Vegetables</li>
</ol>
</body>
</html>

Explanation:

In the above example, we used two levels of nested counters in CSS.