Dimensionamento delle colonne della tabella


103

In Bootstrap 3, potrei applicare col-sm-xxai thtag nelle theadcolonne della tabella e ridimensionare a piacimento. Tuttavia questo non funziona in bootstrap 4. Come posso ottenere qualcosa di simile in 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>

Guardando il codice a condizione che non si ridimensiona correttamente, soprattutto se aggiungi alcuni dati alla tabella. Guarda come funziona:

<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
come addendum a questa domanda: se hai contenuti lunghi (come URL molto lunghi) per visualizzare le tabelle bootstrap 4 non sono una grande soluzione anche con la risposta di dimensionamento di seguito. l'utilizzo di una soluzione flex-row o row / col tende a funzionare meglio con overflow e text-wrap
Killerpixler

Risposte:


162

Aggiornato 2018

Assicurati che il tuo tavolo includa la tableclasse. Questo perché le tabelle Bootstrap 4 sono "opt-in", quindi la tableclasse deve essere aggiunta intenzionalmente alla tabella.

http://codeply.com/go/zJLXypKZxL

Bootstrap 3.x aveva anche un po 'di CSS per ripristinare le celle della tabella in modo che non fluttuassero.

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

Non so perché questo non sia Bootstrap 4 alpha, ma potrebbe essere aggiunto di nuovo nella versione finale. L'aggiunta di questo CSS aiuterà tutte le colonne a utilizzare le larghezze impostate in thead..

Bootstrap 4 Alpha 2 Demo


AGGIORNAMENTO (a partire da Bootstrap 4.0.0)

Ora che Bootstrap 4 è flexbox, le celle della tabella non assumeranno la larghezza corretta durante l'aggiunta col-*. Una soluzione alternativa consiste nell'usare la d-inline-blockclasse sulle celle della tabella per impedire la visualizzazione predefinita: flessione delle colonne.

Un'altra opzione in BS4 è usare le classi di utilità di dimensionamento per la larghezza ...

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

Bootstrap 4 Alpha 6 Demo

Infine, potresti usare d-flexsulle righe della tabella (tr) e le col-*classi della griglia sulle colonne (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 (stabile) Demo

Nota: la modifica del TR da visualizzare: flex può alterare i bordi


In realtà questo non misura correttamente. Controlla se aggiungi dei bordi per vedere come sono le dimensioni e quando aggiungi una riga al corpo. Ho inserito il codice nella domanda
Killerpixler

In realtà il tuo esempio BS4-A6 non funziona se hai contenuto in eccesso in una colonna poiché le altre colonne non sono estese. Prova a incollare un po 'di lorem ipsum in una colonna.
Killerpixler

1
La tua soluzione ha funzionato. Nel mio caso, dovevo aggiungere no-gutters nel tr per evitare il riempimento negativo jsfiddle.net/Vimalan/xhvdcasn
Vimalan Jaya Ganesh

Sì, i w-25, w-50e w-75le classi lavorano con bootstrap 4. Grazie!
olidem

26

Un'altra opzione è applicare lo stile flessibile alla riga della tabella e aggiungere gli col-classeselementi dell'intestazione / dati della tabella:

<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
Funziona ma vertical-align: middlenon funziona più con la d-flexclasse.
Vigilia del

L'allineamento verticale infatti non funziona sul layout flexbox. Usa align-items: baseline. Per saperne di più su flexbox, leggi questa guida
Jacob van Lingen

12

Usare la d-flexclasse funziona bene ma alcuni altri attributi non funzionano più come vertical-align: middleproprietà.

Il modo migliore che ho trovato per ridimensionare le colonne molto facilmente è utilizzare l' widthattributo con percentuale solo nelle theadcelle.

<table class="table">
    <thead>
        <tr>
            <th width="25%">25%</th>
            <th width="25%">25%</th>
            <th width="50%">50%</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>25%</td>
            <td>25%</td>
            <td>50%</td>
        </tr>
    </tbody>
</table>

5
La soluzione più semplice e migliore, onestamente. Tutto il resto è fallito miseramente per me.
Creatura

3
Nota L' utilizzo dell'attributo width per <th> non è ora supportato in HTML5
StefanJM

10

L'ho hackerato per il rilascio Bootstrap 4.1.1 secondo le mie esigenze prima di leggere il post di @ florian_korner. Sembra molto simile.

Se usi sass puoi incollare questo snippet alla fine del tuo bootstrap include. Sembra che risolva il problema per Chrome, IE e Edge. Non sembra rompere nulla in Firefox.

@mixin make-td-col($size, $columns: $grid-columns) {
    width: percentage($size / $columns);
}

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

    @for $i from 1 through $grid-columns {
        td.col#{$infix}-#{$i}, th.col#{$infix}-#{$i} {
            @include make-td-col($i, $grid-columns);
        }
    }
}

o se vuoi solo l'utility CSS compilata:

td.col-1, th.col-1 {
  width: 8.33333%; }

td.col-2, th.col-2 {
  width: 16.66667%; }

td.col-3, th.col-3 {
  width: 25%; }

td.col-4, th.col-4 {
  width: 33.33333%; }

td.col-5, th.col-5 {
  width: 41.66667%; }

td.col-6, th.col-6 {
  width: 50%; }

td.col-7, th.col-7 {
  width: 58.33333%; }

td.col-8, th.col-8 {
  width: 66.66667%; }

td.col-9, th.col-9 {
  width: 75%; }

td.col-10, th.col-10 {
  width: 83.33333%; }

td.col-11, th.col-11 {
  width: 91.66667%; }

td.col-12, th.col-12 {
  width: 100%; }

td.col-sm-1, th.col-sm-1 {
  width: 8.33333%; }

td.col-sm-2, th.col-sm-2 {
  width: 16.66667%; }

td.col-sm-3, th.col-sm-3 {
  width: 25%; }

td.col-sm-4, th.col-sm-4 {
  width: 33.33333%; }

td.col-sm-5, th.col-sm-5 {
  width: 41.66667%; }

td.col-sm-6, th.col-sm-6 {
  width: 50%; }

td.col-sm-7, th.col-sm-7 {
  width: 58.33333%; }

td.col-sm-8, th.col-sm-8 {
  width: 66.66667%; }

td.col-sm-9, th.col-sm-9 {
  width: 75%; }

td.col-sm-10, th.col-sm-10 {
  width: 83.33333%; }

td.col-sm-11, th.col-sm-11 {
  width: 91.66667%; }

td.col-sm-12, th.col-sm-12 {
  width: 100%; }

td.col-md-1, th.col-md-1 {
  width: 8.33333%; }

td.col-md-2, th.col-md-2 {
  width: 16.66667%; }

td.col-md-3, th.col-md-3 {
  width: 25%; }

td.col-md-4, th.col-md-4 {
  width: 33.33333%; }

td.col-md-5, th.col-md-5 {
  width: 41.66667%; }

td.col-md-6, th.col-md-6 {
  width: 50%; }

td.col-md-7, th.col-md-7 {
  width: 58.33333%; }

td.col-md-8, th.col-md-8 {
  width: 66.66667%; }

td.col-md-9, th.col-md-9 {
  width: 75%; }

td.col-md-10, th.col-md-10 {
  width: 83.33333%; }

td.col-md-11, th.col-md-11 {
  width: 91.66667%; }

td.col-md-12, th.col-md-12 {
  width: 100%; }

td.col-lg-1, th.col-lg-1 {
  width: 8.33333%; }

td.col-lg-2, th.col-lg-2 {
  width: 16.66667%; }

td.col-lg-3, th.col-lg-3 {
  width: 25%; }

td.col-lg-4, th.col-lg-4 {
  width: 33.33333%; }

td.col-lg-5, th.col-lg-5 {
  width: 41.66667%; }

td.col-lg-6, th.col-lg-6 {
  width: 50%; }

td.col-lg-7, th.col-lg-7 {
  width: 58.33333%; }

td.col-lg-8, th.col-lg-8 {
  width: 66.66667%; }

td.col-lg-9, th.col-lg-9 {
  width: 75%; }

td.col-lg-10, th.col-lg-10 {
  width: 83.33333%; }

td.col-lg-11, th.col-lg-11 {
  width: 91.66667%; }

td.col-lg-12, th.col-lg-12 {
  width: 100%; }

td.col-xl-1, th.col-xl-1 {
  width: 8.33333%; }

td.col-xl-2, th.col-xl-2 {
  width: 16.66667%; }

td.col-xl-3, th.col-xl-3 {
  width: 25%; }

td.col-xl-4, th.col-xl-4 {
  width: 33.33333%; }

td.col-xl-5, th.col-xl-5 {
  width: 41.66667%; }

td.col-xl-6, th.col-xl-6 {
  width: 50%; }

td.col-xl-7, th.col-xl-7 {
  width: 58.33333%; }

td.col-xl-8, th.col-xl-8 {
  width: 66.66667%; }

td.col-xl-9, th.col-xl-9 {
  width: 75%; }

td.col-xl-10, th.col-xl-10 {
  width: 83.33333%; }

td.col-xl-11, th.col-xl-11 {
  width: 91.66667%; }

td.col-xl-12, th.col-xl-12 {
  width: 100%; }

5

Disclaimer: questa risposta potrebbe essere un po 'vecchia. Dal momento che il bootstrap 4 beta. Bootstrap è cambiato da allora.

La classe di dimensione della colonna della tabella è stata modificata da questa

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

per

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

Questo non sembra funzionare nell'impostazione della larghezza delle colonne: codeply.com/go/Utyon2XEB6
Zim


1
L'altra domanda non è collegata. Le larghezze delle colonne non funzionano sulle celle della tabella a causa del flexbox BS4 alpha 6 come spiegato nella mia risposta.
Zim

4

Posso risolvere questo problema utilizzando il seguente codice utilizzando 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>

1

A partire da Alpha 6 puoi creare il seguente file sass:

@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;
        }
      }
    }
  }
}

questo codice non funziona affatto - ho provato a eseguirne il debug per 1,5 ore ma la mia conoscenza di sass è troppo debole per farlo. Pubblica esempi di lavoro la prossima volta.
Slowwie
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.