Los desarrolladores de temas de WordPress pueden utilizar un archivo theme.json para agilizar un proceso que solía depender en gran medida de PHP. Sin embargo, puedes seguir utilizando tus conocimientos de HTML, JavaScript y PHP para crear tus temas, y el CSS no es una excepción. De hecho, puedes utilizar propiedades CSS personalizadas dentro de theme.json. Esto puede mejorar la fase de diseño y ofrecer una mayor flexibilidad.

En esta guía, vamos a tratar de lleno las propiedades personalizadas CSS para explorar cómo funcionan junto con WordPress y theme.json. Pero antes de llegar a eso, resumamos theme.json, la edición completa del sitio (FSE) y cómo encaja CSS en este nuevo enfoque de diseño.

Cómo funciona theme.json con WordPress

El archivo theme.json apareció por primera vez en WordPress 5.8. Es una forma revolucionaria de diseñar temas de WordPress, utilizando sintaxis JSON para construir un archivo de configuración. WordPress lo lee y aplica los resultados sin necesidad de mucho PHP, CSS o JavaScript.

Una ventana del editor de código que muestra el contenido del archivo theme.json de un tema de WordPress. La estructura JSON define los ajustes del tema, incluidas las versiones del esquema, los patrones y los ajustes de color. En el fondo, se ve un paisaje con montañas, bosques y campos de cultivo en terrazas.
Un archivo theme.json dentro de un editor de código.

Los ajustes y estilos globales de FSE controlan varios aspectos visuales de tu tema. Pueden incluir las típicas paletas de colores y tipografía, pero también opciones de diseño y estilos individuales de bloques y elementos.

Aunque FSE es intuitivo, potente, adaptable y fácil de usar, theme.json puede ayudar a reducir la distancia entre las funciones del usuario final y del desarrollador. Casi todas las opciones que te ofrece theme.json son también visibles en el Editor de Sitios.

La interfaz del Editor de Sitios de WordPress, que muestra la página de inicio de un sitio web en la parte derecha de la pantalla, mientras que la barra lateral negra de la izquierda ofrece opciones de navegación, estilos, páginas, plantillas y patrones.
La interfaz principal del Editor de Sitios dentro de WordPress.

Utilizar theme.json ofrece muchas ventajas a la hora de crear temas para WordPress. Esto se debe a varias razones:

  • Tienes una ubicación central para la configuración del diseño de tu tema, lo que facilita su gestión y actualización.
  • Hay menos ofuscación entre la experiencia del front-end, el Editor de Sitios, y la base de código de un tema.
  • Utilizar theme.json ofrece compatibilidad con el futuro desarrollo y diseño de WordPress.
  • La funcionalidad integrada de WordPress significa que reduces la necesidad de que el usuario aplique CSS personalizado.

Veamos cómo se relaciona theme.json con los ajustes y estilos globales de FSE.

Introducción a los Ajustes Globales y Estilos de FSE

FSE representa una nueva era en el desarrollo de temas para WordPress, y la Configuración Global y los Estilos ocupan un lugar destacado. Esto permite a los usuarios personalizar casi todos los aspectos de la apariencia de un sitio a través de la funcionalidad del Editor de Sitios.

El Editor de Sitios de WordPress muestra los campos de entrada del panel Estilos en la barra lateral derecha. Te permite realizar ajustes en la configuración de la tipografía. La parte izquierda muestra una vista parcial de una página web con un tema azul.
El panel Estilos dentro del Editor de Sitios de WordPress.

Aquí puedes ajustar aspectos del diseño de tu tema con opciones que antes requerían CSS o un plugin constructor de páginas de terceros. Modificar los márgenes, el padding y los bordes son algunos ejemplos, pero hay muchos más.

El Editor de Sitios de WordPress, mostrando el panel de personalización Diseño. Te permite personalizar las dimensiones del contenido, el padding y el espaciado entre bloques. La parte izquierda de la pantalla muestra una vista parcial de una página web con un tema azul.
Trabajando con elementos CSS típicos como el padding y los márgenes dentro del Editor de Sitios.

Incluso puedes activar o desactivar muchas de estas funciones en theme.json (o en el propio archivo block.json de un bloque). Esto permite personalizar la interfaz de usuario junto con el diseño general del sitio.

Sin embargo, las opciones de las que dispones — aunque amplias — pueden no cubrir todas las necesidades. Esto es especialmente cierto si creas un tema desde cero. Las propiedades personalizadas CSS pueden ayudarte a resolver esta tarea.

Comprender las propiedades personalizadas CSS

En PHP, JavaScript y casi todos los lenguajes de programación, las variables guardan los valores de diversos elementos de tu código. Por ejemplo, puedes almacenar valores como nombres, fechas y números y utilizarlos en todo tu programa.

Las variables CSS3 — o propiedades personalizadas CSS, como las llamaremos a lo largo de este post — son compatibles con la mayoría de los navegadores actuales. Internet Explorer no las soporta, ni tampoco Opera Mini. Sin embargo, los más importantes sí las soportan.

Un gráfico de compatibilidad de las Variables CSS (Propiedades Personalizadas) en diferentes navegadores web. El gráfico muestra un elevado uso global del 97,05 por ciento e indica una amplia compatibilidad en los principales navegadores de escritorio y móviles.
El sitio web Can I Use muestra la compatibilidad actual con las propiedades personalizadas CSS.

Las propiedades personalizadas CSS te permiten almacenar valores para reutilizarlos en toda tu hoja de estilos. Es una potente forma de crear un CSS más dinámico y flexible. Puedes actualizar varias reglas de estilo cambiando un único valor.

El concepto de variables CSS no es totalmente nuevo. Preprocesadores como Sass utilizan una funcionalidad similar. Por ejemplo, toma el siguiente Sass:

$font-stack: Helvetica, sans-serif
$primary-color: #333

body
  font: 100% $font-stack
  color: $primary-color

Esto se procesa en el típico CSS:

body {
  font: 100% Helvetica, sans-serif;
  color: #333;
}

Sin embargo, las propiedades personalizadas CSS lo llevan directamente al navegador. Esto ofrece algunas ventajas:

  • Actualizaciones dinámicas. A diferencia de la mayoría de las variables de preprocesador, puedes actualizar las propiedades personalizadas CSS «sobre la marcha» utilizando JavaScript.
  • Comportamiento en cascada. Las propiedades personalizadas seguirán la cascada CSS, lo que te proporciona una mayor flexibilidad y un estilo más consciente del contexto.

Las propiedades personalizadas también serán más eficaces al reducir la redundancia de código. Hojas de estilo más pequeñas significan tiempos de carga más rápidos.

La sintaxis de las propiedades personalizadas CSS

Como ocurre con las variables típicas del preprocesador, la sintaxis de las propiedades personalizadas CSS es sencilla. Utiliza guiones dobles en lugar de signos de dólar para especificar una propiedad:

:root {
  --primary-color: #007bff;
}

A partir de ahí, utilizas la función var() para asignar esas propiedades a los elementos:

.button {
  background-color: var(--primary-color);
}

Ten en cuenta que también puedes asignar propiedades personalizadas utilizando la propiedad @. Sin embargo, como comprenderás en breve, WordPress simplifica todo este proceso.

Dónde puedes utilizar las propiedades personalizadas CSS

La versatilidad está a la orden del día cuando se trata de propiedades personalizadas CSS. Con WordPress y theme.json tienes varias formas de utilizarlas:

  • Preconfiguraciones: Puedes definir preajustes de color, fuente e interlineado.
  • Estilos de bloque: Los bloques individuales pueden utilizar propiedades personalizadas para conseguir un estilo coherente.
  • Estilos globales: Las propiedades personalizadas tienen un valor incalculable para el diseño de todo el sitio.

Puedes crear propiedades completamente personalizadas para cualquier propósito que desees. Veamos un ejemplo práctico de cómo puedes utilizar propiedades personalizadas en tu archivo theme.json:

{
  "settings": {
    "color": {
      "palette": [
        {
          "slug": "primary",
          "color": "#007bff",
          "name": "Primary"
        }
      ]
    },
    "custom": {
      "line-height": {
        "body": 1.5,
        "heading": 1.2
      }
    }
  },
  "styles": {
    "typography": {
      "lineHeight": "var(--wp--custom--line-height--body)"
    },
    "blocks": {
      "core/heading": {
        "typography": {
          "lineHeight": "var(--wp--custom--line-height--heading)"
        }
      }
    }
  }
}

Aquí, definimos un color preestablecido y utilizamos la propiedad custom para definir valores line-height para los encabezados y el cuerpo de las páginas. WordPress generará propiedades CSS para los elementos que definas utilizando custom. Más adelante, podemos asignar estas propiedades personalizadas a varios estilos, configuraciones, bloques y más.

Las ventajas de utilizar propiedades CSS personalizadas

Puede que ya tengas ideas sobre cómo las propiedades personalizadas CSS pueden ayudarte a la hora de desarrollar temas. Aun así, hay muchas ventajas que debes tener en cuenta.

Ya hemos hablado de modularidad y reutilización. Todos los valores comunes que definas como propiedades personalizadas promoverán la coherencia y reducirán la redundancia. Esa redundancia se traducirá en un mejor rendimiento potencial para tu tema.

Para el usuario final, las propiedades personalizadas ofrecen varias ventajas:

  • Personalización simplificada. Los usuarios y propietarios de sitios pueden personalizar un tema sin necesidad de tener conocimientos complejos de CSS. Una vez que expones las variables a través de theme.json, los usuarios pueden acceder a la configuración a través del Editor de Sitios.
  • Mejor compatibilidad con FSE. Las propiedades personalizadas se alinean con los principios de FSE, permitiéndote crear diseños de temas más flexibles y dinámicos.
  • Mantenimiento y actualizaciones más fáciles. Si necesitas actualizar valores comunes en todo tu tema, una propiedad personalizada significa cambiarlo en un solo lugar. Agiliza tu mantenimiento y hace que las actualizaciones y retoques sean más manejables.

En general, las propiedades personalizadas pueden mejorar tu flujo de trabajo de desarrollo de temas. Determinarlas también es más sencillo que utilizar las típicas variables CSS.

Cómo definir propiedades CSS personalizadas en theme.json

Entremos en los aspectos prácticos de la definición y el uso de propiedades CSS personalizadas en theme.json. El primer paso es aprender a escribirlas.

Sintaxis y convenciones de nomenclatura

WordPress ofrece la propiedad custom para ayudar con las definiciones. Es algo más fácil de usar que la propiedad @ o las definiciones dentro de pseudoclases, y utiliza el formato estándar clave/valor:

{
  "settings": {
    "custom": {
      "property-name": "value"
    }
  }
}

En segundo plano, WordPress procesará esta definición y generará una propiedad personalizada CSS utilizando guiones dobles:

--wp--custom--<custom-element>

--wp--custom-- siempre formará parte de tu propiedad CSS, y no utilizará mayúsculas y minúsculas. Por ejemplo, si defines lineHeight como propiedad personalizada, WordPress la convertirá en «kebab case:»

--wp--custom--line-height

En lo que respecta a las convenciones de nomenclatura, puedes utilizar camel case si lo deseas, aunque te aconsejamos utilizar kebab case para los nombres de tus propiedades personalizadas. Esto es coherente con las convenciones de nomenclatura de WordPress, mejora la legibilidad y reduce los errores de procesamiento.

Nota: Las propiedades personalizadas CSS utilizan guiones dobles porque el Grupo de Trabajo CSS del W3C también quiere afomentar el uso de Sass (que utiliza signos de dólar para definir las propiedades). De este modo, tienes la opción de utilizar ambos para mejorar tus diseños.

WordPress ya define algunas propiedades personalizadas, o al menos, los temas tienen la opción de hacerlo. Esto significa que verás variables CSS dentro de theme.json sin una declaración explícita:

{
  "settings": {
    "color": {
      "palette": [
        {
          "slug": "primary",
          "color": "var(--wp--preset--color--primary)",
          "name": "Primary"
        }
      ]
    },
    "custom": {
      "spacing": {
        "small": "1rem",
        "medium": "2rem",
        "large": "3rem"
      }
    }
  },
  "styles": {
    "spacing": {
      "blockGap": "var(--wp--custom--spacing--medium)"
    }
  }
}

En este ejemplo, definimos un color primario utilizando un color preestablecido existente. A continuación, definimos algunas propiedades de espaciado personalizadas y las establecemos utilizando var().

Esto significa que no necesitamos codificar valores en theme.json. Es más, los usuarios pueden actualizar estos valores dentro del Editor de Sitios y hacer que se propaguen por todo el tema.

Preconfiguraciones vs a propiedades personalizadas

Por supuesto, theme.json también te permite definir preajustes para colores, tamaños de fuente y otros elementos comunes del tema. Por otro lado, puedes utilizar propiedades personalizadas para cualquier valor que quieras reutilizar en todo el tema.

La mayor diferencia está en las convenciones de nomenclatura y la accesibilidad. Los usuarios no podrán acceder a las propiedades personalizadas en el Editor de Sitios sin un trabajo adicional por tu parte. Con los preajustes, WordPress generará CSS con un aspecto similar a cómo procesa las propiedades personalizadas:

{
  "settings": {
    "color": {
      "palette": [
        {
          "slug": "primary",
          "color": "#007bff",
          "name": "Primary"
        }
      ]
    },
    "custom": {
      "fontFamily": {
        "base": "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif",
        "headings": "'Helvetica Neue', Helvetica, Arial, sans-serif"
      }
    }
  }
}

Una vez que WordPress procese esto, podrás ver las diferencias inherentes:

--wp--preset--primary: #007bff;
--wp--custom--font-family--base: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif";
--wp--custom--font-family--headings: "'Helvetica Neue', Helvetica, Arial, sans-serif";

Observa que el anidamiento posterior de propiedades utilizará guiones dobles, incluso después de convertir camel case a kebab case.

CSS global y específico de Bloque versus propiedades personalizadas CSS

Con el WordPress clásico, utilizarías CSS adicional y personalizado en el front end para diseñar elementos dentro de tu tema. Este sigue siendo el caso con theme.json y FSE, aunque el enfoque es diferente al de las propiedades personalizadas CSS.

Si visitas el Editor de Sitios y te diriges a la pantalla Estilos, verás la sección CSS Adicional. Actúa de forma muy parecida al panel CSS personalizado de las instalaciones clásicas de WordPress:

Una vista parcial del Editor de Sitios de WordPress que muestra enlaces a los ajustes de Bloques y CSS Adicional. La parte izquierda de la pantalla muestra una vista parcial de un edificio sobre un cielo azul.
La sección CSS adicional dentro del Editor de Sitios de WordPress.

Esto representa una forma de añadir personalización CSS global a un tema. Sin embargo, en realidad es una forma de dar a los usuarios la posibilidad de añadir CSS. También puedes utilizarlo para realizar pequeños cambios sin importancia que no justifiquen una hoja de estilos completa.

Dentro de theme.json, utilizas la propiedad css para definir cualquier CSS adicional que quieras añadir:

{
  "version": 3,
    "styles": {
      "css": "margin: 0"
    }
}

Ten en cuenta que no necesitas usar punto y coma para terminar las declaraciones CSS. También puedes definir CSS personalizado para los Bloques:

{
  "version": 2,
  "styles": {
    "blocks": {
      "core/post-title": {
        "css": "letter-spacing: 1px;"
      }
    }
  }
}

Cada vez que establezcas CSS de este tipo en theme.json, lo verás en cualquier campo CSS adicional del Editor de Sitios. Sin embargo, recuerda que nada de lo que declares utilizando css es una propiedad CSS personalizada.

Uso del selector ampersand (&)

Al igual que Sass, WordPress también soporta el selector ampersand, con algunas diferencias. En este caso, es una excelente forma de apuntar a elementos y propiedades anidados. Esto podría ser relevante si decides declarar propiedades CSS personalizadas para Bloques individuales.

Por ejemplo, piensa en lo siguiente:

…
"styles": {
  "blocks": {
    "core/table": {
      "css": "color:#333 & th{ background:#f5f5f5; }"
    }
…

Esto define un color de texto y un color de fondo para el elemento de cabecera de la tabla. Una vez que WordPress lo procesa, obtienes un CSS limpio y sencillo:

.wp-block-table > table {
  color: #333;
}

.wp-block-table > table th {
  background: #f5f5f5;
}

Los selectores ampersand son excelentes si deseas ampliar el CSS al que te diriges. Una forma comprensible de pensar en el selector es que ayuda a separar tus elementos CSS. Por ejemplo, lo siguiente:

{
  "version": 3,
  "styles": {
    "blocks": {
      "core/avatar": {
        "css": "& img {border-radius: 999px}"
      }
    }
  }
}

Esto añade un radio de borde a un avatar y genera el CSS como cabría esperar:

.wp-block-image img {
  border-radius: 999px;
}

Sin embargo, sin el ampersand, WordPress uniría tus declaraciones:

…
​​.wp-block-imageimg
…

Utilizar el selector ampersand para tus propiedades personalizadas CSS será algo que hagas de forma habitual.

El papel de Kinsta en el soporte al desarrollo moderno de WordPress

Tu elección de alojamiento es tan importante como cualquier lenguaje de programación, preprocesador u otro elemento técnico. Sin un proveedor de alojamiento de calidad a tu lado, no podrás beneficiarte del rendimiento y el conjunto de herramientas de theme.json o FSE.

Kinsta puede ser el centro de todo tu flujo de trabajo, gracias a nuestras herramientas de desarrollo. Puedes empezar con DevKinsta, nuestro entorno de desarrollo local que utiliza contenedores Docker para aislar tu instalación de WordPress:

La interfaz de DevKinsta muestra los ajustes de configuración de la base de datos y de WordPress. Muestra detalles de la conexión, como el host, el puerto, el nombre de la base de datos y la versión de WordPress. La interfaz también muestra opciones para activar la depuración y las actualizaciones automáticas de WordPress.
La interfaz principal de DevKinsta.

Una funcionalidad útil es la capacidad de DevKinsta para enviar y recibir datos entre tu máquina local y tus entornos staging de Kinsta:

Una vista parcial de la interfaz de DevKinsta que muestra la información del sitio y las opciones de control. La interfaz muestra botones para abrir el sitio, sincronizar, acceder al gestor de base de datos y al admin de WordPress. Un menú desplegable muestra opciones para enviar o recibir información de Kinsta. El tipo de sitio aparece como WordPress, con información visible aunque parcial sobre el host.
Las opciones para enviar o recibir datos de Kinsta dentro de DevKinsta.

Esto te permite probar tus temas en un entorno similar al de producción antes de empezar a distribuirlos. Cuando trabajes con propiedades CSS personalizadas, puedes asegurarte de que funcionan en diferentes contextos. La API de Kinsta puede ser compatible con tu pipeline CI/CD cuando estés listo para ponerte en marcha.

Otros aspectos de la arquitectura de Kinsta te ayudarán en toda tu configuración de desarrollo. Por ejemplo, Kinsta es compatible con Git, lo que facilita el control de versiones de los archivos de tu tema, incluyendo theme.json. Para iterar propiedades personalizadas, o simplemente experimentar con diferentes configuraciones, deberás saber que tienes una opción de retroceso.

Por último, si decides utilizar tu tema en un servidor Kinsta, nuestro Edge Caching aumenta el rendimiento de theme.json hasta en un 80 por ciento. Tener un sitio web que funcione rápido, independientemente del navegador del usuario, garantizará que esas personalizaciones se muestren rápidamente.

Resumen

Al igual que theme.json es un potente archivo de configuración para crear temas de WordPress flexibles y mantenibles, las propiedades personalizadas CSS son cruciales para el flujo de trabajo. Así es como construirás y declararás CSS para elementos a los que el Editor de Sitios no llega. También será clave si construyes tus propios Bloques o simplemente quieres desarrollar temas de WordPress únicos con la máxima profundidad de personalización. Es más, también tienes la opción de compartir ese CSS con los usuarios a través del Editor de Sitios.

¿Las propiedades CSS personalizadas formarán parte de tu flujo de trabajo de desarrollo de temas? Si es así, ¿cómo las utilizarás? Comparte tu opinión en la sección de comentarios más abajo

Jeremy Holcombe Kinsta

Editor de Contenidos y Marketing en Kinsta, Desarrollador Web de WordPress y Redactor de Contenidos. Aparte de todo lo relacionado con WordPress, me gusta la playa, el golf y el cine. También tengo problemas con la gente alta ;).