J'essaie de concevoir un tableau HTML où l'en-tête restera en haut de la page lorsque ET UNIQUEMENT lorsque l'utilisateur le fait défiler hors de vue. Par exemple, le tableau peut être à 500 pixels de la page, comment faire pour que si l'utilisateur fait défiler l'en-tête hors de la vue (le navigateur détecte qu'il n'est plus dans la vue Windows), il restera en haut ? N'importe qui peut me donner une solution Javascript à cela?
<table>
<thead>
<tr>
<th>Col1</th>
<th>Col2</th>
<th>Col3</th>
</tr>
</thead>
<tbody>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
</tbody>
</table>
Donc, dans l'exemple ci-dessus, je veux <thead>
que la page défile avec la page si elle disparaît.
IMPORTANT: Je ne cherche PAS une solution où le <tbody>
aura une barre de défilement (débordement: auto).
jquery
html
html-table
Sam Dufel
la source
la source
Réponses:
Vous feriez quelque chose comme ça en appuyant sur le
scroll
gestionnaire d'événementswindow
et en utilisant un autretable
avec une position fixe pour afficher l'en-tête en haut de la page.HTML:
CSS:
JavaScript:
Cela affichera la tête de table lorsque l'utilisateur fait défiler suffisamment bas pour masquer la tête de table d'origine. Il se cachera à nouveau lorsque l'utilisateur aura à nouveau fait défiler la page vers le haut.
Exemple de travail: http://jsfiddle.net/andrewwhitaker/fj8wM/
la source
window
. mkoryak.github.io/floatThead a une solution plus généralement applicable.CSS pur (sans support IE11):
la source
-webkit-sticky
comme une valeur non valide pourposition
.-webkit-sticky
est pour Safari (bureau et iOS), pas pour Chrome.position: sticky
fonctionne dans Chrome à partir de la version 56. Vous devez définir les DEUX règles:-webkit-sticky
etsticky
exactement dans le même ordre que dans mon exemple de code. Safari obtientwebkit-sticky
et tous les autres navigateurs l'écrasent avecsticky
.position: sticky
ne pas fonctionner avec les éléments de tableau.Eh bien, j'essayais d'obtenir le même effet sans recourir à des colonnes de taille fixe ou avoir une hauteur fixe pour toute la table.
La solution que j'ai trouvée est un hack. Il consiste à dupliquer la table entière puis à cacher tout sauf l'en-tête, et à en faire une position fixe.
HTML
CSS
javascript
Voir ici: http://jsfiddle.net/QHQGF/7/
Edit: a mis à jour le code afin que la thead puisse recevoir des événements de pointeur (donc les boutons et les liens dans l'en-tête fonctionnent toujours). Cela résout le problème signalé par luhfluh et Joe M.
Nouveau jsfiddle ici: http://jsfiddle.net/cjKEx/
la source
visibility: hidden
. Vous pouvez masquer seulement#clone tbody
et après cela, vous pouvez définir la frontière ... Violon de travail: jsfiddle.net/QHQGF/1707J'ai écrit un plugin qui fait cela. J'y travaille depuis environ un an maintenant et je pense qu'il gère assez bien tous les cas d'angle:
Voici quelques démos / documents:
http://mkoryak.github.io/floatThead/
la source
J'ai pu résoudre le problème de modification de la largeur des colonnes. J'ai commencé avec la solution d'Andrew ci-dessus (merci beaucoup!), Puis j'ai ajouté une petite boucle pour définir les largeurs des td clonés:
Cela résout le problème sans avoir à cloner la table entière et à masquer le corps. Je suis tout nouveau dans JavaScript et jQuery (et pour stack overflow), donc tous les commentaires sont appréciés.
la source
C'est de loin la meilleure solution que j'ai trouvée pour avoir un en-tête de table fixe.
MISE À JOUR 5/11: Correction d'un bug de défilement horizontal comme indiqué par Kerry Johnson
Codepen: https://codepen.io/josephting/pen/demELL
la source
outerWidth
enwidth
dans la définition de la fonction resizeFixed ().z-index
à un nombre positif sur la.fixed
classe afin que les objets rendus après le chargement de la page dans le tableau ne flottent pas au-dessus de l'en-tête fixe lorsque vous faites défiler.La meilleure solution est d'utiliser ce plugin jquery:
https://github.com/jmosbech/StickyTableHeaders
Ce plugin a très bien fonctionné pour nous et nous avons essayé beaucoup d'autres solutions. Nous l'avons testé dans IE, Chrome et Firefox
la source
Il existe déjà de très bonnes solutions ici. Mais l'une des solutions CSS les plus simples que j'utilise dans ces situations est la suivante:
Parce qu'il n'y a aucune exigence pour JavaScript, cela simplifie considérablement la situation. Vous devez essentiellement vous concentrer sur la deuxième règle CSS, qui contient les conditions pour garantir que la tête du tableau reste en haut, quel que soit l'espace de défilement.
Elaborer chacune des règles en détail.
position
est destiné à indiquer au navigateur que l'objet principal, sa ligne et ses cellules doivent tous rester en haut. Cela doit nécessairement être accompagné detop
, qui spécifie au navigateur que la tête restera en haut de la page ou de la fenêtre. De plus, vous pouvez ajouterz-index
pour vous assurer que le contenu de la tête reste toujours en haut.La couleur de fond est simplement pour illustrer le point. Vous n'avez pas besoin d'utiliser de JavaScript supplémentaire pour obtenir cet effet. Ceci est pris en charge dans la plupart des principaux navigateurs après 2016.
la source
J'ai trouvé une bibliothèque jQuery simple appelée Sticky Table Headers. Deux lignes de code et ça a fait exactement ce que je voulais. Les solutions ci-dessus ne gèrent pas les largeurs de colonne, donc si vous avez des cellules de tableau qui prennent beaucoup d'espace, la taille résultante de l'en-tête persistant ne correspondra pas à la largeur de votre tableau.
http://plugins.jquery.com/StickyTableHeaders/
Informations d'utilisation ici: https://github.com/jmosbech/StickyTableHeaders
la source
Eh bien, après avoir examiné toutes les solutions disponibles, j'ai écrit un plugin qui peut geler n'importe quelle ligne (pas seulement la th) en haut de la page ou du conteneur. C'est très simple et très rapide. Sentez-vous libre de l'utiliser. http://maslianok.github.io/stickyRows/
la source
vous pouvez utiliser cette approche, pur HTML et CSS sans JS :)
la source
J'ai trouvé une solution simple sans utiliser JQuery et en utilisant uniquement CSS .
Vous devez mettre le contenu fixe dans les balises 'th' et ajouter le CSS
Les propriétés position, z-index et top suffisent. Mais vous pouvez appliquer le reste pour donner une meilleure vue.
la source
J'ai moi aussi rencontré les mêmes problèmes avec le formatage de la bordure qui n'était pas affiché en utilisant le code d'entrophy, mais quelques petites corrections et maintenant le tableau est extensible et affiche toutes les règles de style css que vous pouvez ajouter.
au css ajouter:
alors voici le nouveau javascript:
la source
Voici une solution qui s'appuie sur la réponse acceptée. Il corrige: la largeur des colonnes, le style de tableau correspondant et le défilement du tableau dans un conteneur div.
Usage
Assurez-vous que votre table comporte une
<thead>
balise, car seul le contenu de la tête sera corrigé.JavaSript
la source
$sp.scrollLeft()
ce qui fait défiler le montant de gauche, donc lors du défilement vers le bas, la table fixe est positionnée correctement. Ajout d'une vérification lors du défilement horizontal si la table fixe est visible pour ajuster la position gauche. Un autre problème que je ne pouvais pas résoudre est que lorsque la table passe au-dessus de la fenêtre, la table fixe doit se cacher jusqu'à ce que l'utilisateur revienne en arrière.Uncaught TypeError: $table.scrollParent is not a function
Cela vous aidera à avoir un en-tête fixe qui peut également être défilé horizontalement avec des données.
la source
C'est ma solution
la source
Un peu tard à la fête, mais voici une implémentation qui fonctionne avec plusieurs tables sur la même page et "jank" gratuitement (en utilisant requestAnimationFrame). De plus, il n'est pas nécessaire de fournir une largeur sur les colonnes. Le défilement horizontal fonctionne également.
Les en-têtes sont définis dans un
div
afin que vous soyez libre d'y ajouter n'importe quel balisage (comme des boutons), si nécessaire. C'est tout le HTML nécessaire:https://jsfiddle.net/lloydleo/bk5pt5gs/
la source
Dans cette solution, l'en-tête fixe est créé dynamiquement, le contenu et le style sont clonés à partir de THEAD
il vous suffit de deux lignes par exemple:
var $myfixedHeader = $("#Ttodo").FixedHeader(); //create fixed header $(window).scroll($myfixedHeader.moveScroll); //bind function to scroll event
Mon plugin jquery FixedHeader et getStyleObject fournis ci-dessous, vous pouvez mettre dans le fichier .js
la source
Créez une table supplémentaire avec le même en-tête que la table principale. Il suffit de mettre la tête dans le nouveau tableau avec une ligne et tous les en-têtes. Positionnez le blanc absolu et le fond. Pour la table principale, placez-le dans un div et utilisez un défilement de hauteur et de débordement. De cette façon, notre nouvelle table surmontera l'en-tête de la table principale et y restera. Entourez tout dans un div. Voici le code approximatif pour le faire.
la source
Démo: Démo d'en -tête de table fixe CSS
la source
Résolvez votre problème avec ceci
la source
Cela peut être réalisé en utilisant la transformation de propriété de style. Tout ce que vous avez à faire est d'envelopper votre table dans un div avec une hauteur fixe et un débordement réglé sur auto, par exemple:
Et puis vous pouvez y attacher le gestionnaire onscroll, ici vous avez une méthode qui trouve chaque table enveloppée avec
<div class="tableWrapper"></div>
:Et voici un exemple de travail de cela en action (j'ai utilisé le bootstrap pour le rendre plus joli): violon
Pour ceux qui souhaitent également prendre en charge IE et Edge, voici l'extrait:
Dans IE et Edge, le défilement est un peu lent ... mais cela fonctionne
Voici la réponse qui m'aide à découvrir ceci: réponse
la source
J'ai essayé la plupart de ces solutions et j'ai finalement trouvé (IMO) la meilleure solution moderne:
Grilles CSS
Avec les grilles CSS, vous pouvez définir une `` grille '', et vous pouvez enfin créer une belle solution multi-navigateurs, sans javascript, pour une table avec un en-tête fixe et un contenu défilable. La hauteur de la tête peut même être dynamique.
CSS : Afficher sous forme de grille et définir le nombre de
template-rows
:HTML : Créez un conteneur de grille et le nombre de défini
rows
:Voici un exemple de travail:
CSS
HTML
la source
Je l'ai essayé en utilisant la transformation: translate . Bien que cela fonctionne bien dans Firefox et Chrome, il n'y a tout simplement aucune fonction dans IE11. Pas de double barre de défilement. Prend en charge le tableau tfoot et la légende. Javascript pur, pas de jQuery.
http://jsfiddle.net/wbLqzrfb/42/
la source
J'ai trouvé une solution sans jquery
HTML
CSS
Vous pouvez le voir fonctionner ici: https://jsfiddle.net/lexsoul/fqbsty3h
Source: https://medium.com/@vembarrajan/html-css-tricks-scroll-able-table-body-tbody-d23182ae0fbc
la source