115 votes

Dimensionnement des colonnes du tableau

Sur Bootstrap 3 Je pourrais appliquer col-sm-xx à la th dans les thead et redimensionner les colonnes des tableaux à volonté. Cependant, cela ne fonctionne pas dans bootstrap 4. Comment puis-je réaliser quelque chose comme cela dans bootstrap 4 ?

<thead>
<th class="col-sm-3">3 columns wide</th>
<th class="col-sm-5">5 columns wide</th>
<th class="col-sm-4">4 columns wide</th>
</thead>

En regardant le codeply fourni, il ne se dimensionne pas correctement, surtout si vous ajoutez des données au tableau. Voyez comment cela fonctionne :

<div class="container" style="border: 1px solid black;">
    <table class="table table-bordered">
    <thead>
        <tr class="row">
            <th class="col-sm-3">3 columns wide</th>
            <th class="col-sm-5">5 columns wide</th>
            <th class="col-sm-4">4 columns wide</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>123</td>
            <td>456</td>
            <td>789</td>
        </tr>
    </tbody>
</table>
</div>

1 votes

En complément de cette question : si vous avez du contenu long (comme de très longues URL) à afficher, les tableaux bootstrap 4 ne sont pas une bonne solution, même avec la réponse sur le dimensionnement ci-dessous. l'utilisation d'une solution flex-row ou row/col a tendance à mieux fonctionner avec overflow et text-wrap.

179voto

Skelly Points 27772

Mis à jour en 2018

Assurez-vous que votre table comprend le table classe. Cela s'explique par le fait que Les tableaux de Bootstrap 4 sont "opt-in". donc le table doit être ajoutée intentionnellement au tableau.

http://codeply.com/go/zJLXypKZxL

Bootstrap 3.x disposait également de CSS pour réinitialiser les cellules des tableaux afin qu'elles ne flottent pas

table td[class*=col-], table th[class*=col-] {
    position: static;
    display: table-cell;
    float: none;
}

Je ne sais pas pourquoi cela ne fait pas partie de Bootstrap 4 alpha, mais il se peut que cela soit ajouté dans la version finale. L'ajout de cette feuille de style CSS permettra à toutes les colonnes d'utiliser les largeurs définies dans le champ thead ..

Démonstration de Bootstrap 4 Alpha 2


MISE À JOUR (à partir de Bootstrap 4.0.0)

Maintenant que Bootstrap 4 est flexbox, les cellules du tableau ne prendront pas la largeur correcte lorsque l'on ajoute col-* . Une solution de contournement consiste à utiliser l'option d-inline-block sur les cellules du tableau pour empêcher l'affichage par défaut:flex des colonnes.

Une autre option dans BS4 est d'utiliser les classes d'outils de dimensionnement pour la largeur...

<thead>
     <tr>
           <th class="w-25">25</th>
           <th class="w-50">50</th>
           <th class="w-25">25</th>
     </tr>
</thead>

Démonstration de Bootstrap 4 Alpha 6

Enfin, vous pouvez utiliser d-flex sur les rangées du tableau (tr), et le bouton col-* classes de grille sur les colonnes (th,td)...

<table class="table table-bordered">
        <thead>
            <tr class="d-flex">
                <th class="col-3">25%</th>
                <th class="col-3">25%</th>
                <th class="col-6">50%</th>
            </tr>
        </thead>
        <tbody>
            <tr class="d-flex">
                <td class="col-sm-3">..</td>
                <td class="col-sm-3">..</td>
                <td class="col-sm-6">..</td>
            </tr>
        </tbody>
    </table>

Bootstrap 4.0.0 (stable) Demo

Note : Changer le TR en display:flex peut modifier les frontières

1 votes

En fait, ça n'a pas la bonne taille. Vérifiez si vous ajoutez des bordures pour voir comment le dimensionnement se fait et quand vous ajoutez une ligne au corps. J'ai mis le code dans la question

0 votes

En fait, votre exemple BS4-A6 ne fonctionne pas si le contenu d'une colonne déborde, car les autres colonnes ne sont pas étendues. Essayez de coller un lorem ipsum dans une colonne.

1 votes

Votre solution a fonctionné. Dans mon cas, j'ai eu besoin d'ajouter des no-gutters dans le tr pour éviter le remplissage négatif jsfiddle.net/Vimalan/xhvdcasn

31voto

Jacob van Lingen Points 933

Une autre option est d'appliquer un style flexible à la ligne du tableau, et d'ajouter l'élément col-classes à l'en-tête du tableau / aux éléments de données du tableau :

<table>
  <thead>
    <tr class="d-flex">
      <th class="col-3">3 columns wide header</th>
      <th class="col-sm-5">5 columns wide header</th>
      <th class="col-sm-4">4 columns wide header</th>
    </tr>
  </thead>
  <tbody>
    <tr class="d-flex">
      <td class="col-3">3 columns wide content</th>
      <td class="col-sm-5">5 columns wide content</th>
      <td class="col-sm-4">4 columns wide content</th>
    </tr>
  </tbody>
</table>

1 votes

Fonctionne mais vertical-align: middle ne fonctionne plus avec d-flex classe.

0 votes

L'alignement vertical ne fonctionne effectivement pas sur la mise en page flexbox. Utilisez align-items: baseline . Pour en savoir plus sur la flexbox, lisez ceci guide

0 votes

C'est exactement LA solution. Merci.

7voto

Abdalla Arbab Points 547

Avertissement : Cette réponse peut être un peu ancienne. Depuis la bêta de Bootstrap 4. Bootstrap a changé depuis.

La classe de taille des colonnes de la table a été modifiée comme suit

<th class="col-sm-3">3 columns wide</th>

à

<th class="col-3">3 columns wide</th>

0 votes

Cela ne semble pas fonctionner pour définir la largeur des colonnes : codeply.com/go/Utyon2XEB6

0 votes

1 votes

L'autre question n'est pas liée. La largeur des colonnes ne fonctionne pas sur les cellules des tableaux à cause de la flexbox BS4 alpha 6 comme expliqué dans ma réponse.

6voto

jorge santos Points 71

Je peux résoudre ce problème avec le code suivant en utilisant Bootstrap 4 :

<table class="table">
  <tbody>
    <tr class="d-flex">
      <th class="col-3" scope="row">Indicador:</th>
      <td class="col-9">this is my indicator</td>
    </tr>

    <tr class="d-flex">
      <th class="col-3" scope="row">Definición:</th>
      <td class="col-9">This is my definition</td>
    </tr>

  </tbody>
</table>

1voto

Florian Körner Points 11

À partir d'Alpha 6, vous pouvez créer le fichier sass suivant :

@each $breakpoint in map-keys($grid-breakpoints) {
  $infix: breakpoint-infix($breakpoint, $grid-breakpoints);

  col, td, th {
    @for $i from 1 through $grid-columns {
        &.col#{$infix}-#{$i} {
          flex: none;
          position: initial;
        }
    }

    @include media-breakpoint-up($breakpoint, $grid-breakpoints) {
      @for $i from 1 through $grid-columns {
        &.col#{$infix}-#{$i} {
          width: 100% / $grid-columns * $i;
        }
      }
    }
  }
}

0 votes

Ce code ne fonctionne pas du tout - j'ai essayé de le déboguer pendant 1,5 heure mais mes connaissances de sass sont trop faibles pour le faire. Veuillez poster des exemples de travail la prochaine fois.

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