Developing CSS custom properties with theme.json in WP


WordPress theme developers can use a theme.json file to streamline a process that used to rely largely on PHP. However, you can still use your HTML, JavaScript, and PHP skills to build your themes — and CSS is no exception. In fact, you use CSS custom properties within theme.json. This can enhance the design stage and offer greater flexibility.

In this guide, we tackle CSS custom properties head-on to explore how they work alongside WordPress and theme.json. But before we get there, let’s summarize theme.json, full site editing (FSE), and how CSS fits into this new design approach.

How theme.json works with WordPress

The theme.json file first appeared in WordPress 5.8. It’s a revolutionary way to design WordPress themes, using JSON syntax to build a configuration file. WordPress reads this and applies the results without the need for much PHP, CSS, or JavaScript.

A code editor window showing the contents of a theme.json file for a WordPress theme. The JSON structure defines theme settings, including schema versions, patterns, and color settings. In the background, a scenic landscape with mountains, forests, and terraced fields is visible.
A theme.json file within a code editor.

The global settings and styles within FSE control various visual aspects of your theme. These can include typical color palettes and typography, but they can also include layout options and individual Block and element styles.

While FSE is intuitive, powerful, adaptable, and easy to use, theme.json can help bridge the gap between the end user and developer roles. Almost every option theme.json gives you is also visible within the Site Editor.

The WordPress Site Editor interface, showing the home page of a website on the right-hand side of the screen, while the black, left-hand sidebar gives options for navigation, styles, pages, templates, and patterns.
The main Site Editor interface within WordPress.

Using theme.json offers many advantages when building WordPress themes. There are a few reasons for this:

  • You have a central location for your theme’s design configuration, which makes it easier to manage and update.
  • There’s less obfuscation between the front-end experience, Site Editor, and a theme’s codebase.
  • Using theme.json offers compatibility with the future of WordPress development and design.
  • The built-in functionality of WordPress means you reduce the need for the user to apply custom CSS.

Let’s take a look at how theme.json relates to FSE’s global settings and styles.

A primer on FSE’s Global Settings and Styles

FSE represents a new era of WordPress theme development, and Global Settings and Styles are at the forefront. This allows users to customize almost every aspect of a site’s appearance through the Site Editor functionality.

The WordPress Site Editor showing the Styles panel's input fields in the right-hand sidebar. It lets you make adjustments to typography settings. The left-hand side shows a partial view of a blue-themed webpage.
The Styles panel within the WordPress Site Editor.

Here, you can adjust aspects of your theme’s layout with options that used to require CSS or a third-party page builder plugin. Modifying margins, padding, and borders are examples, but there are plenty more.

The WordPress Site Editor, showing the Layout customization panel. It lets you customize content dimensions, padding, and block spacing. The left-hand side of the screen shows a partial view of a blue-themed webpage.
Working with typical CSS elements like padding and margins within the Site Editor.

You can even enable or disable much of this functionality within theme.json (or a Block’s own block.json file). This supports UI customization alongside the overall site design.

However, the options at your disposal — while extensive — might not cover every need. This will be especially true if you build a theme from scratch. This is one job CSS custom properties can help solve.



Read more

Posted in Wordpress