Aller au contenu
DocPensieve
Menu de la documentation

Thème

Pour apprendre à s'en servir, voir Thèmes. Cette page liste ce qui existe.

Les options

theme: {
  framework: 'tailwind',
  darkMode: 'class',
  tokens: { '--dp-accent': 'oklch(55% 0.2 250)' },
  css: '.dp-article h2 { letter-spacing: -0.01em; }',
  source: '@import "tailwindcss";',
},
ChampDéfautEffet
framework'tailwind''tailwind' ou 'custom'
darkMode'class''class' : le système du lecteur, sauf si une classe sur <html> en décide. 'dark' ou 'light' pose cette classe
toggletrueUn bouton clair / sombre dans l'en-tête, retenu de page en page
tokensJetons --dp-* redéfinis, fusionnés avec ceux du provider
css''CSS ajouté à la feuille produite
source@import "tailwindcss";Feuille remise au compilateur utilitaire

source ne concerne que le provider tailwind : c'est la feuille d'entrée qu'il compile. La remplacer permet d'ajouter des directives — un bloc @theme, par exemple — sans sortir du mécanisme. Les directives @plugin ne sont pas encore prises en charge et arrêtent la génération.

Les jetons

Vingt et un jetons, que les deux providers définissent et que les composants lisent. Un jeton redéfini se propage partout, sans qu'aucun composant ait à le savoir — dans la palette claire : les valeurs sombres vivent dans la feuille du thème, et se redéfinissent dans le dossier theme/ du projet.

JetonRôle
--dp-bgFond de page
--dp-bg-softFond des zones en creux — pistes de jauge, survols
--dp-textTexte courant
--dp-text-softTexte secondaire — légendes, pieds de carte
--dp-borderBordures visibles
--dp-ruleFilets discrets — séparateurs d'arborescence
--dp-accentCouleur d'accent — liens, remplissages
--dp-accent-softFond d'accent — bandeaux
--dp-tipTon d'un bloc de conseil — bordure et titre
--dp-tip-softSon fond
--dp-attentionTon d'un bloc qui met en garde
--dp-attention-softSon fond
--dp-dangerTon d'un bloc qui dit ce que coûte un faux pas
--dp-danger-softSon fond
--dp-shadowCouleur des ombres portées
--dp-radiusArrondi des angles
--dp-fontFamille de caractères du texte
--dp-font-monoFamille à chasse fixe — code, arborescences
--dp-content-widthLargeur de lecture. none par défaut
--dp-sidebar-widthColonne du menu
--dp-toc-widthColonne du sommaire

Certains composants ajoutent les leurs, documentés sur leur page : --dp-skill-size pour une jauge circulaire, --dp-skill-color pour sa teinte, --dp-logo-icon-size pour une icône.

Les créneaux

Les gabarits n'écrivent aucune classe. Ils demandent la classe de chaque créneau, et le thème répond. Un provider ne redéfinit que ce qu'il change ; tout le reste garde la classe dp-* ci-dessous.

CréneauClasse par défaut
skipdp-skipLien d'évitement vers le contenu
headerdp-headerEn-tête du site
headerStaticdp-header dp-header--staticL'en-tête quand il défile
branddp-brandNom du projet, dans l'en-tête
brandLogodp-brand-logoLogo à côté du nom du projet
versionsdp-versionsSélecteur de version
versionsListdp-versions-listListe ouverte du sélecteur
languagesdp-languagesSélecteur de langue, quand une version est traduite
languagesListdp-languages-listListe ouverte de ce sélecteur
shelldp-shellGrille menu / contenu / sommaire
shellWidedp-shell dp-shell--wideLa même, sans menu ni sommaire
sidebardp-sidebarColonne du menu
navdp-navListe de navigation
navItemdp-nav-itemEntrée de navigation
navItemParentdp-nav-item--parentEntrée qui contient une section
navLinkdp-nav-linkLien de navigation
navLabeldp-nav-labelLibellé de section, non cliquable
noticedp-noticeBandeau des versions qui ne sont pas la courante
skillIcondp-skill-iconIcône devant le nom d'une jauge
maindp-mainZone principale
articledp-articleContenu de la page
tocdp-tocColonne du sommaire
tocTitledp-toc-titleTitre du sommaire
tocListdp-toc-listListe du sommaire
tocItemdp-toc-itemEntrée du sommaire
footerdp-footerPied de page
scrollTopdp-scroll-topBouton de retour en haut
scrollTopIcondp-scroll-top-iconFlèche de ce bouton
searchdp-searchChamp de recherche de l'en-tête
schemeToggledp-scheme-toggleBouton clair / sombre de l'en-tête
headerNavdp-header-navVersions, liens et recherche, en rangée
headerLinksdp-header-linksLiens de l'en-tête
menudp-menuBouton de menu, sur écran étroit
menuPaneldp-menu-panelCe que ce bouton ouvre
navGroupdp-nav-groupUne catégorie repliée du menu
navSummarydp-nav-summaryLa poignée de ce repli
sidebarMenudp-sidebar-menuLe menu de la documentation, sur écran étroit
megadp-megaUne entrée d'en-tête qui ouvre un panneau
megaPaneldp-mega-panelCe panneau
megaColumndp-mega-columnUne colonne du panneau
megaTitledp-mega-titleLe titre d'une colonne
bylinedp-bylineAuteurs et dates en tête de page
bylineAuthorsdp-byline-authorsListe des auteurs
bylineAuthordp-byline-authorUn auteur
bylineAvatardp-byline-avatarPortrait d'un auteur
bylineNamedp-byline-nameNom d'un auteur
bylineBiodp-byline-bioBiographie d'un auteur
bylineDatesdp-byline-datesDates d'écriture et de mise à jour
tagsdp-tagsÉtiquettes en bas de page
tagdp-tagUne étiquette

Un créneau peut porter des variantes, suffixées --variante : column donne dp-column--span-8, skill donne dp-skill--circle.

Comment un créneau est rendu

Toujours en triple accolade, dans les gabarits :

<nav class="{{{cls.sidebar}}}">

Une double accolade échapperait le contenu, et une classe utilitaire telle que aria-[current=page] deviendrait aria-[current&#x3D;page] — un sélecteur muet, sans la moindre erreur.

Les feuilles de style

La feuille livrée est assemblée à partir de quatre morceaux, dans cet ordre :

FeuilleContenu
structure.cssGrille, colonnes collantes, accessibilité. Partagée par tous
prose.cssTypographie du contenu
une peau ou un pontcustom.css, ou tailwind-bridge.css
celle des composantsLes règles dp-* des composants livrés

Vient ensuite ce que le projet ajoute : theme.css, puis chaque fichier .css de son dossier theme/, dans l'ordre des noms.

La mise en page n'est jamais dupliquée dans un provider : elle vit dans structure.css, que les deux partagent. Un provider ne s'occupe que de l'habillage.

Ordre des couches

Sous le thème tailwind, la feuille déclare ses couches dans cet ordre :

@layer theme, base, components, utilities;

Les règles des composants vivent dans components, sous les utilitaires. Un className posé à l'emploi l'emporte donc toujours, quelle que soit la place de la règle dans le fichier.

Le thème custom n'a pas de couche d'utilitaires : ses feuilles ne sont dans aucune couche, et viennent donc avant les règles des composants, qui restent dans la couche components.

Ce qu'ajoutent theme.css et le dossier theme/ n'est dans aucune couche : sans couche, une règle l'emporte sur toutes celles qui en ont une. C'est ce qui permet d'y écrire un correctif sans se soucier de spécificité.