Est-il possible d’ajouter une barre de défilement horizontale à un tableau HTML? En fait, j'ai besoin que le défilement soit verticalement et horizontalement, en fonction de la croissance du tableau, mais je ne parviens pas à faire apparaître une barre de défilement.
Avez-vous essayé la propriété CSS overflow
?
overflow: scroll; /* Scrollbar are always visible */
overflow: auto; /* Scrollbar is displayed as it's needed */
METTRE À JOUR
Comme le soulignent les autres utilisateurs, cela ne suffit pas pour ajouter les barres de défilement.
Alors, s'il vous plaît, voir et faire voter les commentaires et les réponses ci-dessous.
display: block
de votre tablepuis définissez overflow-x:
sur auto
.
table {
display: block;
overflow-x: auto;
white-space: nowrap;
}
Agréable et propre. Pas de formatage superflu.
Voici des exemples plus compliqués avec des légendes de tableau défilantes d'une page de mon site Web.
Enveloppez la table dans une DIV, définie avec le style suivant:
div.wrapper {
width: 500px;
height: 500px;
overflow: auto;
}
Utilisez pour cela l’attribut CSS " overflow ".
Court résumé:
overflow: visible|hidden|scroll|auto|initial|inherit;
par exemple.
table {
display: block;
overflow: scroll;
}
Je courais dans le même problème. J'ai découvert la solution suivante, qui n'a été testée que dans Chrome v31:
table {
table-layout: fixed;
}
tbody {
display: block;
overflow: scroll;
}
Je ne pouvais obtenir aucune des solutions ci-dessus au travail. Cependant, j'ai trouvé un hack:
body {
background-color: #ccc;
}
.container {
width: 300px;
background-color: white;
}
table {
width: 100%;
border-collapse: collapse;
}
td {
border: 1px solid black;
}
/* try removing the "hack" below to see how the table overflows the .body */
.hack1 {
display: table;
table-layout: fixed;
width: 100%;
}
.hack2 {
display: table-cell;
overflow-x: auto;
width: 100%;
}
<div class="container">
<div class="hack1">
<div class="hack2">
<table>
<tr>
<td>table or other arbitrary content</td>
<td>that will cause your page to stretch</td>
</tr>
<tr>
<td>uncontrollably</td>
<td>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</td>
</tr>
</table>
</div>
</div>
</div>
Ceci est une amélioration de la réponse de { Serge Stroobandt } _ et fonctionne parfaitement. Cela résout le problème du tableau ne remplissant pas toute la largeur de la page s'il y a moins de colonnes.
<style>
.table_wrapper{
display: block;
overflow-x: auto;
white-space: nowrap;
}
</style>
<div class="table_wrapper">
<table>
...
</table>
</div>
J'ai trouvé cette réponse basée sur solution précédente et son commentaire et ajouté quelques ajustements de ma propre Cela fonctionne pour moi sur la table sensible.
table {
display: inline-block;
overflow-x: auto;
white-space: nowrap;
// make fixed table width effected by overflow-x
max-width: 100%;
// hide all borders that make rows not filled with the table width
border: 0;
}
// add missing borders
table td {
border: 1px solid;
}
J'ai eu un bon succès avec la solution proposée par @Serge Stroobandt, mais j'ai rencontré le problème rencontré par @ Shevy avec les cellules qui ne remplissaient alors pas toute la largeur de la table. J'ai pu résoudre ce problème en ajoutant quelques styles à la tbody
.
table {
display: block;
overflow-x: auto;
white-space: nowrap;
}
table tbody {
display: table;
width: 100%;
}
Cela a fonctionné pour moi dans Firefox, Chrome et Safari sur Mac.
Le «plus de 100% de largeur» sur la table a vraiment fonctionné pour moi.
.table-wrap {
width: 100%;
overflow: auto;
}
table {
table-layout: fixed;
width: 200%;
}