J'essaie de créer un tableau avec un en-tête fixe et un contenu déroulant en utilisant le tableau bootstrap 3. Malheureusement, les solutions que j'ai trouvées ne fonctionnent pas avec bootstrap ou gâchent le style.
Ici, il y a un simple tableau bootstrap, mais pour une raison inconnue, la hauteur du corps n'est pas de 10px.
height: 10px !important; overflow: scroll;
Exemple:
<link rel="stylesheet" type="text/css" href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css">
<table class="table table-striped">
<thead>
<tr>
<th>Make</th>
<th>Model</th>
<th>Color</th>
<th>Year</th>
</tr>
</thead>
<tbody style="height: 10px !important; overflow: scroll; ">
<tr>
<td class="filterable-cell">111 Ford</td>
<td class="filterable-cell">Escort</td>
<td class="filterable-cell">Blue</td>
<td class="filterable-cell">2000</td>
</tr>
<tr>
<td class="filterable-cell">Ford</td>
<td class="filterable-cell">Escort</td>
<td class="filterable-cell">Blue</td>
<td class="filterable-cell">2000</td>
</tr>
<tr>
<td class="filterable-cell">Ford</td>
<td class="filterable-cell">Escort</td>
<td class="filterable-cell">Blue</td>
<td class="filterable-cell">2000</td>
</tr>
<tr>
<td class="filterable-cell">Ford</td>
<td class="filterable-cell">Escort</td>
<td class="filterable-cell">Blue</td>
<td class="filterable-cell">2000</td>
</tr>
</tbody>
</table>
html
css
twitter-bootstrap
html-table
giulio
la source
la source
Réponses:
Tête de table fixe - CSS uniquement
Simplement
position: sticky; top: 0;
vosth
éléments. (Chrome, FF, Edge)Résolution du problème des frontières TH
Puisqu'il
border
ne peut pas être peint correctement sur unTH
élément traduit , pour recréer et rendre des "bordures", utilisez labox-shadow
propriété:Afficher l'extrait de code
Tête de table fixe - utilisant JS. (C'EST À DIRE)
Vous pouvez utiliser un peu de JS et traduire les
th
élémentsExemple jQuery
Ou plaine ES6 si vous préférez (pas de jQuery requis):
la source
Vous obtiendrez probablement plusieurs tableaux sur une seule page, vous avez donc besoin de classes CSS. Veuillez trouver une solution modifiée de @ giulio pour cela.
Déclarez-le simplement dans le tableau:
CSS
Sachez que l'implémentation actuelle ne convient qu'à cinq colonnes. Si vous avez besoin d'un nombre différent, modifiez le paramètre de largeur de 20% à * 100% / nombre_de_colonnes *.
la source
.header-fixed > thead > tr > th{white-space: nowrap;}
. Si les en-têtes commencent à envelopper, cela gâche les chosesscrollbar-width: none;
à tbody pour des raisons esthétiquesVoici la solution de travail:
Lien vers jsfiddle
la source
Mettre à jour
Pour une bibliothèque plus récente et toujours maintenue, essayez plutôt jquery.floatThead (comme mentionné par Bob Jordan dans le commentaire) .
Ancienne réponse
Ceci est une réponse très ancienne, la bibliothèque mentionnée ci-dessous n'est plus maintenue.
J'utilise StickyTableHeaders sur GitHub et cela fonctionne comme un charme!
J'ai dû ajouter ce CSS pour que l'en-tête ne soit pas transparent.
la source
.tableFloatingHeaderOriginal { //css }
.Pas besoin de l'envelopper dans une div ...
CSS :
Bootply : http://www.bootply.com/AgI8LpDugl
la source
position: absolute
surtbody
aidé !! Merci !!C'est plus facile avec css
la source
table-layout:fixed
en ajoutant une classe CSS avec JavaScriptTard dans la soirée (Histoire de ma vie), mais comme c'est le premier résultat sur Google, et rien de ce qui précède ne m'a fait travailler, voici mon code
la source
th:nth-child(2), td:nth-child(2)
équivaut àtr > :nth-child(2)
À mes yeux, l'un des meilleurs plugins pour jQuery est DataTables .
Il a également une extension pour en- tête fixe , et il est très facilement implémenté.
Tiré de leur site:
HTML:
JavaScript:
Mais le plus simple que vous puissiez avoir pour simplement faire défiler
<tbody>
est:la source
La dernière position d'addition: «collant» serait la solution la plus simple ici
la source
Vous n'avez pas besoin de js. L'important est de définir la hauteur de la table en [ vh ]
la source
J'ai eu beaucoup de mal à faire fonctionner la bibliothèque stickytableheaders. En faisant un peu plus de recherche, j'ai trouvé que floatThead est une alternative activement maintenue avec des mises à jour récentes et une meilleure documentation.
la source
Vous devriez essayer avec "display: block;" à tbody, parce que maintenant c'est inline-block et pour définir la hauteur, l'élément doit être "block"
la source
Ajoutez d'abord du balisage pour une table d'amorçage. Ici, j'ai créé une table rayée, mais j'ai également ajouté une classe de table personnalisée
.table-scroll
qui ajoute une barre de défilement verticale à la table et rend l'en-tête de table fixe lors du défilement vers le bas.css
la source
J'ai utilisé le plugin floatThead jQuery ( https://mkoryak.github.io/floatThead/#intro )
les documents disent que cela fonctionne avec les tables Bootstrap 3 et je peux dire que cela fonctionne aussi avec les tables Bootstrap 4 avec ou sans l'aide sensible aux tables.
L'utilisation du plugin est aussi simple que cela:
HTML (balisage du tableau d'amorçage vanilla)
Initialisation du plugin:
Clause de non-responsabilité complète: je ne suis en aucun cas associé au plugin. Je l'ai trouvé après des heures à essayer de nombreuses autres solutions publiées ici et ailleurs.
la source
Pour tout ce que ça vaut maintenant: j'ai posté une solution à un défilement de tableau de threads frères avec HTML et CSS qui
visibility
, pasdisplay
) l'en-tête du tableau inférieur et faire défiler le tableau inférieur w / dans un divLa solution est indépendante de tous les styles / cadres utilisés - alors peut-être qu'elle est utile ici aussi ...
Une longue description est dans le défilement du tableau avec HTML et CSS / le code est également dans ce stylo: https://codepen.io/sebredhh/pen/QmJvKy
la source
Pour les tables pleine hauteur (la page défile, pas la table)
Remarque: je déplace toute la
<thead>...</thead>
beause Dans mon cas, j'avais deux lignes (titre et filtres)Avec JS (jQuery)
CSS (juste pour le style)
la source
Maintenant que «tous» les navigateurs prennent en charge ES6, j'ai incorporé les diverses suggestions ci-dessus dans une classe JavaScript qui prend un tableau en argument et fait défiler le corps. Il permet au moteur de présentation du navigateur de déterminer les largeurs des cellules d'en-tête et de corps, puis fait correspondre les largeurs de colonne.
La hauteur d'une table peut être définie explicitement ou remplie pour remplir la partie restante de la fenêtre du navigateur et fournit des rappels pour des événements tels que le redimensionnement de la fenêtre et / ou l'
details
ouverture ou la fermeture d'éléments.La prise en charge des en-têtes à plusieurs lignes est disponible et est particulièrement efficace si la table utilise les attributs id / headers pour l'accessibilité, comme spécifié dans les directives WCAC , ce qui n'est pas une exigence aussi onéreuse que cela puisse paraître.
Le code ne dépend d'aucune bibliothèque, mais joue bien avec elles si elles sont utilisées. (Testé sur les pages qui utilisent JQuery).
Le code et l'exemple d'utilisation sont disponibles sur Github .
la source
Vous pouvez placer deux div où la 1ère div (en-tête) aura une barre de défilement transparente et la 2ème div aura des données avec une barre de défilement visible / automatique. L'échantillon contient un extrait de code angulaire pour parcourir les données.
Le code ci-dessous a fonctionné pour moi -
Style supplémentaire pour masquer la barre de défilement de l'en-tête -
la source
Voici mon stylo copen sur la façon de créer un en-tête de tableau fixe avec des lignes et des colonnes défilables. Les colonnes ont également été à largeur fixe, http://codepen.io/abhilashn/pen/GraJyp
la source
Solution plus propre (CSS uniquement)
la source
Prise en charge de plusieurs tables déroulantes dans une seule fenêtre.
CSS pur et non fixe ou collant.
Je recherche l'en-tête de table fixe avec une largeur "td" et "th" automatique depuis des années. Enfin j'ai codé quelque chose, ça marche bien pour moi mais je ne suis pas sûr que ça marche bien pour tout le monde.
Problème 1: Nous ne pouvons pas définir la hauteur de la table ou du corps alors que nous avons des tonnes de "tr" c'est à cause des propriétés de table par défaut.
Solution: définissez une propriété d'affichage sur la table.
Problème 2: Lorsque nous définissons une propriété d'affichage, la largeur des éléments "td" ne peut pas être égale à la largeur des éléments "th". Et il est difficile de remplir correctement les éléments dans un tableau pleine largeur comme 100%.
Solution: CSS "flex" est une très bonne solution pour les configurations de largeur et de remplissage, nous allons donc construire nos éléments tbody et thead avec CSS "flex".
jsfiddle
la source
la source
Utilisé ce lien, stackoverflow.com/a/17380697/1725764 , par Hashem Qolami dans les commentaires des articles d'origine et utilisé l'affichage: blocs en ligne au lieu de flotteurs. Fixe les bordures si la table a également la classe 'bordé par table'.
Il suffit ensuite d'ajouter les largeurs des td et th
la source
J'ai fait une sorte de solution CSS qui fonctionne un peu en utilisant
position: sticky
. Devrait fonctionner sur les navigateurs à feuilles persistantes. Essayez de redimensionner le navigateur. Il y a toujours un problème de mise en page dans FF, le corriger plus tard, mais au moins les en-têtes de table gèrent le défilement vertical et horizontal. Exemple de Codepenla source
HTML
CSS
la source
Un moyen simple sans largeur fixe:
La source
Maintenant, sur onLoad, pour ajuster les largeurs, ajoutez simplement ce script jquery:
la source
placez le tableau à l'intérieur du div comme ceci pour faire un tableau déroulant verticalement. changer
overflow-y
pouroverflow-x
faire défiler le tableau horizontalement. justeoverflow
pour faire défiler le tableau horizontalement et verticalement.la source
la source