Maison > interface Web > tutoriel CSS > Gérer les styles CSS dans un thème de bloc WordPress

Gérer les styles CSS dans un thème de bloc WordPress

Christopher Nolan
Libérer: 2025-03-10 10:01:09
original
138 Les gens l'ont consulté

Managing CSS Styles in a WordPress Block Theme

comment CSS est écrit dans les thèmes WordPress change de façon spectaculaire. J'ai récemment partagé une technologie qui ajoute un support de police fluide dans WordPress via theme.json, un nouveau document qui est fortement promu par WordPress qui deviendra la source centrale de vérité pour définir les styles de thème WordPress qui prennent en charge la fonctionnalité d'édition de site-whole (FSE).

attendez, non style.css fichier? Nous l'avons toujours. En fait, style.css est toujours un fichier nécessaire dans un thème de bloc, bien qu'il ait un effet très réduit et n'est utilisé que pour enregistrer des méta-informations pour le sujet. Autrement dit, theme.json est toujours en cours de développement actif, ce qui signifie que nous sommes dans une période de transition où vous pouvez trouver des styles définis à theme.json, styles.css et même aux niveaux de blocs.

Alors, à quoi ressemblent les styles dans ces époques WordPress FSE? C'est ce que je veux présenter dans cet article. Le manuel du développeur de thème WordPress manque de documentation sur les styles de thème de bloc, donc tout ce que nous avons couvert ici est des informations que j'ai collectées sur la situation actuelle et les discussions futures sur les thèmes WordPress.

Évolution du style WordPress

Les nouvelles fonctionnalités de développement incluses dans WordPress 6.1 nous rapprochent d'un système qui définit les styles entièrement dans theme.json, mais il y a encore beaucoup de travail à faire avant de pouvoir compter complètement. Nous pouvons apprendre ce qui apparaîtra dans les futures versions en utilisant le plugin Gutenberg, où les caractéristiques expérimentales sont généralement testées.

Nous pouvons également en savoir plus sur notre statut actuel en examinant l'évolution du thème WordPress par défaut. Jusqu'à présent, il y a trois thèmes par défaut qui prennent en charge l'édition à l'échelle du site:

  • Vingt-et-un (TT1): Il s'agit de la première version de thème par défaut classique qui est compatible avec les blocs. Il existe également une version de bloc (bloc TT1) et a été une ressource fiable pour les thèmes de blocs depuis lors. Cependant, les 5900 lignes de CSS dans TT1 sont en style.css. NON theme.json Fichier. Le bloc TT1 est la première fois que nous voyons des styles dans l'ère Block Editor, que nous pouvons considérer comme une bande-annonce plutôt que comme un modèle.
  • vingt-deux-deux (TT2): Il s'agit du premier thème WordPress par défaut véritablement basé sur des blocs et la première fois que nous avons rencontré theme.json. Ce fichier ne contient que 373 lignes de code. Ses principaux développeurs ont fait des efforts coordonnés pour en faire un thème sans CSS; style.css theme.json
  • Vingt-trois (TT3):
  • Ceci est publié dans WordPress 6.1 et c'est le premier exemple de thème sans aucun CSS dans le fichier obligatoire . style.css
  • Cependant, ne remplacez pas immédiatement le CSS dans
par la paire de valeurs d'attribut JSON dans

. Avant d'envisager de le faire, il y a encore des règles de style CSS à prendre en charge dans style.css. Les questions importantes restantes sont actuellement en cours de discussion, l'objectif est de déplacer complètement toutes les règles de style CSS dans theme.json et de fusionner différentes sources de theme.json dans une seule interface utilisateur pour configurer les styles globaux directement dans l'éditeur de site WordPress. theme.json theme.json Cela nous met dans une situation relativement difficile. Non seulement il n'y a pas de chemin clair pour remplacer les styles de thème, mais on ne sait pas non plus de quoi sont les styles - sont-ils de différentes couches de fichiers

,

, du plugin Gutenberg ou ailleurs? theme.json style.css Pourquoi choisir le thème.json au lieu de style.css?

Vous vous demandez peut-être pourquoi WordPress se tourne vers des définitions de style basées sur JSON au lieu des fichiers CSS traditionnels. Ben Dwyer de l'équipe de développement de Gutenberg explique avec éloquence pourquoi la méthode

est un avantage pour les développeurs de sujets.

theme.json vaut la peine de lire le post de Ben, mais le point est dans cette citation:

Qu'il s'agisse de mise en page, de préréglage ou de style de bloc, l'écrasement du CSS peut poser une barrière à l'intégration et à l'interopérabilité: la cohérence visuelle entre le front-end et l'éditeur devient plus difficile à maintenir et la mise à niveau dans le bloc peut entrer en conflit avec la remplacement. De plus, CSS personnalisé est moins portable dans d'autres thèmes de bloc.

La hiérarchie des styles définis "Basics" peut être correctement résolu en encourageant les auteurs de sujets à utiliser l'API

autant que possible.

L'un des principaux avantages du déplacement de CSS vers JSON est que JSON est un format lisible par machine, ce qui signifie qu'il peut être exposé dans l'interface utilisateur du site WordPress en obtenant l'API, permettant aux utilisateurs de modifier les valeurs par défaut et de personnaliser l'apparence du site sans écrire de CSS. Il fournit également un moyen de styliser les blocs de manière cohérente, tout en fournissant une structure qui crée une couche spécifique afin que les paramètres utilisateur aient une priorité plus élevée que les paramètres définis dans theme.json. Cette interaction entre les styles au niveau du thème dans theme.json et les styles définis par l'utilisateur dans l'interface utilisateur de style global rend la méthode JSON si attrayante.

Les développeurs maintiennent la cohérence dans JSON et les utilisateurs acquièrent la flexibilité grâce à la personnalisation sans code. Il s'agit d'une situation gagnant-gagnant.

Bien sûr, il y a d'autres avantages, et Mike McAlister de WP Engine en répertorie plusieurs dans ce fil Twitter. Vous pouvez trouver plus d'avantages dans la discussion approfondie sur le blog Make WordPress Core. Après avoir lu, comparez les avantages de la méthode JSON avec les méthodes disponibles qui définissent et écrasent les styles dans des sujets classiques.

Définir les styles en utilisant des éléments JSON

Nous avons vu beaucoup de progrès en termes de parties du thème. Avant WordPress 6.1, tout ce que nous pouvions vraiment faire était de style le titre et le lien. Maintenant, avec WordPress 6.1, nous pouvons ajouter des boutons, des titres, des citations et des titres. theme.json

Nous le faisons en définissant l'élément

json . Un élément peut être traité comme un seul composant qui existe dans un bloc WordPress. Supposons que nous ayons un bloc avec le titre, le paragraphe et les boutons. Ces parties individuelles sont des éléments, et il y a un objet dans lequel nous définissons leur style: theme.json elements

Une meilleure façon de décrire les éléments JSON est d'être des composants de bas niveau des sujets et des blocs, qui ne nécessitent pas de complexité de blocs. Ce sont des représentations de primitives HTML qui ne sont pas définies dans les blocs mais peuvent être utilisées entre les blocs. Comment ils sont pris en charge dans WordPress (et le plug-in Gutenberg) est décrit dans le manuel de l'éditeur de blocs et dans ce tutoriel d'édition à l'échelle du site de Carolina Nymark.
<code>{
  "version": 2,
  "settings": {},
  // etc.
  "styles": {
    // etc.
    "elements": {
        "button": { ... },
        "h1": { ... },
        "heading": { ... },
    },
  },
  "templateParts": {}
}</code>
Copier après la connexion
Copier après la connexion

Par exemple, les styles de liaison dans l'objet

, mais n'est pas un bloc lui-même. Mais le lien peut être utilisé dans un bloc, il héritera du style défini dans l'objet

de elements. Mais cela ne résume pas complètement la définition des éléments, car certains éléments sont également enregistrés en blocs, tels que les blocs de titre et de bouton - mais ces blocs peuvent toujours être utilisés dans d'autres blocs. theme.json elements.link Ce qui suit est le tableau des éléments fournis par Carolina qui peuvent être utilisés pour styliser dans

avant WordPress 6.1:

theme.json Comme vous pouvez le voir, c'est encore à ses débuts et il y a encore beaucoup de choses à passer du plugin Gutenberg au noyau WordPress. Mais vous pouvez voir à quelle vitesse il serait de définir à l'échelle mondiale tous les titres du thème sans rechercher des sélecteurs dans des fichiers CSS ou Devtools.

De plus, vous pouvez commencer à comprendre comment la structure de theme.json forme une couche spécifique, des éléments mondiaux (tels que des titres) aux éléments individuels (tels que H1), et des styles au niveau du bloc (comme H1 inclus dans un bloc).

Pour plus d'informations sur les éléments JSON, consultez cette proposition WordPress et ce billet ouvert dans le référentiel Github Github Gutenberg.

JSON et CSS Spécificité

Continuons à discuter de la spécificité CSS. Comme je l'ai mentionné plus tôt, la méthode de style de JSON crée une hiérarchie. C'est vrai. Les styles définis sur les éléments JSON dans theme.json sont considérés comme le style de thème par défaut. Tout ce qui est défini par l'utilisateur dans l'interface utilisateur de style global remplacera la valeur par défaut.

En d'autres termes: Les styles utilisateur ont une spécificité plus élevée que les styles de thème par défaut. Jetons un coup d'œil au bloc de bouton pour comprendre comment cela fonctionne.

J'utilise videTheme, qui est un thème WordPress vierge sans style CSS. J'ajouterai un bloc de bouton à la nouvelle page.

OK, nous savons que WordPress Core est livré avec des styles simples. Maintenant, je vais passer au thème TT3 par défaut dans WordPress 6.1 et l'activer. Si je rafraîchis la page avec le bouton, le style du bouton change.

Vous pouvez voir exactement d'où viennent ces nouveaux styles dans le fichier

de TT3. Cela nous dit que les styles d'éléments JSON ont priorité sur les styles de base WordPress. theme.json

Maintenant, je vais modifier TT3 en l'écrassant dans le thème de l'enfant, où la couleur d'arrière-plan par défaut du bloc de bouton est définie sur rouge.

Mais veuillez noter le bouton de recherche dans la dernière capture d'écran. Ça devrait être rouge aussi, non? Cela signifie que si les modifications que j'ai apportées sont au niveau mondial, elle doit être stylée à un autre niveau. Si nous voulons modifier les boutons

deux , nous pouvons apporter des modifications au niveau de l'utilisateur à l'aide de l'interface utilisateur de style global dans l'éditeur de site.

Nous avons utilisé l'interface utilisateur de style global pour modifier la couleur d'arrière-plan des deux boutons en bleu et modifié le texte. Notez que le bleu a priorité sur le style de thème!

Moteur de style

C'est une idée très rapide mais bonne sur la façon de gérer la spécificité CSS dans les thèmes de blocs WordPress. Mais ce n'est pas l'image complète, car il n'est pas clair où ces styles sont générés. WordPress a ses propres styles par défaut qui proviennent de quelque part, utilisez les données dans

pour obtenir plus de règles de style et écraser ces règles avec tout ce qui est défini dans le style global. ces styles sont-ils inventés? Sont-ils dans des feuilles de style séparées? Peut-être qu'ils ont été injectés sur la page? theme.json

C'est le problème que le nouveau moteur de style devrait résoudre. Le moteur de style est une nouvelle API dans WordPress 6.1, visant à garder les styles générés et l'emplacement d'application des styles cohérents. En d'autres termes, il prend toutes les sources de style possibles et est individuellement responsable de la génération de styles de blocs corrects. Je sais, je sais. Juste pour écrire des styles, une couche d'abstraction a été ajoutée au-dessus d'autres couches d'abstraction. Cependant, avoir une API de style centralisé est probablement la solution la plus élégante, étant donné que les styles peuvent provenir de plusieurs endroits.

Nous ne voyons le moteur de style que pour la première fois. En fait, selon le billet, les travaux suivants ont été effectués jusqu'à présent:

  • Audit et fusion Le backend génère des blocs qui prennent en charge les emplacements de code CSS afin qu'ils soient livrés à partir du même emplacement (plutôt que plusieurs emplacements). Cela comprend les règles CSS telles que les marges, les remplissages, la typographie, les couleurs et les frontières.
  • Supprimez les styles spécifiques à la disposition en double et générez des noms de classe sémantique.
  • Réduisez le nombre de balises de style en ligne qui prennent en charge l'impression aux pages aux blocs, aux dispositions et aux éléments.

Fondamentalement, c'est la base de la construction d'une seule API qui contient toutes les règles de style CSS pour le sujet, peu importe d'où elles viennent. Il nettoie la façon dont WordPress injecte des styles en ligne avant 6.1 et construit un système pour les noms de classe sémantique.

Pour plus de détails sur les objectifs à long terme et à court terme des moteurs de style, consultez cela faire de la discussion de base WordPress. Vous pouvez également suivre les problèmes de suivi et les panneaux de projet pour plus de mises à jour.

en utilisant des éléments JSON

Nous avons discuté des primitives HTML dans les éléments theme.json JSON dans le fichier et comment ils définissent essentiellement le style de contenu par défaut tel que les titres, les boutons et les liens. Voyons maintenant comment l'élément réel utilise JSON et comment il se comporte dans divers contextes de style.

Les éléments JSON ont généralement deux contextes: Niveau global et Niveau de bloc . La définition des styles de niveau global est inférieure au niveau du bloc pour garantir que les styles spécifiques au bloc sont préférés afin que la cohérence soit maintenue partout où le bloc est utilisé.

Style global de l'élément JSON

Jetons un coup d'œil au nouveau thème TT3 par défaut et vérifions le style de ses boutons. Voici une courte casser de copie du fichier TT3 theme.json (il s'agit du code complet), montrant la section Global Style, mais vous pouvez trouver le code d'origine ici.

Afficher le code `` { "Version": 2, "paramètres": {}, // ... "Styles": { // ... "Éléments": { "bouton": { "frontière": { "rayon": "0" }, "couleur": { "Background": "var (- wp - présentation-color-primary)", "Texte": "var (- wp - présentation-color - contraste)" }, ": Hover": { "couleur": { "Background": "var (- wp - tracet-color - contrast)", "Texte": "var (- wp - tracet-color --base)" } }, ":se concentrer": { "couleur": { "Background": "var (- wp - tracet-color - contrast)", "Texte": "var (- wp - tracet-color --base)" } }, ":actif": { "couleur": { "Background": "var (- wp - présentation-color-secondary)", "Texte": "var (- wp - tracet-color --base)" } } }, "H1": { "Typographie": {} }, // ... "En-tête": { "Typographie": { "Fontweight": "400", "Lineheight": "1.4" } }, "lien": { "couleur": { "Texte": "var (- wp - présentation-color - contraste)" }, ": Hover": { "Typographie": { "TextDecoration": "Aucun" } }, ":se concentrer": { "Typographie": { "TextDecoration": "soulignement en pointillé" } }, ":actif": { "couleur": { "Texte": "var (- wp - preset-color-secondary)" }, "Typographie": { "TextDecoration": "Aucun" } }, "Typographie": { "TextDecoration": "souligner" } } }, // ... }, "templateparts": {} }

<code>{
  "version": 2,
  "settings": {},
  // etc.
  "styles": {
    // etc.
    "elements": {
        "button": { ... },
        "h1": { ... },
        "heading": { ... },
    },
  },
  "templateParts": {}
}</code>
Copier après la connexion
Copier après la connexion

{ "Version": 2, // ... "Styles": { // Style de niveau mondial "éléments": {}, // Style de niveau de bloc "blocs": { "Core / Search": { "Éléments": { "bouton": { "couleur": { "Background": "var (- wp - présent-couleur - Quaternel)", "Texte": "var (- wp - tracet-color --base)" } } }, // ... } } } }

<code>
所有按钮都在全局级别(`styles.elements.button`)设置样式。

我们也可以在DevTools中确认这一点。请注意,名为`.wp-element-button`的类是选择器。相同的类也用于设置交互式状态。

同样,所有这些样式都在全局级别发生,来自`theme.json`。每当我们使用按钮时,它都将具有相同的背景,因为它们共享相同的选择器,并且没有其他样式规则覆盖它。

顺便说一句,WordPress 6.1添加了对使用`theme.json`中的伪类(包括`:hover`、`:focus`和`:active`)或全局样式UI设置某些元素(如按钮和链接)的交互式状态样式的支持。Automattic工程师Dave Smith在一个YouTube视频中演示了此功能。

我们可以在`theme.json`中(最好在子主题中,因为我们使用的是默认WordPress主题)或在站点编辑器中的全局样式设置中覆盖按钮的背景颜色(不需要子主题,因为它不需要代码更改)。

但是,按钮将同时更改。如果我们想在按钮是特定块的一部分时覆盖背景颜色怎么办?这就是块级样式发挥作用的地方。

#### 元素的块级样式

为了了解如何在块级别使用和自定义样式,让我们更改包含在搜索块中的按钮的背景颜色。请记住,有一个按钮块,但我们正在做的是在搜索块的块级别覆盖背景颜色。这样,我们只在那里应用新颜色,而不是将其全局应用于所有按钮。

为此,我们在`theme.json`的`styles.blocks`对象上定义样式。没错,如果我们在`styles.elements`上定义所有按钮的全局样式,我们可以在`styles.block`上定义按钮元素的块特定样式,这遵循类似的结构:
</code>
Copier après la connexion

{ "Version": 2, "Styles": { // Style de niveau mondial "éléments": {}, // Style de niveau de bloc "blocs": {} } }

<code>
看到了吗?我在`styles.blocks.core/search.elements.button`上设置了背景和文本属性,并使用了WordPress中预设的两个CSS变量。

结果?搜索按钮现在是红色的(`--wp--preset--color--quaternary`),默认按钮块保留其亮绿色背景。

我们也可以在DevTools中看到更改。

如果我们想设置包含在其他块中的按钮的样式,也是如此。按钮只是一个例子,所以让我们再看一个。

### 示例:在每个级别设置标题样式

让我们用一个例子来巩固所有这些信息。这次,我们将:

- 全局设置所有标题的样式
- 设置所有二级标题元素的样式
- 设置查询循环块中二级标题元素的样式

首先,让我们从`theme.json`的基本结构开始:
</code>
Copier après la connexion

{ "Version": 2, "Styles": { // Style de niveau mondial "Éléments": { "En-tête": { "Couleur": "var (- wp - présent-colore --base)" }, }, // Style de niveau de bloc "blocs": {} } }

<code>
这为我们的全局和块级样式建立了轮廓。

#### 全局设置所有标题的样式

让我们将`headings`对象添加到我们的全局样式并应用一些样式:
</code>
Copier après la connexion

{ "Version": 2, "Styles": { // Style de niveau mondial "Éléments": { "En-tête": { "Couleur": "var (- wp - présent-colore --base)" }, "H2": { "Couleur": "var (- wp - tracet-coulor - primaire)", "Typographie": { "FontSize": "Clamp (2.625rem, calc (2.625rem ((1vw - 0.48rem) * 8.4135)), 3.25rem)" } } }, // Style de niveau de bloc "blocs": {} } }

<code>
这将所有标题的颜色设置为WordPress中的预设基本颜色。让我们在全局级别更改二级标题元素的颜色和字体大小:
</code>
Copier après la connexion

{ "Version": 2, "Styles": { // Style de niveau mondial "Éléments": { "En-tête": { "Couleur": "var (- wp - présent-colore --base)" }, "H2": { "Couleur": "var (- wp - tracet-coulor - primaire)", "Typographie": { "FontSize": "Clamp (2.625rem, calc (2.625rem ((1vw - 0.48rem) * 8.4135)), 3.25rem)" } } }, // Style de niveau de bloc "blocs": { "Core / Query": { "Éléments": { "H2": { "Typographie": { "FontSize": 3.25rem } } } } } } }

<code>
现在,所有二级标题元素都设置为主要预设颜色,并具有流体字体大小。但也许我们希望在将二级标题元素用于查询循环块时使用固定fontSize:
</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal