Contare gli elementi in pagina con CSS
CssIn uno degli ultimi progetti di Evolve mi è capitato di utilizzare una proprietà CSS che si chiama counter-increment, che uso raramente, così ho pensato che potesse essere una buona idea fare una breve panoramica per chi ancora non la conosce.
Counter-increment è una proprietà che si occupa di aumentare o diminuire un valore, è molto semplice da utilizzare ed è molto utile in quei casi in cui magari non vogliamo o non possiamo creare un contatore via PHP.
Come funziona?
Nella sua implementazione base ci basterà aggiungere counter-increment: contatore;
alla classe o elemento che vogliamo contare, per esempio:
h2 {
counter-increment: contatore;
}
A questo punto il valore di contatore
sarà disponibile e potremo riutilizzarlo per esempio per prependerlo a tutti gli h2
utilizzando la funzione counter()
:
h2:before {
content: counter(contatore);
}
La funzione counter()
è incaricata di ritornare il valore di un contatore e può essere utilizzata come counter(contatore)
oppure counter(contatore,stile)
e supporta gli stessi stili delle liste, ovvero: disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit
.
Un aspetto molto interessante dei contatori è che possono essere circoscritti a diverse aree o contesti utilizzando la proprietà counter-reset che permette di resettare il valore di uno o più contatori a zero o ad un valore predefinito.
Counter-increment può essere influenzato dalla struttura del markup, quindi è importante capire quando è necessario utilizzare counter-reset
:
<ul> <li>List item</li> <li>List item</li> <li>List item</li> </ul>
In questo caso se volessimo contare i li
ci basterebbe scrivere:
li {
counter-increment: contatore-li;
}
Aggiungendo un altro ul
il conteggio dei li
ripartirà automaticamente da 0.
Facciamo un altro esempio per capire quando utilizzare la proprietà di counter-reset
:
<article>Articolo</article> <article>Articolo</article> <article>Articolo</article> <aside> <article>Articolo</article> <article>Articolo</article> <article>Articolo</article> </aside>
article {
counter-increment: conta-articoli;
} article:before {
content: counter(conta-articoli);
}
In questo caso il valore del contatore sull’ultimo articolo sarà 6.
Per far si che il conteggio degli article
all’interno del nostro elemento aside
riparta da 0 dovremo aggiungere la seguente regola:
aside {
counter-reset: conta-articoli;
}
Cosa non può fare
Onde evitare fraintendimenti, counter-increment non è disponibile globalmente una volta valorizzato ma è sempre associato all’elemento dove è stato specificato.
Il valore anche se è un intero possiamo considerarlo come una stringa perché non è possibile usarlo all’interno di calc() per delle operazioni.
Altri articoli simili
use e forward, come cambia SASS e i nostri progetti
08.01.2022
Accessibilità e CSS, gestire gli oggetti in movimento
07.11.2019
Organizzare e gestire la tipografia con le mappe di SASS
06.11.2019
Usare le mappe per gestire font e colori con SASS
29.10.2019
Siamo pronti a fare a meno di un framework CSS?
17.10.2019
Variabili CSS, come e quando usarle
07.08.2019
Resettare o normalizzare il foglio stile?
16.07.2019