CSS: Contenido

CSS permite agregar contenido estético a cualquier elemento HTML. Se trata de una funcionalidad que puede llegar a ser un tanto controvertida, ya que la razón de ser del lenguaje CSS es precisamente separar el contenido del diseño.

Con la propiedad CSS content se indica el contenido que se debe aplicar a un elemento HTML. Para ello se debe usar cualquiera de los dos pseudoelementos: ::before y ::after, que como sus nombres indican permiten añadir contenido antes y después del elemento HTML, respectivamente.

Un ejemplo de uso sería añadir el texto «Nota:» al principio de una anotación. Se indica el color rojo para hacerlo más visible.

Código CSS:

.ej1::before {
  color: red;
  content: "Nota: ";
}

Resultado:

Este párrafo es una nota.

El valor de content se ha indicado entre comillas con un espacio en blanco al final. Así se visualiza separado del resto del texto.

La propiedad content puede tener varios tipos de valores, por lo que la cadena de texto del ejemplo anterior es solo una muestra de su enorme potencial.

Valor Descripción
normal Valor por defecto.
none El contenido no se genera.
"" o '' Agrega una cadena de texto.
url() URL válida de una imagen.
attr() Indica el valor de un atributo.
counter() Muestra el valor de un contador.
counters() Trabaja con contadores anidados.
open-quote Muestra comillas de apertura.
close-quote Muestra comillas de cierre.
no-open-quote No muestra comillas de apertura.
no-close-quote No muestra comillas de cierre.

El valor por defecto es normal y varía según el pseudoelemento. Por ejemplo, para ::before y ::after se calcula como none, es decir, que el contenido no se genera. Pero para otros pseudoelementos como ::marker, ::placeholder o ::file-selector-button se calcula como initial.

Cadena de texto

Una cadena de texto es un conjunto de uno o más caracteres encerrados entre comillas dobles ("") o comillas simples (''), y es dentro de las comillas que se introduce el texto o los caracteres que se quieran agregar. Por tanto, en estos casos el valor de la propiedad content irá entre comillas dobles o simples.

En un ejemplo anterior se ha agregado el texto «Nota:» como prefijo de un párrafo, usando el pseudoelemento ::before. En cambio, para agregar contenido al final de un elemento HTML se usa el pseudoelemento ::after. En el siguiente ejemplo se agrega una flecha al principio del párrafo y tres puntos suspensivos al final.

Código CSS:

.ej2::before {
  color: red;
  content: "→ ";
  font-weight: bold;
}

.ej2::after {
  color: red;
  content: "…";
  font-weight: bold;
}

Resultado:

Párrafo de ejemplo

Carácter de escape

Si se da el caso de que la cadena de texto que se quiere agregar contiene comillas dobles, se puede englobar con las comillas simples y viceversa. De este modo no se genera ningún conflicto. Pero si hay que usar las dos, se puede utilizar el carácter de escape como prefijo: el símbolo \, llamado barra inversa o invertida.

  • Escapar una comilla doble: \"
  • Escapar una comilla simple: \'

Código CSS:

.ej3::before,
.ej3::after {
  color: red;
  content: "'\"'";
}

Resultado:

Comillas dobles y simples a la vez.

Caracteres Unicode

La propiedad content admite secuencias numéricas de Unicode como valor. Se utiliza introduciendo su código hexadecimal tras haberlo escapado con la barra inversa (\). Por ejemplo, el guión lago tiene el código 2014, por lo que el valor a usar es "\2014". En estos casos, cualquier otro carácter agregado antes o después de la secuencia numérica no es tomado en cuenta.

Código CSS:

.ej4::before {
  color: red;
  content: "\2014";
}

Resultado:

Otro párrafo de ejemplo.

Iconos de fuentes

Algunas fuentes incluyen caracteres correspondientes a los logotipos de las redes sociales o iconos de interfaz gráfica, así pueden ser usados mediante este método en el desarrollo web. Para realizarlo, es tan fácil como indicar la familia de la fuente mediante la propiedad font-family en la misma regla CSS.

Código CSS:

.ej5::before {
  color: red;
  content: "\f002";
  font-family: "sigma-icons";
  font-size: 0.875em;
  padding-right: 8px;
}

Resultado:

Párrafo con icono.

La fuente “sigma-icons” tiene el icono de una lupa en el código Unicode \f002. Debido a que los códigos Unicode no admiten ningún otro carácter, la separación visual se consigue modificando los márgenes, el relleno y la posición. De nada serviría dejar un espacio en blanco al final.

Limitaciones

Las cadenas de texto solo permiten agregar texto básico. Por ejemplo, si se quisiera agregar una etiqueta HTML, el navegador web la mostraría tal y como está escrita, sin interpretarla. Por tanto, los valores "<em>" y "</em>" aplicados a los pseudoelementos ::before y ::after dan el siguiente resultado:

Código CSS:

.ej6::before {
  color: red;
  content: "<em>";
}

.ej6::after {
  color: red;
  content: "</em>";
}

Resultado:

Este párrafo es de prueba.

El texto no está en cursiva. Las etiquetas HTML <em> y </em> han sido insertadas como texto en lugar de ser interpretadas.

Imagen externa: la función ‘url()’

Con la función url() como valor se puede indicar la dirección URL de una imagen externa. Debe ser una URL válida, ya sea relativa o absoluta. La sintaxis es idéntica al resto de propiedades CSS que admiten esta función.

En el siguiente ejemplo se muestra el favicono de Recursivos, insertándolo como contenido a través del pseudoelemento ::before.

Código CSS:

.ej7::before {
  content: url("/favicon.svg");
  padding-right: 8px;
}

Resultado:

Párrafo con una imagen externa.

Valor de atributo: la función ‘attr()’

La función attr() permite obtener el valor de un atributo del elemento HTML en cuestión. Dentro del paréntesis se usa como parámetro el nombre del atributo deseado, por ejemplo: href, title o data-*. Un ejemplo de uso sería mostrar la definición (atributo title) de un acrónimo (elemento <abbr>).

Código CSS:

.ej8::after {
  color: red;
  content: " (" attr(title) ")";
}

Resultado:

El lenguaje CSS.

Antes y después de la función attr() se ha añadido los signos del paréntesis encerrados como cadena de texto: " (" y ")". Así, el valor del atributo title se visualiza del paréntesis y se entiende mejor.

Contadores

Otra función interesante que se puede usar con la propiedad content es counter(). Con esta función es posible crear contadores personalizados y adaptados según sea conveniente. Se usa juntamente con otras dos propiedades CSS: counter-increment y counter-reset.

Esta función admite dos parámetros: de forma obligatoria se debe indicar el nombre del contador, y de forma opcional se indicará el tipo de contador que se quiere utilizar. Por defecto, el navegador web usará el tipo decimal. Los estilos permitidos son los mismos que los de la propiedad list-style-type para diseñar listas.

Otra función similar a la anterior es counters(), pero en este caso permite trabajar con contadores anidados. Esta función agrega la capacidad de mostrar una cadena de valores de contadores separados por un delimitador.

Un ejemplo de uso puede ser la modificación de la numeración de listas anidadas para conseguir que muestren una numeración de nivel inferior al lado de la numeración principal. Esta es la numeración por defecto:

  1. Elemento
  2. Elemento
    1. Elemento
    2. Elemento
      1. Elemento
      2. Elemento

Código CSS creando un contador para elementos anidados:

.ej9,
.ej9 li ol,
.ej9 li ol li ol {
  counter-reset: elemento;
  list-style-type: none;
}

.ej9 li:before {
  color: red;
  content: counters(elemento, '. ') ". ";
  counter-increment: elemento;
}

Código HTML:

<ol class="ej9">
  <li>Elemento</li>
  <li>Elemento
    <ol>
      <li>Elemento</li>
      <li>Elemento
        <ol>
          <li>Elemento</li>
          <li>Elemento</li>
        </ol>
      </li>
    </ol>
  </li>
</ol>

Resultado:

  1. Elemento
  2. Elemento
    1. Elemento
    2. Elemento
      1. Elemento
      2. Elemento

Cada vez que el navegador se encuentra un elemento con la clase ej9 crea un contador llamado elemento. Por esta razón, los elementos <li> anidados se ven afectados por varios contadores llamados elemento.

Comillas

La propiedad content también puede usarse para mostrar comillas de apertura y de cierre, indicándolas con los pseudoelementos ::before y ::after, respectivamente. No obstante, para este caso específico puede utilizarse la propiedad quotes para definir las comillas que se quiere mostrar. Con esta propiedad se puede indicar varios niveles de comillas.

Cuando se indica las comillas mediante la propiedad quotes, el valor de la propiedad content puede ser una de las siguientes palabras clave: open-quote, close-quote, no-open-quote y no-close-quote, que sirven para mostrar o no mostrar las comillas de apertura y cierre.

Código CSS:

.ej10 q {
  quotes: "«" "»" "‹" "›" "'" "'";
}

.ej10 q::before {
  color: red;
  content: open-quote;
}

.ej10 q::after {
  color: red;
  content: close-quote;
}

Código HTML:

<p class="ej10">
  <q>Párrafo <q>con <q>tres</q> niveles</q> de comillas</q>.
</p>

Resultado:

Párrafo con tres niveles de comillas.

Cada vez que el navegador se encuentra un elemento de citación de línea (elemento <q>), añade las comillas según el nivel que corresponda.

Reemplazo de elementos

Cuando se usa la propiedad content directamente sobre un elemento HTML en lugar de usar los pseudoelementos ::before y ::after, el contenido original es reemplazado con el que se haya indicado. Esto sucede con cualquier tipo de imagen declarada, ya sea mediante la función url() o un degradado.

Vamos a generar una imagen sobre un párrafo.

Código CSS:

.ej11 {
  content: url("/favicon.svg");
}

Código HTML:

<p class="ej11">Este párrafo desaparecerá.</p>

Resultado:

Este párrafo desaparecerá.

¿Lo ves? El texto del párrafo no aparece por ninguna parte.

Hay que tener en cuenta que al generar contenido sobre elementos regulares, se reemplaza todo el elemento HTML. Esto implica que no se generará el contenido declarado mediante los pseudoelementos ::before y ::after.

← Artículo anterior
Artículo siguiente →