CSS can keep count of numbers without writing any additional JavaScript.
It does this by taking note the amount of time a CSS block affects a page then incrementing the counter for that block if the counter-increment
rule is implemented.
For example:
input:invalid {
counter-increment: invalid-count;
}
With no JavaScript at all, CSS understands that whenever there is an invalid element, it should increment the count for the invalid-count
identifier.
Structure of CSS counters
CSS counter is a CSS rule that specify the increment-counter
property and an indentifier for the counter to increment.
To know how many HTML
exists in a page:
h1 {
increment-counter: total-h1-counter;
}
Since CSS would match every h1
on the page, the increment-counter
would be executed, thereby increasing the count for the total-h1-counter
.
Getting back to 0
A counter can go back to the 0
state by declaring the counter-reset: counter-identifier
CSS
rule
A use case here would be always reseting the number of total-h1-counter
on the page when the body of the document is matched, but incrementing when H1s are matched.
The CSS below helps to achieve that:
body {
counter-reset: total-h1-counter;
}
h1 {
counter-increment: total-h1-counter;
}
Rendering counter on a page.
We can use CSS Generated Content to make the value of a counter visible on the page. We can achieve this using pseudo elements(::before
, ::after
) through the content property.
<h1>The first</h1>
<h1>The Second</h1>
<h1>The third</h1>
<h1>The fourhtb</h1>
<section>There are</section/>
body {
counter-reset: total-h1-counter;
}
h1 {
counter-increment: total-h1-counter;
}
section:after {
content: " " counter(total-h1-counter) " H1 tags on the page";
font-weight: bold;
color: tomato;
}
Salut!