<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Tableau avec Première Colonne et Ligne Fixes</title> <style> /* Conteneur permettant le défilement horizontal et vertical */ .table-container { width: 100%; overflow: auto; /* Active le défilement horizontal et vertical */ max-width: 1200px; max-height: 400px; /* Limiter la hauteur pour activer la barre de défilement verticale */ border: 1px solid black; /* Bordure du conteneur */ } /* Tableau */ table { border-collapse: collapse; width: 100%; table-layout: fixed; min-width: 1200px; /* Pour forcer un minimum de largeur */ } /* Cellules des en-têtes et des données */ table th, table td { border: 1px solid black; padding: 8px; text-align: center; white-space: nowrap; /* Empêche les retours à la ligne dans les cellules */ } /* Première ligne (en-têtes) fixe en haut */ table thead th { background-color: #f1f1f1; position: sticky; top: 0; z-index: 2; /* S'assurer que l'en-tête reste au-dessus */ } /* Fixer la première colonne à gauche */ table td:first-child, table th:first-child { position: sticky; left: 0; background-color: white; z-index: 10; /* Assurer que la colonne reste au-dessus des autres */ border-right: none; /* Supprimer la bordure classique */ } /* Ajouter une fausse bordure avec un pseudo-élément */ table td:first-child::after, table th:first-child::after { content: ""; position: absolute; top: 0; right: 0; width: 2px; height: 100%; background-color: black; } /* Largeur des cellules pour assurer une uniformité */ table th, table td { width: 120px; /* Largeur fixe des colonnes */ } </style> </head> <body> <div class="table-container"> <table id="dynamic-table"> <caption id="caption">Tableau avec Première Colonne et Ligne Fixes</caption> <thead> <tr> <th>Teams</th> <th>Col 1</th> <th>Col 2</th> <th>Col 3</th> <th>Col 4</th> <th>Col 5</th> <!-- Plus de colonnes seront ajoutées dynamiquement --> </tr> </thead> <tbody id="table-body"> <!-- Les lignes seront générées par JavaScript --> </tbody> </table> </div> <script> // Fonction pour générer les lignes et les cellules du tableau function generateTable(rows, cols) { const tableBody = document.getElementById('table-body'); const headerRow = document.querySelector('thead tr'); // Ajouter les en-têtes des colonnes (automatiquement générés) for (let i = 6; i <= cols; i++) { // Commence à 6 car 5 colonnes existent déjà const th = document.createElement('th'); th.textContent = `Col ${i}`; headerRow.appendChild(th); } // Ajouter les lignes du tableau for (let i = 1; i <= rows; i++) { const newRow = document.createElement('tr'); // Ajouter la cellule de la première colonne const teamCell = document.createElement('th'); teamCell.textContent = `Team ${i}`; newRow.appendChild(teamCell); // Ajouter les cellules de données for (let j = 1; j <= cols; j++) { const td = document.createElement('td'); td.textContent = `${i * j}`; // Exemple de données newRow.appendChild(td); } // Ajouter la ligne au tableau tableBody.appendChild(newRow); } } // Générer un tableau avec 50 lignes et 100 colonnes generateTable(50, 100); </script> </body> </html>