vendredi 25 septembre 2026

À propos

Contact

FSE

Styles d’éléments dans les styles globaux : liens, boutons, titres et légendes

La clé elements de theme.json permet de styliser globalement les liens, boutons et titres, avec leurs états au survol. Comment elle s'articule avec les styles propres à chaque bloc.

Par Clément Hadrot • 23 décembre 2022 • 4 min de lecture • Aucun commentaire
Styles d'éléments dans les styles globaux : liens, boutons, titres et légendes

Un designer nous a récemment demandé pourquoi tous les liens d’un article changeaient de couleur au survol sur un projet, alors qu’aucun bloc ne semblait déclarer ce comportement. La réponse se trouvait dans une partie de theme.json encore mal connue : la clé elements, qui permet de styliser des rôles transversaux plutôt que des blocs précis.

Contrairement à un style de bloc, qui s’applique à une instance particulière de core/paragraph ou core/button, un style d’élément s’applique à tout ce qui joue ce rôle dans le site, y compris à l’intérieur du contenu généré par the_content() côté classique ou par le bloc Contenu côté éditeur de site.

Les rôles pris en charge

La clé elements de theme.json reconnaît aujourd’hui quatre rôles principaux : link pour les liens, button pour les boutons, heading pour l’ensemble des titres, et caption pour les légendes d’image ou de bloc Galerie.

{
  "styles": {
    "elements": {
      "link": {
        "color": { "text": "var:preset|color|accent" }
      },
      "button": {
        "border": { "radius": "4px" }
      }
    }
  }
}

Gérer les états :hover et :focus

L'essentiel à retenir : elements cible des rôles transversaux plutôt que des blocs précis ; Les états :hover et :focus se déclarent séparément ; Un style de bloc spécifique reste toujours prioritaire

Depuis les versions récentes, il devient possible de déclarer un style spécifique pour l’état survolé ou focalisé d’un lien, directement dans theme.json, sans écrire une seule ligne de CSS personnalisé :

{
  "styles": {
    "elements": {
      "link": {
        "color": { "text": "var:preset|color|accent" },
        ":hover": {
          "color": { "text": "var:preset|color|accent-fonce" }
        }
      }
    }
  }
}

Cette approche évite de dupliquer des règles CSS dans une feuille de style additionnelle, tout en gardant les couleurs cohérentes avec les presets déclarés ailleurs dans le fichier.

Ordre de priorité face aux styles de blocs

Un point qui prête régulièrement à confusion : un style défini au niveau d’un bloc précis prime toujours sur un style d’élément global. Si un bouton particulier reçoit une couleur de bordure définie individuellement depuis l’éditeur, cette valeur locale l’emporte sur la règle générale déclarée dans elements.button. La hiérarchie suit un principe simple :

  • Style appliqué directement à un bloc depuis l’éditeur (le plus spécifique).
  • Style de bloc défini dans theme.json sous styles.blocks.
  • Style d’élément global défini sous styles.elements (le plus général).

Titres : un rôle, plusieurs niveaux

Le rôle heading mérite une attention particulière : il permet de définir un style commun à tous les niveaux de titre (h1 à h6), mais aussi, en le complétant, des styles propres à chaque niveau via une clé numérotée. Cela permet de garder une cohérence globale tout en affinant l’apparence d’un h2 par rapport à un h3, sans écrire de sélecteur CSS explicite.

Un cas vécu : le lien qui refusait de changer de couleur

Sur un projet récent, un lien à l’intérieur d’un bloc Groupe personnalisé refusait obstinément de prendre la couleur définie dans elements.link, malgré plusieurs vérifications du fichier theme.json. La cause s’est révélée plus simple que prévu : un style de couleur avait été appliqué directement au bloc Paragraphe contenant le lien, depuis le panneau latéral de l’éditeur, ce qui prenait le pas sur la règle globale selon l’ordre de priorité décrit plus haut. Retirer ce style local a suffi à faire réapparaître la couleur attendue.

En résumé

La clé elements comble un vide que theme.json laissait ouvert à ses débuts : styliser un comportement transversal sans devoir cibler chaque bloc individuellement. Comprendre son ordre de priorité face aux styles de blocs évite bien des sessions de débogage où l’on cherche, en vain, pourquoi une couleur définie globalement ne s’applique pas à un bouton en particulier.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi