J'aimerais avoir un tableau sur mon site Web. Le problème est que ce tableau aura environ 400 lignes. Comment puis-je limiter la hauteur de la table et lui appliquer une barre de défilement? Voici mon code:
<div class="span3">
<h2>Achievements left</h2>
<table class="table table-striped">
<thead>
<tr>
<th>#</th>
<th>Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Something</td>
</tr>
<tr>
<td>2</td>
<td>Something</td>
</tr>
<tr>
<td>3</td>
<td>Something</td>
</tr>
<tr>
<td>4</td>
<td>Something</td>
</tr>
<tr>
<td>5</td>
<td>Something</td>
</tr>
<tr>
<td>6</td>
<td>Something</td>
</tr>
</tbody>
</table>
<p><a class="btn" href="#">View details »</a></p>
</div>
J'ai essayé d'appliquer une hauteur maximale et une hauteur fixe à la table, mais cela ne fonctionne pas.
twitter-bootstrap
pangi
la source
la source
overflow
uniquement sur le corps du tableau mais où les<thead>
parties sont toujours affichées?Vous voudrez l'envelopper dans son propre div ou donner à ce span3 un identifiant qui lui est propre afin de ne pas affecter votre mise en page entière.
Voici un violon: http://jsfiddle.net/zm6rf/
la source
.span3
affectera tous lesspan3
éléments de l'ensemble de votre site basé sur Bootstrap.Pas besoin de l'envelopper dans un div ...
CSS :
Bootply : http://www.bootply.com/AgI8LpDugl
la source
td
élément varient en taille. bootply.com/OsvzINuTUAJ'ai eu le même problème et j'ai utilisé une combinaison des solutions ci-dessus (et j'ai ajouté une touche de ma part). Notez que j'ai dû spécifier les largeurs de colonne pour les garder cohérentes entre l'en-tête et le corps.
Dans ma solution, l'en-tête et le pied de page restent fixes pendant que le corps défile.
Et puis juste appliqué le CSS suivant:
J'espère que ça aidera quelqu'un d'autre.
la source
J'ai récemment dû faire cela avec bootstrap et angularjs, j'ai créé une directive angularjs qui résout le problème, vous pouvez voir un exemple de travail et des détails sur ce billet de blog .
Vous l'utilisez simplement en ajoutant un attribut d'en-tête fixe à la balise table:
Si vous n'utilisez pas angularjs, vous pouvez modifier le javascript de la directive et l'utiliser directement à la place.
la source
CSS
HTML
la source
.table-class-name { height: 100%; }
.Ce n'est peut-être pas une solution pour un grand nombre de lignes. J'utilise simplement l'astuce de la table de duplication pour faire le travail pour une petite table de comptage de lignes tout en conservant une largeur de colonne flexible, vous pouvez essayer ce violon .
(La colonne à largeur fixe est la méthode que j'utilise pour les grandes tables de comptage de lignes qui ne nécessitent que la duplication de lignes d'en-tête)
Exemple de code:
la source
Mettez la table dans un div et donnez ce div à la classe
pre-scrollable
.la source
J'ai récemment eu un problème similaire et j'ai fini par le résoudre en utilisant un mélange de différentes solutions.
La première et la plus simple consistait à utiliser deux tables, une pour les en-têtes et une pour le corps. Cela fonctionne mais les en-têtes et les colonnes du corps ne sont pas alignés. Et comme je voulais utiliser la taille automatique fournie avec les tables de bootstrap Twitter, j'ai fini par créer une fonction Javascript qui change les en-têtes lorsque: le corps est rendu; les fenêtres sont redimensionnées; les données de la colonne changent, etc.
Voici une partie du code que j'ai utilisé:
Les en-têtes et le corps sont divisés en deux tableaux distincts. L'un d'eux se trouve à l'intérieur d'un DIV avec le style nécessaire pour générer les barres de défilement verticales. Voici le CSS que j'ai utilisé:
J'ai commenté la hauteur ici parce que je voulais que le tableau atteigne le bas de la page, quelle que soit la hauteur de la page.
Les attributs de tri de données que j'ai utilisés dans les en-têtes sont également utilisés dans chaque td. De cette façon, je pourrais obtenir la largeur et le remplissage de chaque td et la largeur de la ligne. En utilisant les attributs de tri de données que j'ai définis en utilisant CSS, le remplissage et la largeur de chaque en-tête en conséquence et de la ligne d'en-tête qui est toujours plus grande car elle n'a pas de barre de défilement. Voici la fonction utilisant coffeescript:
Ici, je suppose que vous avez un tableau des en-têtes appelés @headers.
Ce n'est pas joli mais ça marche. J'espère que ça aide quelqu'un.
la source
Toutes les solutions ci-dessus font défiler l'en-tête du tableau aussi ... Si vous ne voulez faire défiler que le corps, appliquez ceci:
la source
Aucune de ces réponses n'a fonctionné de manière satisfaisante pour moi. Soit ils n'ont pas fixé la ligne d'en-tête du tableau en place, soit ils ont besoin de largeurs de colonne fixes pour fonctionner, et même dans ce cas, la ligne d'en-tête et les lignes de corps sont mal alignées dans divers navigateurs.
Je recommande de mordre la balle et d'utiliser un contrôle de grille approprié comme jsGrid ou mon favori personnel, SlickGrid . Cela introduit évidemment une dépendance, mais si vous voulez que vos tables se comportent comme de vraies grilles avec la prise en charge de plusieurs navigateurs, cela vous évitera de vous arracher les cheveux. Il vous donne également la possibilité de trier et de redimensionner les colonnes ainsi que des tonnes d'autres fonctionnalités si vous les souhaitez.
la source
Concernant la suggestion de Jonathan Wood. Je n'ai pas la possibilité d'encapsuler les tables avec un nouveau div car j'utilise un CMS. En utilisant JQuery, voici ce que j'ai fait:
Cela enveloppe les éléments de table avec un nouveau div avec la classe "table-overflow".
Vous pouvez ensuite simplement ajouter la définition suivante dans votre fichier css:
la source
placez le tableau à l'intérieur du div pour créer un tableau déroulant verticalement. changer
overflow-y
pouroverflow-x
faire défiler le tableau horizontalement. justeoverflow
pour rendre le tableau déroulant à la fois horizontalement et verticalement.la source
Je pensais que je publierais ici car je ne pouvais pas faire fonctionner l'un des éléments ci-dessus avec Bootstrap 4. J'ai trouvé cela en ligne et j'ai parfaitement fonctionné pour moi ...
J'ai également joint le fichier jsfindle.
https://jsfiddle.net/jgngg28t/
J'espère que cela aide quelqu'un d'autre.
la source