164 votes

Tableau défilant Twitter bootstrap

Je voudrais avoir un tableau sur mon site web. Le problème est que ce tableau comptera environ 400 lignes. Comment puis-je limiter la hauteur du tableau 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 &raquo;</a></p>
</div>

J'ai essayé d'appliquer une hauteur maximale et une hauteur fixe à la table, mais cela ne fonctionne pas.

265voto

Jonathan Wood Points 26443

Les éléments de tableau ne semblent pas prendre en charge cette fonction directement. Placez le tableau dans une div, définissez la hauteur de la div et définissez overflow: auto .

55 votes

Est-ce que ça a vraiment marché ? J'ai essayé et ça n'a pas eu d'effet du tout.

9 votes

Pour votre information, le fait de définir le paramètre overflow sur "auto", plutôt que sur overflow:scroll, ne créera pas de barre de défilement horizontale redondante.

2 votes

@NishchitDhanani : Vous devez envelopper le tableau dans un div et définir le débordement sur le div.

57voto

Chords Points 2416
.span3 {  
    height: 100px !important;
    overflow: scroll;
}

Vous devrez l'intégrer dans son propre div ou donner à ce span3 un id propre afin de ne pas affecter toute la mise en page.

Voici un violon : http://jsfiddle.net/zm6rf/

4 votes

Notez que le "!important" n'est pas important ;)

8 votes

Attention, la définition de ces propriétés pour .span3 affectera tous span3 sur l'ensemble de votre site basé sur Bootstrap.

0 votes

Je ne l'ai appliqué qu'à un span3 spécifique. Est-il possible de conserver la hauteur relative et d'avoir une barre de défilement à côté du tableau ?

44voto

TheLittlePig Points 6229

Pas besoin de l'envelopper dans un div...

CSS :

tr {
width: 100%;
display: inline-table;
table-layout: fixed;
}

table{
 height:300px;              // <-- Select the height of the table
 display: -moz-groupbox;    // Firefox Bad Effect
}
tbody{
  overflow-y: scroll;      
  height: 200px;            //  <-- Select the height of the body
  width: 100%;
  position: absolute;
}

Bootply : http://www.bootply.com/AgI8LpDugl

0 votes

J'ai été très enthousiaste lorsque j'ai vu cet exemple, mais il s'avère que la mise en page est " funkée " lorsque les données dans le fichier td Les éléments varient en taille. bootply.com/OsvzINuTUA

5 votes

@Frito Ne vous inquiétez pas, soyez heureux ;) J'ai juste oublié table-layout : fixed ; ... Lien mis à jour

36voto

Todd Points 106

J'ai eu le même problème et j'ai utilisé une combinaison des solutions ci-dessus (et j'ai ajouté une touche personnelle). Notez que j'ai dû spécifier la largeur des colonnes pour qu'elles restent cohérentes entre l'en-tête et le corps du texte.

Dans ma solution, l'en-tête et le pied de page restent fixes tandis que le corps défile.

<div class="table-responsive">
    <table class="table table-striped table-hover table-condensed">
        <thead>
            <tr>
                <th width="25%">First Name</th>
                <th width="13%">Last Name</th>
                <th width="25%" class="text-center">Address</th>
                <th width="25%" class="text-center">City</th>
                <th width="4%" class="text-center">State</th>
                <th width="8%" class="text-center">Zip</th>
            </tr>
        </thead>
    </table>
    <div class="bodycontainer scrollable">
        <table class="table table-hover table-striped table-condensed table-scrollable">
            <tbody>
                <!-- add rows here, specifying same widths as in header, at least on one row -->
            </tbody>
        </table>
    </div>
    <table class="table table-hover table-striped table-condensed">
        <tfoot>
            <!-- add your footer here... -->
        </tfoot>
    </table>
</div>

Et puis j'ai appliqué le CSS suivant :

.bodycontainer { max-height: 450px; width: 100%; margin: 0; overflow-y: auto; }
.table-scrollable { margin: 0; padding: 0; }

J'espère que cela aidera quelqu'un d'autre.

0 votes

Merci, ça aide. Malheureusement, je ne peux pas spécifier la largeur de ces éléments car ce n'est pas un élément valide. ( ???)

1 votes

Les colonnes du td ne sont pas alignées avec les éléments th car la barre de défilement déplace le contenu.

0 votes

Ahh... Je suis sur un Mac où les barres de défilement sont invisibles et n'apparaissent au-dessus du contenu que pendant le défilement. Ce sera difficile, car les barres de défilement dépendent du système d'exploitation et du navigateur.

10voto

Terry Points 7652

CSS

.achievements-wrapper { height: 300px; overflow: auto; }

HTML

<div class="span3 achievements-wrapper">
    <h2>Achievements left</h2>
    <table class="table table-striped">
    ...
    </table>
</div>

0 votes

Est-il possible de garder la hauteur relative ?

0 votes

Je veux que la hauteur soit réglée en pourcentage. Est-ce possible ? Je n'ai pas réussi à le faire fonctionner.

0 votes

Bien sûr, il suffit de définir la hauteur de la table à 100%. .table-class-name { height: 100%; } .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X