Ajouter une barre de défilement horizontale au tableau html

142

Existe-t-il un moyen d'ajouter une barre de défilement horizontale à un tableau HTML? En fait, j'ai besoin qu'il puisse faire défiler verticalement et horizontalement en fonction de la croissance de la table, mais je ne peux pas faire apparaître l'une ou l'autre barre de défilement.

Tsundoku
la source
3
... pensé à mettre la table entière dans un div? ... puis ajouter un défilement au div?
vecteur
3
Peut-être qu'il est temps de changer quelle réponse pour être la réponse acceptée?
Serge Stroobandt

Réponses:

82

Avez-vous essayé la overflowpropriété CSS ?

overflow: scroll; /* Scrollbar are always visible */
overflow: auto;   /* Scrollbar is displayed as it's needed */

MISE
À JOUR Comme le soulignent d'autres utilisateurs, cela ne suffit pas pour ajouter les barres de défilement.
Alors s'il vous plaît, voyez et votez pour les commentaires et les réponses ci-dessous.

pasine
la source
15
D'après mes propres tentatives et tout ce que j'ai lu sur Internet, cela ne fonctionnera tout simplement pas. Vous pouvez surcharger un élément wrapper, bien sûr, mais pas la table elle-même.
bloudermilk
21
@bloudermilk Vous pouvez si vous ajoutez display: block.
Cees Timmerman
244

Tout d'abord, faites display: blockde votre table

puis réglez overflow-x:sur auto.

table {
    display: block;
    overflow-x: auto;
    white-space: nowrap;
}

Agréable et propre. Pas de mise en forme superflue.

Voici des exemples plus complexes avec des légendes de tableau défilant à partir d'une page de mon site Web.

Serge Stroobandt
la source
3
Cela fonctionne pour moi dans Chrome, mais seulement après avoir tout écrasé. white-space: nowrap;aide à voir immédiatement la barre de défilement.
Cees Timmerman
28
J'ai déjà essayé cela avant. Le seul problème était que les cellules du tableau ne remplissaient plus toute la largeur du tableau.
Shevy
4
Comme d'autres l'ont dit, cela ne fonctionne pas correctement: les lignes du tableau ne remplissent pas la largeur du tableau.
collimarco
1
@SergeStroobandt non, dans mon cas, white-space: nowrap;ne résout pas le problème (testé sur Firefox). La largeur des lignes est inférieure à la largeur du tableau lorsqu'il n'y a pas assez de contenu (texte) pour développer les lignes.
collimarco
3
@collimarco Remarque J'ai dû utiliser max-width: 100% pour l'option inline-block.
dogoncouch
40

Enveloppez le tableau dans un DIV, défini avec le style suivant:

div.wrapper {
  width: 500px;
  height: 500px;
  overflow: auto;
}
Colin M
la source
8
Il semble que l' overflow:autoici n'est pas nécessaire. Savez-vous de toute façon y parvenir sans régler la largeur ... cela semble toujours être la solution en html - coder en dur une certaine largeur ou hauteur mais cela semble vaincre l'intérêt d'avoir un moteur de mise en page!
JonnyRaa
17

Utilisez l'attribut CSS " overflow " pour cela.

Court résumé:

overflow: visible|hidden|scroll|auto|initial|inherit;

par exemple

table {
    display: block;
    overflow: scroll;
}
Roger Willcocks
la source
lien fourni est cassé
justingordon
12

J'ai eu un bon succès avec la solution proposée par @Serge Stroobandt, mais j'ai rencontré le problème que @Shevy avait avec les cellules alors ne remplissant pas toute la largeur du tableau. J'ai pu résoudre ce problème en ajoutant des styles au fichier 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.

Mary7678
la source
10

Je n'ai pas réussi à faire fonctionner l'une des solutions ci-dessus. 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>

mpen
la source
Rien de ce qui précède n'a fonctionné pour moi non plus, mais cela a fonctionné. Gentil, merci.
Gábriel
@ Gábriel Heureux que cela ait fonctionné pour vous. Je l'ai essayé à nouveau tout à l'heure dans Firefox et il ne semble pas être rendu correctement :-( i.imgur.com/BcjSaCV.png Chrome a toujours l'air bien.
mpen
1
Étrange; Je l'utilisais exactement sur Firefox et cela fonctionnait là-bas - mais pas dans cette configuration exacte. Je voulais rendre une grande grille composée de divs 10 x 10 px avec des bordures réduites et la largeur maxed-out + le overflow-x: auto semblait être la clé. Avec ceux en place, tout avait l'air parfait. De plus, je n'utilise pas du tout <table>, uniquement des divs, avec display: table, table-row et table-cell.
Gábriel
10

Ceci est une amélioration de la réponse de Serge Stroobandt et fonctionne parfaitement. Cela résout le problème du tableau qui ne remplit pas toute la largeur de la page s'il contient moins de colonnes.

<style> 
 .table_wrapper{
    display: block;
    overflow-x: auto;
    white-space: nowrap;
}
</style>

<div class="table_wrapper">
<table>
...
</table>
</div>
ochomoswill
la source
2
Le white-space: nowrap;semble être facultatif.
Mike Shiyan
8

Je rencontrais 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;
}
Josh
la source
2

J'ai compris cette réponse en me basant sur la solution précédente et c'est un commentaire et j'ai ajouté quelques ajustements de ma part. Cela fonctionne pour moi sur la table réactive.

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;
}
George
la source
@Saeed Voulez-vous dire quelque chose comme la structure html?
George
Mon mauvais, je veux dire ajouter plus d'explications, pour aider à mieux le comprendre
Mastisa
J'espère que cette version est plus clarifiée.
George
1

La `` largeur supérieure à 100% '' sur la table a vraiment fonctionné pour moi.

.table-wrap {
    width: 100%;
    overflow: auto;
}

table {
    table-layout: fixed;
    width: 200%;
}

Peps
la source
-2
//Representation of table
<div class="search-table-outter">
<table class="table table-responsive search-table inner">
</table>
</div>

//Css to make Horizontal Dropdown

<style>

    .search-table{table-layout: auto; margin:40px auto 0px auto; }
    .search-table, td, th {
        border-collapse: collapse;
    }
th{padding:20px 7px; font-size:15px; color:#444;}
td{padding:5px 10px; height:35px;}
    .search-table-outter { overflow-x: scroll; }
th, td { min-width: 200px; }


</style>
goel kinzzy
la source
L'indentation et les exemples de données vous aideront si vous avez l'intention de faire une démonstration. Aussi, vouliez-vous dire "barre de défilement" au lieu de "liste déroulante"?
Cees Timmerman