Cours JavaScript et React · Module 7: Styles et animations
Tailwind CSS - L'efficacité du style cosmique
Dans cette leçon9
Lors de notre voyage cosmique à travers la galaxie React, nous arrivons à l'une des technologies les plus révolutionnaires de ces dernières années : Tailwind CSS. C'est comme découvrir une technologie extraterrestre avancée et performante qui change complètement notre façon de construire les interfaces utilisateur.
Qu'est-ce que Tailwind CSS ?
Tailwind CSS est un framework CSS basé sur l'approche utility-first, qui consiste à composer les interfaces en appliquant des classes utilitaires directement dans le code HTML/JSX. Au lieu d'écrire tes propres styles CSS, tu utilises des classes toutes prêtes qui représentent des propriétés CSS individuelles.
Imagine que chaque classe Tailwind est comme un petit composant de vaisseau : indépendant, spécialisé et prêt à l'emploi immédiat. Combinés ensemble, ils forment un vaisseau (une interface) entièrement fonctionnel et personnalisé, exactement comme tu en as besoin.
Installer et configurer Tailwind CSS dans un projet React
Pour commencer ton aventure avec Tailwind CSS dans un projet React, suis ces étapes :
1# Installation de Tailwind CSS et de ses dépendances
2npm install -D tailwindcss postcss autoprefixer
3npx tailwindcss init -pLes commandes ci-dessus installent Tailwind CSS avec les dépendances nécessaires et créent les fichiers de configuration de base : tailwind.config.js et postcss.config.js.
Ensuite, modifie le fichier tailwind.config.js :
1/** @type {import('tailwindcss').Config} */
2module.exports = {
3 content: [
4 "./src/**/*.{js,jsx,ts,tsx}",
5 ],
6 theme: {
7 extend: {},
8 },
9 plugins: [],
10}Enfin, ajoute les directives Tailwind à ton fichier CSS principal :
1/* index.css */
2@tailwind base;
3@tailwind components;
4@tailwind utilities;Les bases de l'utilisation de Tailwind CSS
Styliser des composants avec Tailwind CSS, c'est comme construire avec des briques. Chaque classe représente une propriété CSS précise. Voyons comment créer un bouton :
1function SpaceButton() {
2 return (
3 <button className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded transition duration-300">
4 Activer l'hyperpropulsion
5 </button>
6 );
7}Dans l'exemple ci-dessus :
bg-blue-500- fond bleu (échelle 500)hover:bg-blue-700- couleur de fond au survoltext-white- texte blancfont-bold- texte en graspy-2 px-4- padding : 0.5rem en haut et en bas, 1rem à gauche et à droiterounded- coins arrondistransition duration-300- animation fluide d'une durée de 300ms
La responsivité avec Tailwind CSS
Tailwind propose un système de modificateurs intuitif pour les différents breakpoints. Imagine que ton interface cosmique doit s'adapter à différents écrans : des petits panneaux de contrôle aux énormes écrans des centres de commandement.
1<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
2 <div className="bg-gray-100 p-4 rounded">Panel 1</div>
3 <div className="bg-gray-100 p-4 rounded">Panel 2</div>
4 <div className="bg-gray-100 p-4 rounded">Panel 3</div>
5</div>Dans cet exemple :
- Sur les petits écrans, nous avons 1 colonne
- Sur les écrans moyens (
md:), nous avons 2 colonnes - Sur les grands écrans (
lg:), nous avons 3 colonnes
Styles personnalisés et composition de classes
Étendre le thème
Tu peux personnaliser les couleurs, les polices, les breakpoints et d'autres aspects de Tailwind pour ton projet en modifiant le fichier tailwind.config.js :
1module.exports = {
2 theme: {
3 extend: {
4 colors: {
5 'space-blue': '#1a2b3c',
6 'cosmic-purple': '#7209b7',
7 'stellar-red': '#f72585',
8 },
9 fontFamily: {
10 'futuristic': ['Space Grotesk', 'sans-serif'],
11 },
12 spacing: {
13 '128': '32rem',
14 },
15 },
16 },
17 // ...reste de la configuration
18}Composer des classes avec @apply
Pour les combinaisons de classes récurrentes, Tailwind propose la directive @apply, qui te permet de créer tes propres classes composites :
1/* index.css */
2@tailwind base;
3@tailwind components;
4
5@layer components {
6 .space-button {
7 @apply bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded transition duration-300;
8 }
9
10 .planet-card {
11 @apply bg-gray-800 text-white p-6 rounded-lg shadow-lg hover:shadow-xl transition-shadow;
12 }
13}
14
15@tailwind utilities;Tu peux maintenant utiliser ces classes dans tes composants :
1<button className="space-button">Démarrer la mission</button>
2<div className="planet-card">
3 <h3>Mars</h3>
4 <p>La planète rouge</p>
5</div>Avantages de Tailwind CSS
Vitesse de développement - Tu n'as pas besoin de passer d'un fichier CSS à un fichier JSX, tout se trouve au même endroit.
Faible augmentation de la taille du bundle - Grâce à PurgeCSS, le fichier CSS final ne contient que les classes utilisées.
Cohérence du projet - Les échelles de couleurs, tailles, etc. prédéfinies imposent la cohérence.
Responsivité - Un système de breakpoints intuitif facilite la création d'interfaces responsives.
Collaboration facilitée - Les développeurs travaillent dans le même système, ce qui conduit à un code plus cohérent.
Quand utiliser Tailwind CSS ?
Tailwind est idéal pour :
- Les projets où tu privilégies la vitesse de développement
- Les applications qui ont besoin d'un système de design cohérent
- Les équipes qui veulent éviter les conflits CSS
- Les situations où tu veux éviter d'inventer des noms de classes
Intégration avec d'autres outils et frameworks
Tailwind s'intègre bien avec d'autres outils et bibliothèques. Tu peux l'utiliser avec :
- Styled Components - via le plugin tailwind-styled-components
- Material UI ou Chakra UI - en complément pour des styles plus spécifiques
- Framer Motion - pour ajouter des animations aux éléments stylisés avec Tailwind
Exercice pratique : Crée une interface de cockpit cosmique
Utilise Tailwind CSS pour créer une interface de cockpit cosmique responsive contenant :
- Un en-tête avec le logo de la mission et un menu de navigation
- Un panneau de contrôle avec des boutons et des indicateurs
- Une section de surveillance avec des données sous forme de cartes
- Un pied de page avec les informations de la mission
N'oublie pas la responsivité et l'utilisation des différents composants Tailwind comme flex, grid, cartes, boutons, etc.
Cet exercice te permettra d'explorer le monde cosmique du CSS utility-first et de comprendre comment Tailwind CSS peut accélérer ton voyage à travers la galaxie du développement frontend.
Code de cette leçon : App.jsx
1import React, { useState } from 'react';
2import './styles.css';
3
4// Simulation de Tailwind CSS à l'aide de classes standard
5// Dans un vrai projet, tu utiliserais Tailwind CSS complet
6
7function SpaceDashboard() {
8 const [selectedPlanet, setSelectedPlanet] = useState(null);
9
10 const planets = [
11 { id: 1, name: 'Mars', distance: '225 millions de km', temp: '-60°C', moons: 2 },
12 { id: 2, name: 'Jupiter', distance: '778 millions de km', temp: '-110°C', moons: 79 },
13 { id: 3, name: 'Saturne', distance: '1,4 milliard de km', temp: '-140°C', moons: 82 },
14 { id: 4, name: 'Uranus', distance: '2,9 milliards de km', temp: '-195°C', moons: 27 },
15 ];
16
17 return (
18 <div className="min-h-screen bg-gradient-to-br from-gray-900 via-purple-900 to-gray-900 p-6">
19 {/* Header */}
20 <header className="text-center mb-12">
21 <h1 className="text-4xl font-bold text-cyan-400 mb-2">
22 Explorateur du système solaire
23 </h1>
24 <p className="text-gray-400">
25 Utility-First CSS avec des classes Tailwind
26 </p>
27 </header>
28
29 {/* Grille des planètes */}
30 <div className="max-w-6xl mx-auto grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
31 {planets.map(planet => (
32 <div
33 key={planet.id}
34 onClick={() => setSelectedPlanet(planet)}
35 className={`
36 bg-white/5 backdrop-blur-sm rounded-xl p-6
37 border border-white/10 cursor-pointer
38 transition-all duration-300 hover:scale-105
39 hover:border-cyan-500/50 hover:shadow-lg hover:shadow-cyan-500/20
40 ${selectedPlanet?.id === planet.id ? 'ring-2 ring-cyan-400' : ''}
41 `}
42 >
43 <h3 className="text-xl font-bold text-yellow-400 mb-4">
44 {planet.name}
45 </h3>
46
47 <div className="space-y-2 text-sm">
48 <div className="flex justify-between">
49 <span className="text-gray-400">Distance :</span>
50 <span className="text-white">{planet.distance}</span>
51 </div>
52 <div className="flex justify-between">
53 <span className="text-gray-400">Température :</span>
54 <span className="text-cyan-300">{planet.temp}</span>
55 </div>
56 <div className="flex justify-between">
57 <span className="text-gray-400">Lunes :</span>
58 <span className="text-white">{planet.moons}</span>
59 </div>
60 </div>
61 </div>
62 ))}
63 </div>
64
65 {/* Panneau de détails */}
66 {selectedPlanet && (
67 <div className="max-w-2xl mx-auto bg-white/5 backdrop-blur-sm rounded-xl p-8 border border-cyan-500/30">
68 <h2 className="text-2xl font-bold text-cyan-400 mb-4">
69 Détails : {selectedPlanet.name}
70 </h2>
71
72 <div className="grid grid-cols-2 gap-4 mb-6">
73 <div className="bg-white/5 rounded-lg p-4">
74 <p className="text-gray-400 text-sm">Distance au Soleil</p>
75 <p className="text-2xl font-bold text-white">{selectedPlanet.distance}</p>
76 </div>
77 <div className="bg-white/5 rounded-lg p-4">
78 <p className="text-gray-400 text-sm">Température moyenne</p>
79 <p className="text-2xl font-bold text-cyan-300">{selectedPlanet.temp}</p>
80 </div>
81 </div>
82
83 <div className="flex gap-4">
84 <button className="flex-1 bg-cyan-500 hover:bg-cyan-600 text-black font-bold py-3 px-6 rounded-lg transition-colors">
85 Planifier la mission
86 </button>
87 <button className="flex-1 bg-transparent border-2 border-yellow-500 text-yellow-500 hover:bg-yellow-500/10 font-bold py-3 px-6 rounded-lg transition-colors">
88 Plus d'informations
89 </button>
90 </div>
91 </div>
92 )}
93
94 {/* Pied de page */}
95 <footer className="text-center mt-12 text-gray-500 text-sm">
96 <p>Tailwind CSS permet de construire des interfaces avec des classes utilitaires</p>
97 <p className="mt-1">sans écrire son propre CSS</p>
98 </footer>
99 </div>
100 );
101}
102
103export default SpaceDashboard;Tu as repéré une erreur dans cette leçon ?
Teste tes connaissances
Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.
1. Quelle unité CSS convient le mieux pour créer des tailles de police responsives ?
2. Quelle approche des breakpoints est recommandée en design responsive ?
Voici 2 des 3 questions de cette leçon. Réponds aux autres dans le jeu.
Tâches pratiques dans le jeu
- Éditeur de code
Design responsive avec SCSS