9 min de lecture · 1 875 mots

Tailwind CSS – Classes et configuration

Tailwind CSS – Classes et configuration

Guide de référence complet pour Tailwind CSS : classes utilitaires, responsive design, dark mode, configuration personnalisée et bonnes pratiques.

Table des matières

Installer Tailwind CSS

npm install -D tailwindcss postcss autoprefixer

Initialiser la configuration

npx tailwindcss init

Avec PostCSS config

npx tailwindcss init -p

Configuration de base (tailwind.config.js)

/ @type {import('tailwindcss').Config} /
module.exports = {
  content: [
    "./src//.{html,js,jsx,ts,tsx,vue}",
    "./pages//.{html,js,jsx,ts,tsx}",
    "./components//.{html,js,jsx,ts,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

Fichier CSS principal

/ styles.css /
@tailwind base;
@tailwind components;
@tailwind utilities;

/ Vos styles personnalisés ici /
@layer components {
  .btn-primary {
    @apply bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600;
  }
}

CDN (développement uniquement)


Layout et positionnement

Display


Block
Inline
Inline-block
Flex container
Grid container
Table
Row
Cell

Position


Static (défaut)
Relative
Absolute
Fixed
Sticky
Full
Horizontal
Vertical
Custom
z-0
z-10
z-20
z-30
z-40
z-50
z-auto

Width et Height


w-0 (0px)
w-px (1px)
w-0.5 (2px/0.125rem)
w-1 (4px/0.25rem)
w-2 (8px)
w-4 (16px)
w-8 (32px)
w-16 (64px)
w-32 (128px)
w-64 (256px)
w-1/2 (50%)
w-1/3 (33.333%)
w-2/3 (66.666%)
w-1/4 (25%)
w-3/4 (75%)
w-full (100%)
w-screen (100vw)
w-svw (100svw)
w-lvw (100lvw)
w-dvw (100dvw)
min-w-0
min-w-full
max-w-xs (320px)
max-w-sm (384px)
max-w-md (448px)
max-w-lg (512px)
max-w-xl (576px)
max-w-2xl (672px)
max-w-4xl (896px)
max-w-7xl (1280px)
max-w-full
h-64
h-screen (100vh)
min-h-screen

Overflow

Auto
Hidden
Visible
Scroll
X-Auto
Y-Auto

Object Fit et Position













Spacing (marges et padding)

Échelle de spacing

| Classe | Valeur | Pixels |
|——–|——–|——–|
| 0 | 0 | 0px |
| px | 1px | 1px |
| 0.5 | 0.125rem | 2px |
| 1 | 0.25rem | 4px |
| 2 | 0.5rem | 8px |
| 3 | 0.75rem | 12px |
| 4 | 1rem | 16px |
| 5 | 1.25rem | 20px |
| 6 | 1.5rem | 24px |
| 8 | 2rem | 32px |
| 10 | 2.5rem | 40px |
| 12 | 3rem | 48px |
| 16 | 4rem | 64px |
| 20 | 5rem | 80px |
| 24 | 6rem | 96px |
| 32 | 8rem | 128px |
| 40 | 10rem | 160px |
| 48 | 12rem | 192px |
| 56 | 14rem | 224px |
| 64 | 16rem | 256px |

Margin


Margin 4 (16px) tous côtés
Margin horizontal (left + right)
Margin vertical (top + bottom)
Margin top
Margin right
Margin bottom
Margin left
Negative margin
Negative margin top
Centré horizontalement
Aligné à droite

Padding


Padding 4 (16px) tous côtés
Padding horizontal
Padding vertical
Padding top
Padding right
Padding bottom
Padding left

Space Between


Item 1
Item 2
Item 3
Item 1
Item 2
Item 3

Typographie

Font Family

Sans-serif (défaut)

Serif

Monospace

Font Size

Extra small (0.75rem/12px)

Small (0.875rem/14px)

Base (1rem/16px)

Large (1.125rem/18px)

Extra large (1.25rem/20px)

2xl (1.5rem/24px)

3xl (1.875rem/30px)

4xl (2.25rem/36px)

5xl (3rem/48px)

6xl (3.75rem/60px)

7xl (4.5rem/72px)

8xl (6rem/96px)

9xl (8rem/128px)

Font Weight

100

200

300

400

500

600

700

800

900

Text Alignment

Gauche

Centré

Droite

Justifié

Start (RTL aware)

End (RTL aware)

Text Decoration

Souligné

Ligne au-dessus

Barré

Sans décoration

Solid

Double

Pointillé

Tirets

Ondulé

Rouge

Épaisseur 2px

Text Transform

MAJUSCULES

minuscules

Capitalisé

Normal

Line Height

1

1.25

1.375

1.5

1.625

2

0.75rem

2.5rem

Letter Spacing

-0.05em

-0.025em

0

0.025em

0.05em

0.1em

Text Overflow

Tronqué avec ellipsis

Ellipsis

Clip

Une ligne max

Deux lignes max

Trois lignes max

Text Indent et Alignment

Indentation 32px

Baseline

Top

Middle

Bottom

Text top

Text bottom

Couleurs et backgrounds

Palette de couleurs

Tailwind inclut les couleurs suivantes (50-900) :

  • slate, gray, zinc, neutral, stone
  • red, orange, amber, yellow, lime, green, emerald, teal, cyan
  • sky, blue, indigo, violet, purple, fuchsia, pink, rose
  • Text Colors

    Gris 500

    Bleu 600

    Rouge 500

    Vert 600

    50% opacité

    75% opacité

    100% opacité

    Background Colors

    Blanc
    Noir
    Gris clair
    Gris foncé
    Bleu
    Bleu 50% opacité
    Transparent

    Gradients

    
    
    Gauche à droite
    Haut en bas
    Diagonal (top-right)
    Trois couleurs

    Background Image

    Background image
    Pas de background
    Centré
    Haut
    Bas
    Gauche
    Droite
    Cover
    Contain
    Auto
    Repeat
    No repeat
    Repeat X
    Repeat Y

    Borders et effets

    Border Width

    Border 1px tous côtés
    Pas de border
    Border 2px
    Border 4px
    Border 8px
    Top
    Right
    Bottom
    Left
    Left + Right
    Top + Bottom

    Border Color

    Gris
    Bleu
    Rouge 50% opacité

    Border Style

    Solid
    Dashed
    Dotted
    Double
    None

    Border Radius

    0.25rem
    0.375rem
    0.5rem
    0.75rem
    1rem
    1.5rem
    9999px (cercle)
    Top
    Right
    Bottom
    Left
    Top-left
    Top-right
    Bottom-right
    Bottom-left

    Box Shadow

    Petite ombre
    Ombre standard
    Ombre moyenne
    Grande ombre
    Très grande ombre
    Ombre maximale
    Ombre intérieure
    Pas d'ombre
    Ombre bleue

    Opacity

    Invisible
    25%
    50%
    75%
    100%

    Outline

    
    
    
    
    
    
    
    

    Ring (outline avec offset)

    
    
    
    
    
    
    
    
    

    Flexbox et Grid

    Flexbox Container

    Horizontal (défaut)
    Horizontal inversé
    Vertical
    Vertical inversé
    Wrap
    Wrap reverse
    Nowrap

    Justify Content

    Start
    End
    Center
    Space between
    Space around
    Space evenly

    Align Items

    Start
    End
    Center
    Baseline
    Stretch

    Align Self

    Auto
    Start
    Center
    End
    Stretch

    Flex Grow/Shrink

    Grow (flex: 1 1 0%)
    Auto (flex: 1 1 auto)
    Initial (flex: 0 1 auto)
    None (flex: none)
    Grow
    No grow
    Shrink
    No shrink

    Gap

    Gap 16px
    Gap horizontal
    Gap vertical

    Grid Container

    
    
    1 colonne
    2 colonnes
    3 colonnes
    4 colonnes
    12 colonnes
    2 lignes
    3 lignes
    Gap 16px
    Gap différent

    Grid Column/Row Span

    2 colonnes
    3 colonnes
    Full width
    Colonnes 2-4
    Start 1, span 2
    2 lignes
    Lignes 2-4

    Grid Auto Flow

    Par ligne (défaut)
    Par colonne
    Dense

    Responsive design

    Breakpoints

    | Breakpoint | Min-width | CSS |
    |————|———–|—–|
    | 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) |

    Mobile-first approach

    
    
    Small sur mobile, base sur tablette, large sur desktop
    1 colonne mobile, 2 tablette, 4 desktop
    Visible mobile uniquement
    16px mobile, 24px tablette, 32px desktop

    Exemples de patterns responsive

    
    
    
    
    
    ...
    ...
    ...
    Content

    Titre responsive

    Dark mode

    Configuration

    // tailwind.config.js
    module.exports = {
      darkMode: 'class', // ou 'media' pour system preference
      // ...
    }
    

    Utilisation avec classe

    
    
      
        

    Titre

    Description

    Toggle dark mode (JavaScript)

    // Fonction toggle
    function toggleDarkMode() {
      document.documentElement.classList.toggle('dark');
      localStorage.setItem(
        'theme',
        document.documentElement.classList.contains('dark') ? 'dark' : 'light'
      );
    }
    
    // Initialiser au chargement
    if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
      document.documentElement.classList.add('dark');
    } else {
      document.documentElement.classList.remove('dark');
    }
    

    Exemples de composants dark mode

    
    

    Titre

    Description

    Lien

    Animations et transitions

    Transition

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    Transform

    
    
    0%
    50%
    100%
    150%
    Hover scale
    45°
    90°
    180°
    -45°
    Translate X 16px
    Translate Y 16px
    -50% X (centrage)
    -50% Y
    Skew X 12°
    Skew Y 6°
    Center
    Top
    Top-right

    Animations prédéfinies

    Rotation continue
    Ping (radar)
    Pulse
    Bounce

    Exemples d’interactions

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    Titre

    Configuration personnalisée

    Étendre le thème

    // tailwind.config.js
    module.exports = {
      theme: {
        extend: {
          colors: {
            'brand': {
              50: '#eff6ff',
              100: '#dbeafe',
              500: '#3b82f6',
              900: '#1e3a8a',
            },
            'primary': '#3b82f6',
            'secondary': '#8b5cf6',
          },
          spacing: {
            '128': '32rem',
            '144': '36rem',
          },
          borderRadius: {
            '4xl': '2rem',
          },
          fontFamily: {
            'display': ['Inter', 'sans-serif'],
            'body': ['Open Sans', 'sans-serif'],
          },
          fontSize: {
            'xxs': '0.625rem',
          },
          maxWidth: {
            '8xl': '88rem',
            '9xl': '96rem',
          },
          screens: {
            '3xl': '1920px',
          },
          zIndex: {
            '60': '60',
            '70': '70',
            '80': '80',
            '90': '90',
            '100': '100',
          },
        },
      },
    }
    

    Remplacer le thème par défaut

    module.exports = {
      theme: {
        // Remplace complètement la config par défaut
        colors: {
          primary: '#3b82f6',
          secondary: '#8b5cf6',
          white: '#ffffff',
          black: '#000000',
        },
        // extend: {} pour garder les valeurs par défaut
      },
    }
    

    Créer des composants personnalisés

    / styles.css /
    @layer components {
      .btn {
        @apply px-4 py-2 rounded font-medium transition-colors;
      }
    
      .btn-primary {
        @apply bg-blue-500 text-white hover:bg-blue-600;
      }
    
      .btn-secondary {
        @apply bg-gray-200 text-gray-900 hover:bg-gray-300;
      }
    
      .btn-lg {
        @apply px-6 py-3 text-lg;
      }
    
      .card {
        @apply bg-white rounded-lg shadow-md p-6;
      }
    
      .input {
        @apply w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500;
      }
    }
    

    Utilitaires personnalisés

    @layer utilities {
      .text-shadow {
        text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
      }
    
      .scrollbar-hide {
        -ms-overflow-style: none;
        scrollbar-width: none;
      }
    
      .scrollbar-hide::-webkit-scrollbar {
        display: none;
      }
    
      .backdrop-blur-xs {
        backdrop-filter: blur(2px);
      }
    }
    

    Classes arbitraires

    
    
    Width 247px
    Top 117px
    Couleur custom
    Background image
    Grid custom
    CSS variable
    Font size variable

    Plugins et extensions

    Plugins officiels

    Forms

    npm install -D @tailwindcss/forms

    Typography

    npm install -D @tailwindcss/typography

    Aspect Ratio

    npm install -D @tailwindcss/aspect-ratio

    Line Clamp

    npm install -D @tailwindcss/line-clamp

    Container Queries

    npm install -D @tailwindcss/container-queries

    Configuration des plugins

    // tailwind.config.js
    module.exports = {
      plugins: [
        require('@tailwindcss/forms'),
        require('@tailwindcss/typography'),
        require('@tailwindcss/aspect-ratio'),
        require('@tailwindcss/line-clamp'),
        require('@tailwindcss/container-queries'),
      ],
    }
    

    @tailwindcss/forms

    
    
    
    
    
    
    

    @tailwindcss/typography

    
    

    Titre

    Paragraphe avec style automatique...

    • Liste
    Content
    Content

    @tailwindcss/aspect-ratio

    Container Queries

    Responsive au container parent

    Plugin personnalisé

    // tailwind.config.js
    const plugin = require('tailwindcss/plugin');
    
    module.exports = {
      plugins: [
        plugin(function({ addUtilities, addComponents, theme }) {
          // Ajouter des utilitaires
          addUtilities({
            '.rotate-y-180': {
              transform: 'rotateY(180deg)',
            },
            '.preserve-3d': {
              transformStyle: 'preserve-3d',
            },
          });
    
          // Ajouter des composants
          addComponents({
            '.card': {
              backgroundColor: theme('colors.white'),
              borderRadius: theme('borderRadius.lg'),
              padding: theme('spacing.6'),
              boxShadow: theme('boxShadow.xl'),
            },
          });
        }),
      ],
    }
    

    Bonnes pratiques

    Organisation des classes

    
    
    Content

    Éviter la répétition avec @apply

    / Au lieu de répéter partout : /
    

    Composants réutilisables

    // React component
    function Button({ variant = 'primary', size = 'md', children }) {
      const baseClasses = 'font-medium rounded transition-colors';
    
      const variants = {
        primary: 'bg-blue-500 text-white hover:bg-blue-600',
        secondary: 'bg-gray-200 text-gray-900 hover:bg-gray-300',
        danger: 'bg-red-500 text-white hover:bg-red-600',
      };
    
      const sizes = {
        sm: 'px-3 py-1.5 text-sm',
        md: 'px-4 py-2',
        lg: 'px-6 py-3 text-lg',
      };
    
      const classes = ${baseClasses} ${variants[variant]} ${sizes[size]};
    
      return ;
    }
    

    Purge/Content configuration

    // tailwind.config.js
    module.exports = {
      content: [
        './src//.{html,js,jsx,ts,tsx,vue}',
        './pages//.{html,js,jsx,ts,tsx}',
        './components//.{html,js,jsx,ts,tsx}',
        // Safelist pour classes dynamiques
      ],
      safelist: [
        'bg-red-500',
        'bg-green-500',
        'bg-blue-500',
        {
          pattern: /bg-(red|green|blue)-(100|500|900)/,
        },
      ],
    }
    

    Performance

    // 1. Utiliser JIT mode (activé par défaut Tailwind 3+)
    // 2. Purger les classes inutilisées en production
    // 3. Minimiser l'usage de @apply
    // 4. Utiliser des composants pour la répétition
    // 5. Lazy load le CSS si possible
    

    Accessibilité

    
    
    
    
    Description pour lecteurs d'écran
    
    
    Visible
    
    
    
      Passer au contenu principal
    
    

    Dark mode système + manuel

    // Support préférence système + toggle manuel
    function initTheme() {
      const theme = localStorage.getItem('theme');
      const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
    
      if (theme === 'dark' || (!theme && systemDark)) {
        document.documentElement.classList.add('dark');
      }
    }
    
    // Écouter les changements système
    window.matchMedia('(prefers-color-scheme: dark)')
      .addEventListener('change', e => {
        if (!localStorage.getItem('theme')) {
          document.documentElement.classList.toggle('dark', e.matches);
        }
      });
    

    Pièges courants à éviter

    1. Classes dynamiques non sécurisées

    
    

    2. Surcharge de @apply

    / ÉVITER : trop de @apply /
    .button {
      @apply px-4 py-2 bg-blue-500 text-white rounded shadow hover:bg-blue-600 active:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500;
    }
    
    / PRÉFÉRER : HTML avec classes utilitaires /
    

    3. Ignorer le mobile-first

    
    

    4. Classes importantes excessives

    / ÉVITER /
    .my-class {
      @apply !bg-blue-500 !text-white !p-4;
    }
    
    / PRÉFÉRER : meilleure spécificité CSS /
    

    5. Oublier les states hover/focus

    
    
    
    
    
    

    Ressources

    Documentation officielle

  • https://tailwindcss.com/docs
  • https://tailwindui.com (composants premium)
  • https://headlessui.com (composants accessibles)
  • Outils

  • Tailwind CSS IntelliSense : Extension VSCode
  • Tailwind Play : Playground en ligne
  • Tailwind Cheat Sheet : Référence rapide
  • Composants communautaires

  • daisyUI : Bibliothèque de composants
  • Flowbite : Composants open-source
  • Preline : Composants UI
  • Tailwind Elements : Bootstrap-like components
  • Classes utiles mémorisables

    Spacing: 4 = 16px (1rem), 8 = 32px, 12 = 48px, 16 = 64px
    Text sizes: sm(14px), base(16px), lg(18px), xl(20px), 2xl(24px)
    Breakpoints: sm(640px), md(768px), lg(1024px), xl(1280px)
    Container max-width: xs(320), sm(384), md(448), lg(512), xl(576), 2xl(672)
    Colors: 50(lightest) → 900(darkest)
    Z-index: 0, 10, 20, 30, 40, 50
    

    Version : Tailwind CSS 3.4+
    Dernière mise à jour* : Décembre 2024

    Ce guide couvre les fonctionnalités essentielles de Tailwind CSS pour le développement web moderne avec un focus sur les meilleures pratiques et l’optimisation.

    Une remarque, un retour ?

    Cet article est vivant — corrections, contre-arguments et retours de production sont les bienvenus. Trois canaux, choisissez celui qui vous convient.