Introducción a los contadores CSS

Introducción
En programación, los contadores son variables que contienen un valor que se incrementa según reglas personalizables. Tienen muchas finalidades, como ayudar a controlar los bucles almacenando la cantidad de veces que se ha ejecutado el bucle. Aunque se utilizan de forma rutinaria en los lenguajes de programación, los contadores no se han incluido tradicionalmente en la sintaxis de las hojas de estilo en cascada (CSS). Antes de la era de las CSS modernas, el seguimiento de los elementos de la página con fines de estilo se hacía manualmente en el marcado o mediante JavaScript para contar los elementos. Pero ahora, CSS tiene una propiedad de contador bien compatible que puede realizar un seguimiento de los incrementos sin JavaScript.
En este tutorial, repasará los conceptos básicos de los contadores CSS y los utilizará para numerar section
elementos en un documento de lenguaje de marcado de hipertexto (HTML) y contar la cantidad de filas de un table
elemento.
Prerrequisitos
- Un archivo HTML guardado en su equipo local al
index.html
que puede acceder desde el navegador web que elija. Para comenzar, consulte nuestro tutorial Cómo configurar su proyecto HTML y siga Cómo usar y comprender los elementos HTML para obtener instrucciones sobre cómo ver su HTML en su navegador. Si no tiene experiencia con HTML, pruebe la serie completa Cómo crear un sitio web en HTML.
Numeración de secciones de una página
Para demostrar cómo funcionan los contadores en CSS, primero utilizará una hoja de estilo para adjuntar un número a varios section
elementos en su HTML. Con los contadores, hará que el número se incremente en uno para cada nueva sección.
En primer lugar, utilice el editor de texto que prefiera para abrir el index.html
archivo. En este tutorial, utilizará nano
:
- nano index.html
Una vez abierto el archivo, agrega el siguiente HTML para crear la estructura semántica de tu sitio web, que en nuestro ejemplo es una hoja informativa sobre reptiles:
índice.html
!DOCTYPE htmlhtml head meta charset="utf-8" titleIntroduction to CSS Counters/title link rel="stylesheet" type="text/css" href="counter.css" /head body section h2Ratings/h2 Insert a table with reptile ratings on it... /section section h2Alligators/h2 Insert facts about alligators here... /section section h2Turtles/h2 Insert facts about turtles here... /section section h2Snakes/h2 Insert facts about snakes here... /section /body/html
En este código, usaste el section
elemento para crear cuatro secciones de tu sitio, con títulos establecidos como h2
encabezados. También agregaste un link
elemento en el head
que se conecta al archivo CSS counter.css
, que crearás pronto.
Guarde y cierre el archivo. Ábralo index.html
en su navegador y encontrará lo siguiente:
Si quisiera numerar cada uno section
en este HTML, podría anteponer a cada uno h2
el número directamente en el marcado, de la siguiente manera:
... section h21. Ratings/h2 Insert a table with reptile ratings on it... /section section h22. Alligators/h2 Insert facts about alligators here... /section...
Si bien es una gran solución cuando se cuenta con una cantidad fija y pequeña de secciones, esto se torna tedioso y propenso a errores cuando se tienen decenas o incluso cientos de secciones. Además, la complejidad aumenta rápidamente en el momento en que se necesita reordenar las secciones.
Para automatizar esta numeración, puede utilizar contadores CSS.
Crea y abre tu counter.css
archivo en el mismo directorio que index.html
:
- nano counter.css
Los contadores en CSS se comportan como variables en los lenguajes de programación tradicionales. El primer paso para usar contadores CSS es inicializar un contador, lo que le da un nombre y establece un valor inicial.
Añade el siguiente código a tu archivo:
contador.css
body { counter-reset: sectionCounter;}
En este código, solía counter-reset
inicializar un contador llamado sectionCounter
. En este punto, sectionCounter
es igual a 0
.
Puede declarar el valor inicializado explícitamente al pasar un entero a la counter-reset
propiedad después del nombre del contador. Por ejemplo, counter-reset: sectionCounter 2
inicializaría el sectionCounter
contador con un valor de 2
. Si no se especifica el valor entero, el valor del contador es 0
el predeterminado.
Ahora que ha inicializado el contador, puede configurar cómo se incrementa. Para cada sección, deberá incrementar el contador en 1
. Para ello, agregue el siguiente código resaltado:
contador.css
body { counter-reset: sectionCounter;}section { counter-increment: sectionCounter;}
En este código, seleccionaste todos section
los elementos para que tengan la counter-increment
propiedad. Esto significa que cada vez que el CSS encuentre un section
elemento, incrementará el contador. Al configurar la propiedad en , sectionCounter
se elige incrementar el contador denominado sectionCounter
. De manera predeterminada, el contador se incrementa en uno, pero si quisieras especificar el incremento, podrías agregar un número entero después, sectionCounter
separado por un espacio en blanco.
Una vez que el contador se haya inicializado y la lógica de incremento esté configurada, ya puede utilizar el contador. Para utilizar el valor del contador, utilice la content
propiedad para anteponer el valor al encabezado h2
:
contador.css
body { counter-reset: sectionCounter;}section { counter-increment: sectionCounter;}h2::before { content: counter(sectionCounter) ". ";}
Utilizaste el ::before
pseudoelemento para agregar un elemento antes de cada h2
encabezado. Para establecer el contenido del nuevo elemento, utilizaste la content
propiedad, junto con la counter()
función. Esta función devuelve el valor de sectionCounter
como una cadena. Si pasas una segunda cadena a, content
se concatenará la cadena, por lo que se imprime el valor de sectionCounter
seguido de un .
y un espacio.
Guarde y cierre el archivo. Actualice su navegador web y verá encabezados de sección como 1. Calificaciones y 2. Caimanes :
Eso no es todo; el contador es inmune a agregar y eliminar nuevas secciones, así como a reordenarlas, por lo que no tendrás que volver a numerar si cambias el orden.
Para probar esto, abra su archivo HTML:
- nano index.html
Cambiar el orden de las secciones Turtles
y Snakes
:
índice.html
... body section h2Ratings/h2 Insert a table with reptile ratings on it... /section section h2Alligators/h2 Insert facts about alligators here... /section section h2Snakes/h2 Insert facts about snakes here... /section section h2Turtles/h2 Insert facts about turtles here... /section /body...
Guarde y cierre el archivo. Vuelva a cargar el navegador y encontrará lo siguiente:
En esta sección, utilizó contadores CSS para automatizar secciones numeradas en un documento HTML. A continuación, ejecutará un ejemplo en el que se utiliza el table
elemento para ilustrar cómo utilizar contadores para realizar cálculos de totales.
Contar el número de filas en una tabla
Además de automatizar la numeración en un documento HTML, puede utilizar contadores CSS para cualquier tarea que implique un incremento periódico. Para demostrarlo, utilizará contadores para almacenar la cantidad de filas de un table
elemento y, luego, mostrará el total en la tabla.
Contar la cantidad de filas o tr
elementos de una tabla table
es similar a cómo se sumó un valor numérico a cada section
elemento en la parte anterior del tutorial. La gran diferencia será que la parte importante es el valor total y no el valor de cada fila.
Antes de contar las filas de un table
, necesitará un table
con el que trabajar. Abra su archivo HTML:
- nano index.html
Ahora agregue las siguientes líneas resaltadas para crear su tabla en Calificaciones section
:
índice.html
!DOCTYPE htmlhtml head meta charset="utf-8" titleIntroduction to CSS Counters/title link rel="stylesheet" type="text/css" href="counter.css" /head body section h2Ratings/h2 table cellpadding="5" thead tr thReptile/th thRating/th /tr /thead tbody tr tdAlligator/td td9001/td /tr tr tdTurtle/td td223/td /tr tr tdSnake/td td3.14/td /tr /tbody tfoot tr thRows/th th/th /tr /tfoot /table /section section h2Alligators/h2 Insert facts about alligators here... /section...
Utilizaste el table
elemento para crear una tabla, junto con el tr
elemento para determinar las filas de la tabla y el td
elemento para llenar la fila con puntos de datos. Observa el uso de thead
, tbody
y tfoot
. Si bien no son necesarios, estos elementos agrupan las filas en secciones semánticas, que puedes usar para orientar mejor las filas en la tbody
sección y omitir las filas del encabezado o pie de página. Por último, utilizaste los atributos border
y cellpadding
para darle a tu tabla un estilo básico.
Guardar y salir index.html
. Actualice la página en su navegador y verá lo siguiente:
Ahora, abre tu archivo CSS:
- nano counter.css
Al igual que antes, querrá iniciar un contador con un valor cero. Pero esta vez, agregue un nuevo contador llamado rowCounter
:
contador.css
body { counter-reset: sectionCounter; counter-reset: rowCounter;}section { counter-increment: sectionCounter;}h2::before { content: counter(sectionCounter) ". ";}
Para cada fila o tr
elemento, tbody
incremente el contador:
contador.css
body { counter-reset: sectionCounter; counter-reset: rowCounter;}section { counter-increment: sectionCounter;}h2::before { content: counter(sectionCounter) ". ";}table tbody tr { counter-increment: rowCounter;}
Usaste el table tbody tr
selector para seleccionar todos los tr
elementos en tbody
, luego usaste la counter-increment
propiedad, pero esta vez con el rowCounter
contador.
Finalmente, agregue el valor final del contador al pie de página en la columna con la clase de total
:
contador.css
body { counter-reset: sectionCounter; counter-reset: rows;}section { counter-increment: sectionCounter;}h2::before { content: counter(sectionCounter) ". ";}table tbody tr { counter-increment: rowCounter;}table .total::before { content: counter(rowCounter);}
Como antes, usaste el ::before
pseudoelemento para agregar el valor de rowCounter
como una nueva cadena. Dado que esto se declara después de que se incrementó el recuento, informará la cantidad total de filas.
Guarde y salga del archivo CSS, luego vuelva a cargar la página en el navegador para mostrar lo siguiente:
Ahora table
siempre se informará cuántas filas contiene. Si se agregan o eliminan filas al marcado, se obtendrá un total actualizado. Esto funciona incluso cuando se usa JavaScript para manipular el DOM.
Conclusión
Los contadores en CSS son útiles para mostrar un valor que aumenta con determinados elementos en el código HTML. En muchos casos, esto puede eliminar por completo la necesidad de introducir JavaScript en una página, lo que lo convierte en una solución ideal para proyectos web ligeros que no necesitan interactividad. Sin embargo, tenga en cuenta que el uso de CSS de esta manera difumina la línea entre el contenido y el diseño, y no separa los intereses de una manera que permita gestionar aplicaciones más grandes. Por este motivo, se recomienda evitar este método en aplicaciones JavaScript más complicadas.
Si desea obtener más información sobre el estilo de sitios web, consulte la serie Cómo crear un sitio web con HTML o nuestro tutorial sobre Cómo diseñar componentes de React.
Deja una respuesta