114 votes

Comment spécifier la hauteur d'une table de sorte qu'une barre de défilement verticale apparaisse ?

J'ai un tableau avec de nombreuses lignes sur ma page. J'aimerais définir la hauteur du tableau, disons 500px, de sorte que si la hauteur du tableau est plus grande que cela, une barre de défilement verticale apparaîtra. J'ai essayé d'utiliser l'attribut CSS height sur le table, mais cela ne fonctionne pas.

1 votes

Peut-être utiliser max-height au lieu de simplement height car ce dernier forcera la hauteur de la table à être 500px

3 votes

Vous voudrez peut-être poser une deuxième question, concernant le maintien de la ligne d'en-tête en position fixe lors du défilement. ;)

0 votes

191voto

AgentConundrum Points 10107

Essayez d'utiliser la propriété CSS overflow. Il existe également des propriétés distinctes pour définir le comportement du débordement horizontal (overflow-x) et vertical (overflow-y).

Puisque vous ne souhaitez que le défilement vertical, essayez ceci :

table {
  height: 500px;
  overflow-y: scroll;
}

ÉDITER :

Apparemment les éléments ``overflow`

ne respectent pas la propriété . Cela semble être parce que les éléments ne sont pas rendus comme display: block``overflow

par défaut (ils ont en fait leur propre type d'affichage). Vous pouvez forcer la propriété à fonctionner en définissant l'élément comme un type de block :

table {
  display: block;
  height: 500px;
  overflow-y: scroll;
}

Notez que cela fera en sorte que l'élément ait une largeur de 100%, donc si vous ne voulez pas qu'il prenne toute la largeur horizontale de l'élément conteneur, vous devez spécifier une largeur explicite pour l'élément également.

4 votes

Cela ne limite toutefois pas la hauteur.

0 votes

@Fred: Je pensais que c'était implicite, mais tu as raison. J'ai ajouté explicitement une propriété height à mon exemple.

7 votes

Non, c'est le cas, il vous suffit juste de mettre display:block sur le tableau pour le faire se comporter comme un div jsfiddle.net/TSGSA/1

66voto

Dark Falcon Points 15609

Vous devez envelopper la table à l'intérieur d'un autre élément et définir la hauteur de cet élément. Exemple avec du css en ligne :

9 votes

Cela ne permettra pas de maintenir le thead en place pendant que le tbody défile.

24 votes

Cette exigence ne se trouve pas dans la question initiale.

2 votes

Aussi, l'autre réponse (acceptée) ne conserve pas non plus la balise thead en place.

11voto

eneski Points 764

Aucune de ces solutions n'a fonctionné. Cependant, j'ai utilisé la solution flex de Bootstrap et ça a fonctionné

table, td {
  border: 1px solid black;
}
th {
  border-left: 1px solid black;
}

table {
  border-collapse: collapse;
  width: 100%;
}

table {
    display: flex;
    flex-flow: column;
    width: 100%;
    height: 400px;

}

thead {
    padding-right: 13px;
    flex: 0 0 auto;
}

tbody {
    flex: 1 1 auto;
    display: block;
    overflow-y: auto;
    overflow-x: hidden;
}

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

    Prénom
    Nom
    Économies

    Pierre
    Griffin
    100 $

    Lois
    Griffin
    150 $

    Joe
    Swanson
    300 $

    Cleveland
    Brown
    250 $

    Peter
    Griffin
    100 $

    Lois
    Griffin
    150 $

    Joe
    Swanson
    300 $

    Cleveland
    Brown
    250 $

    Peter
    Griffin
    100 $

    Lois
    Griffin
    150 $

    Joe
    Swanson
    300 $

    Cleveland
    Brown
    250 $

    Peter
    Griffin
    100 $

    Lois
    Griffin
    150 $

    Joe
    Swanson
    300 $

    Cleveland
    Brown
    250 $

    Peter
    Griffin
    100 $

    Lois
    Griffin
    150 $

    Joe
    Swanson
    300 $

    Cleveland
    Brown
    250 $

    Peter
    Griffin
    100 $

    Lois
    Griffin
    150 $

    Joe
    Swanson
    300 $

    Cleveland
    Brown
    250 $

    Peter
    Griffin
    100 $

    Lois
    Griffin
    150 $

    Joe
    Swanson
    300 $

    Cleveland
    Brown
    250 $

4voto

Stephen Reed Points 47

CSS propose également un tableau HTML avec une hauteur fixe. Il définit la hauteur du tbody HTML à 400 pixels et le tbody HTML défiler lorsque celui-ci est plus grand, en conservant le thead HTML comme un élément fixe.

De plus, chaque cellule th de l'en-tête et chaque cellule td du corps doivent être stylisées pour la largeur fixe désirée.

#the-table {
  display: block;
  background: white; /* facultatif */
}

#the-table thead {
  text-align: left; /* facultatif */
}

#the-table tbody {
  display: block;
  max-height: 400px;
  overflow-y: scroll;
}

1voto

krupesh Anadkat Points 464

Pour définir la hauteur du tableau, vous devez d'abord définir la propriété css "display: block" puis vous pouvez ajouter les propriétés "largeur/hauteur". Je trouve cet article de Mozilla très utile pour apprendre comment styliser les tableaux : Lien

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