J'écris une page où j'ai besoin d'un tableau HTML pour conserver une taille définie. J'ai besoin que les en-têtes en haut du tableau y restent à tout moment, mais j'ai également besoin que le corps du tableau défile quel que soit le nombre de lignes ajoutées au tableau. Pensez à une mini version d'Excel. Cela semble être une tâche simple, mais presque toutes les solutions que j'ai trouvées sur le Web présentent des inconvénients. Comment puis-je resoudre ceci?
javascript
html
css
html-table
menthe
la source
la source
Réponses:
J'ai dû trouver la même réponse. Le meilleur exemple que j'ai trouvé est http://www.cssplay.co.uk/menu/tablescroll.html - j'ai trouvé que l'exemple n ° 2 fonctionnait bien pour moi. Vous devrez définir la hauteur de la table interne avec Java Script, le reste est CSS.
la source
J'ai trouvé que DataTables était assez flexible. Alors que sa version par défaut est basée sur jquery, il existe également un plugin AngularJs .
la source
J'ai vu l' excellente solution de Sean Haddy à une question similaire et j'ai pris la liberté de faire quelques modifications :
aria-hidden="false"
Sean a cependant fait le gros du travail. Merci également à Matt Burland d'avoir souligné la nécessité de soutenir tfoot.
Veuillez voir par vous-même sur http://jsfiddle.net/jhfrench/eNP2N/
la source
Avez-vous essayé d'utiliser la tête et le corps, et de définir une hauteur fixe sur le corps avec débordement: défilement?
Quels sont vos navigateurs cibles?
EDIT: Cela a bien fonctionné (presque) dans Firefox - l'ajout de la barre de défilement verticale a également nécessité une barre de défilement horizontale - beurk. IE vient de régler la hauteur de chaque td à ce que j'avais spécifié la hauteur de tbody à être. Voici le meilleur que je pourrais trouver:
la source
overflow-x: hidden;
etoverflow-y: auto
aussi aider.Ce dont vous avez besoin est:
1) ont un corps de table de hauteur limitée car le défilement se produit uniquement lorsque le contenu est plus grand que la fenêtre de défilement. Cependant,
tbody
il ne peut pas être dimensionné et vous devez l'afficherblock
pour le faire:2) Synchronisez à nouveau les largeurs des colonnes d'en-tête et de corps de table, car ce dernier en a
block
fait un élément non lié. La seule façon de le faire est de simuler la synchronisation en appliquant la même largeur de colonne aux deux .Cependant, puisque
tbody
lui-même est unblock
maintenant, il ne peut plus se comporter comme untable
. Puisque vous avez toujours besoin d'untable
comportement pour afficher correctement vos colonnes, la solution est de demander à chacune de vos lignes de s'afficher en tant quetable
s individuels :(Notez qu'en utilisant cette technique, vous ne pourrez plus vous étendre sur les lignes).
Une fois cela fait, vous pouvez imposer aux largeurs de colonne d'avoir la même largeur dans les deux
thead
ettbody
. Vous ne pourriez pas que:th, td { width: 20%; }
si vous avez 5 colonnes par exemple), ce qui est plus pratique (pas besoin de définir la largeur pour chaque instance de table) mais ne peut fonctionner pour aucun nombre de colonnesJe préfère la dernière option, qui nécessite d'ajouter:
Voir une démo ici , tirée de la réponse à cette question .
la source
Edit: C'est une très vieille réponse et est ici pour la prospérité juste pour montrer qu'elle était prise en charge une fois dans les années 2000 mais qu'elle a été abandonnée parce que la stratégie des navigateurs dans les années 2010 était de respecter les spécifications du W3C même si certaines fonctionnalités étaient supprimées: Tableau défilant avec en-tête fixe / footer était maladroitement spécifié avant HTML5.
Mauvaises nouvelles
Malheureusement, il n'y a pas de moyen élégant de gérer un tableau déroulant avec fixe
thead
/tfoot
parce que les spécifications HTML / CSS ne sont pas très claires sur cette fonctionnalité .Explications
Bien que la spécification HTML 4.01 indique
thead
/tfoot
/tbody
sont utilisés (introduits?) Pour faire défiler le corps du tableau:Mais la fonctionnalité de tableau déroulant de travail sur FF 3.6 a été supprimée dans FF 3.7 car considérée comme un bogue car non conforme aux spécifications HTML / CSS. Voir ceci et cela commentaires sur les bogues FF.
Astuce du Mozilla Developer Network
Vous trouverez ci-dessous une version simplifiée des conseils utiles de MDN pour le tableau déroulant
voir cette page archivée ou la version française actuelle
Cependant MDN dit aussi que cela ne fonctionne plus sur FF :-(
J'ai aussi testé sur IE8 => la table n'est pas non plus scrollable: - ((
la source
Je ne sais pas si quelqu'un regarde toujours cela, mais la façon dont j'ai fait cela précédemment consiste à utiliser deux tableaux pour afficher le tableau original unique - le premier juste la ligne de titre du tableau d'origine et aucune ligne de corps de tableau (ou une ligne de corps vide à créer il valide).
Le second est dans un div séparé et n'a pas de titre et uniquement les lignes de corps de tableau d'origine. Le div séparé est alors rendu défilable.
Le deuxième tableau de son div est placé juste en dessous du premier tableau dans le HTML et il ressemble à un tableau unique avec un en-tête fixe et une section inférieure déroulante. Je n'ai testé cela que dans Safari, Firefox et IE (les dernières versions de chacun au printemps 2010) mais cela a fonctionné dans tous.
Le seul problème était que la première table ne validerait pas sans corps (validateur W3.org - XHTML 1.0 strict), et quand j'en ai ajouté une sans contenu, cela provoque une ligne vide. Vous pouvez utiliser CSS pour rendre cela invisible, mais cela consomme toujours de l'espace sur la page.
la source
display: none;
, à moins que vous ne parliez d'espace dans la source ..?Cette solution fonctionne sous Chrome 35, Firefox 30 et IE 11 (non testé sur les autres versions)
Son pur CSS: http://jsfiddle.net/ffabreti/d4sope1u/
Tout est configuré pour s'afficher: bloc, la table a besoin d'une hauteur:
la source
Cela m'a causé d'énormes maux de tête en essayant de mettre en œuvre une telle grille pour une de nos applications. J'ai essayé toutes les différentes techniques mais elles avaient chacune des problèmes. Le plus proche que je suis venu était d'utiliser un plugin jQuery tel que Flexigrid (regardez sur http://www.ajaxrain.com pour des alternatives), mais cela ne semble pas prendre en charge des tables 100% larges, ce dont j'avais besoin.
Ce que j'ai fini par faire, c'est rouler le mien; Firefox prend en charge les
tbody
éléments de défilement , donc j'ai reniflé le navigateur et utilisé le CSS approprié (réglage de la hauteur, dépassement de capacité, etc.) pour faire ce défilement, puis pour les autres navigateurs, j'ai utilisé deux tables séparées à utilisertable-layout: fixed
qui utilisent un dimensionnement algorithme qui est garanti pour ne pas dépasser la taille indiquée (les tables normales se développeront lorsque le contenu est trop large pour tenir). En donnant aux deux tableaux des largeurs identiques, j'ai pu aligner leurs colonnes. J'ai enveloppé le second dans un ensemble de div pour faire défiler et avec un peu de pokery jiggery avec des marges, etc. j'ai réussi à obtenir le look et la sensation que je voulais.Désolé si cette réponse semble un peu vague par endroits; J'écris vite car je n'ai pas beaucoup de temps. Laissez un commentaire si vous voulez que je développe davantage!
la source
Voici un code qui fonctionne vraiment pour IE et FF (au moins):
J'ai changé le code d'origine pour le rendre plus clair et aussi pour le faire fonctionner correctement dans IE et aussi FF ..
Code d'origine ICI
la source
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Voici mon alternative. Il utilise également différents DIV pour l'en-tête, le corps et le pied de page, mais synchronisés pour le redimensionnement de la fenêtre et avec la recherche, le défilement, le tri, le filtrage et le positionnement:
Mes listes de CD
Cliquez sur les boutons Jazz, Classique ... pour voir les tableaux. Il est configuré de manière à être adéquat même si JavaScript est désactivé.
Semble OK sur IE, FF et WebKit (Chrome, Safari).
la source
Désolé, je n'ai pas lu toutes les réponses à votre question.
Ouais ici la chose que tu veux (j'ai déjà fait)
Vous pouvez utiliser deux tables, avec le même nom de classe pour un style similaire, une uniquement avec la tête de table et une autre avec vos lignes. Maintenant, placez ce tableau dans un div à hauteur fixe avec overflow-y: auto OR scroll.
la source
Le principal problème que j'ai eu avec les suggestions ci-dessus était de pouvoir brancher tablesorter.js ET de pouvoir faire flotter les en-têtes d'une table contrainte à une taille maximale spécifique. Je suis finalement tombé sur le plugin jQuery.floatThead qui fournissait les en-têtes flottants et permettait au tri de continuer à fonctionner.
Il a également une belle page de comparaison qui se montre par rapport à des plugins similaires .
la source
Live JsFiddle
C'est possible avec seulement HTML et CSS
la source
Si vous pouvez utiliser JavaScript, voici ma solution Créer un tableau avec une largeur fixe sur toutes les colonnes (pixels!) Ajoutez la classe Faites défiler vers le tableau et ajoutez cette hauteur de jeu javascript + jquery 1.4.x en css ou style!
Testé dans: Opera, Chrome, Safari, FF, IE5.5 ( échec du script Epic ), IE6, IE7, IE8, IE9
Edit: hauteur fixe.
la source
Je fais cela avec javascript (pas de bibliothèque) et CSS - le corps du tableau défile avec la page, et le tableau n'a pas besoin d'être de largeur ou de hauteur fixe, bien que chaque colonne doive avoir une largeur. Vous pouvez également conserver la fonctionnalité de tri.
Fondamentalement:
En HTML, créez des conteneurs divs pour positionner la ligne d'en-tête du tableau et le corps du tableau, créez également un div "masque" pour masquer le corps du tableau lorsqu'il défile au-delà de l'en-tête
En CSS, convertissez les parties du tableau en blocs
En Javascript, obtenez la largeur du tableau et correspond à la largeur du masque ... obtenez la hauteur du contenu de la page ... mesurez la position de défilement ... manipulez CSS pour définir la position de la ligne d'en-tête du tableau et la hauteur du masque
Voici le javascript et une DEMO jsFiddle.
la source
Pour moi, rien lié au défilement n'a vraiment fonctionné jusqu'à ce que je supprime la largeur du tableau CSS. À l'origine, la table CSS ressemblait à ceci:
Dès que j'ai enlevé la largeur: 100%; toutes les fonctionnalités de défilement ont commencé à fonctionner.
la source
Si vous avez des normes suffisamment basses;), vous pouvez placer un tableau qui ne contient qu'un en-tête directement au-dessus d'un tableau qui n'a qu'un corps. Il ne défilera pas horizontalement, mais si vous n'en avez pas besoin ...
la source