Skip to main content

Configuration de Tailwind Css

Notre thème utilise Tailwind CSS pour fournir une expérience de design modulaire et personnalisable. Le fichier tailwind.config.js est au cœur de cette personnalisation, permettant de définir des thèmes, des variantes, et d'étendre les fonctionnalités par défaut de Tailwind.

1. Structure du fichier de configuration

Fichier à la racine du thème : /tailwind.config.js

Contenu

La propriété content spécifie les chemins vers les fichiers où Tailwind recherche les classes à compiler dans le build final. Cela inclut les fichiers Twig, PHP, et tout autre fichier susceptible de contenir des classes Tailwind.

content: [
'./Components/**/*.twig',
'./Partials/**/*.twig',
'./Templates/*.twig',
'./inc/*.php',
'./views/**/*.php',
'./views/**/*.twig',
'./*.php'
],

Mode Sombre

darkMode: 'class' 

Permet de gérer le mode sombre en ajoutant une classe spécifique (pseudo-selecteur dark:) à un élément racine.

Thème

La section theme définit les paramètres par défaut et les extensions de Tailwind, y compris les points de rupture pour la gestion responsive, les couleurs personnalisées, et les familles de polices etc.

Couleurs

Les couleurs du projet SNCF sont importées depuis tailwind-colors.json et assignées sous colors.sncf pour une utilisation facile dans les styles.

Certaines couleurs "par défaut" sont égalements définies.

const colors = require('tailwindcss/colors')
const projectColors = require('./tailwind-colors.json')

colors: {
transparent: 'transparent',
current: 'currentColor',
black: colors.black,
white: colors.white,
gray: colors.gray,
...
sncf: projectColors,
}

Screens

La section screens définit les points de rupture (breakpoints) pour le design responsive dans Tailwind CSS. Ces breakpoints déterminent les tailles d'écran auxquelles différents styles s'appliquent grâce à des préfixes dans les noms de classe. Voici une explication de cette section et de son utilisation :

screens: {
'sm': '640px', // => @media (min-width: 640px) { ... }
'md': '768px', // => @media (min-width: 768px) { ... }
'lg': '1024px', // => @media (min-width: 1024px) { ... }
'xl': '1280px', // => @media (min-width: 1280px) { ... }
'2xl': '1536px',// => @media (min-width: 1536px) { ... }
},

Exemples de Classes avec Breakpoints

  • sm:bg-sncf-lavande : Applique un arrière-plan lavande sur les écrans d'au moins 640 pixels de large.
  • md:flex : Applique un display flex sur les écrans d'au moins 768 pixels de large.
  • lg:grid : Transforme l'élément en grille sur les écrans d'au moins 1024 pixels de large.
  • xl:text-4xl : Applique une taille de texte 4xl sur les écrans d'au moins 1280 pixels de large.
  • 2xl:px-20 : Applique un padding horizontal de 20 sur les écrans d'au moins 1536 pixels de large.

Cela peux également servir en CSS via

.mon-element{
@apply bg-sncf-lavande xl:bg-sncf-blanc;
}
@screen xl{
.mon-element{
@apply border-sncf-gris;
}
}

Extensions

extend permet d'ajouter de nouvelles valeurs pour des utilitaires comme les couleurs, l'espacement, les tailles de polices, etc., sans écraser les valeurs par défaut. Se référer à la documentation Tailwind Css.

En voici un exemple :

extend: {
colors: {
outline: '#ff0000',
},
padding: {
'4.5': '1.15rem',
'5.5': '1.35rem',
'6.5': '1.6rem',
'7.5': '1.9rem',
},
fontSize: {
'sm' : ['0.875rem','1.19rem'],
'base':['1rem', '1.37rem'],
'md' : ['1.12rem', '1.53rem'],
'lg' : ['1.25rem', '1.71rem'],
'xl' : ['1.50rem', '2.04rem'],
'2xl': ['1.87rem', '2.56rem'],
'3xl': ['2.25rem', '3.07rem'],
'4xl': ['2.62rem', '3.58rem'],
},
},

Plugins et Variants

La propriété variants permet d'ajouter des variantes de style pour les états comme hover ou focus et pour des classes personnalisées.

Les plugins permettent d'étendre Tailwind avec des fonctionnalités personnalisées, comme ici pour ajouter une variante renforce pour les besoins spécifiques de contraste

variants: {
extend: {
textColor: ['renforce'],
backgroundColor: ['renforce'],
// ... pour Ajoutez d'autres propriétés si nécessaire
},
},
plugins: [
function ({ addVariant, e }) {
addVariant('renforce', ({ modifySelectors, separator }) => {
modifySelectors(({ className }) => {
return `.contraste-renforce .${e(`renforce${separator}${className}`)}`;
});
});
},
]