Anpassen einer Bootstrap-Tabellenspalte an den Inhalt

82

Ich benutze Bootstrap und zeichne eine Tabelle. In der Spalte ganz rechts befindet sich eine Schaltfläche, und ich möchte, dass sie auf die Mindestgröße herunterfällt, die für die Schaltfläche erforderlich ist.

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<table class="table table-responsive">
        <tbody>
            <tr>
                <th>Name</th>
                <th>Payment Method</th>
                <th></th>
            </tr>
            <tr>
                <td>Bart Foo</td>
                <td>Visa</td>
                <td><a role="button" class="btn btn-default btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">View</a></td>
            </tr>
        </tbody>
    </table>

Dies macht wie folgt:

Tabellenbeispiel

Mit einigen Firebug-Hervorhebungen ist die Spaltenbreite so breit geworden:

Spaltenbreite

Diese Spalte wird mit der Seite skaliert, während sich die Seite in den Modi mit größerer dynamischer Breite befindet. Ich habe eine Idee, wie ich dies in reinem CSS beheben würde, aber die meisten dieser Ansätze werden wahrscheinlich Probleme mit den Versionen der Site mit geringer Breite verursachen.

Wie würde ich diese Spalte auf die Breite ihres Inhalts fallen lassen?

(Wie immer - Bestehende Bootstrap-Klassen> reines CSS> Javascript)

Oktopoid
quelle
Nachdem ich dies gepostet habe, hatte ich gerade einen Gedanken - wenn ich diese Spalte genau richtig ausrichte, denke ich, ist das ungefähr das Gleiche - wenn die anderen Spalten genug Daten enthalten, um den Platz zu benötigen, werden sie sie trotzdem zurückkratzen. EDIT: Doh - das funktioniert nicht, wenn ich mehr als eine Spalte habe, die ich auf eine Mindestgröße reduzieren muss.
Octopoid
6
Das gilt für das Layout, aber Tabellen sind für Tabellendaten absolut in Ordnung.
Octopoid
2
Sie sollten divs anstelle von Tabellen verwenden. Sie können dann Prozentwerte für ihre Breite zuweisen, um sie an die Seitenbreite anzupassen.
sqe
6
Tabellen sollten nicht für die Struktur verwendet werden . Sie können Tabellen für Daten verwenden, die normalerweise in Tabellen gespeichert werden. Octopoid verwendet das Tabellen-Tag nicht für die Struktur, sondern zum Anzeigen von Daten. Es ist eine korrekte Verwendung des Tabellen-Tags.
Gewh

Antworten:

155

Erstellen Sie eine Klasse, die die Breite der Tabellenzellen an den Inhalt anpasst

.table td.fit, 
.table th.fit {
    white-space: nowrap;
    width: 1%;
}
tmg
quelle
7
Gah - ich würde das in eine tdRegel setzen und dann auf eine anwenden th- das funktioniert perfekt, danke. :) (Hoffe es macht dir nichts aus, ich habe die th Regel auch in deine Antwort aufgenommen)
Octopoid
20

Keine der Lösungen funktioniert bei mir. Die tdletzte Spalte nimmt noch die volle Breite ein. Hier ist also die Lösung. Getestet auf Bootstrap 4

Fügen Sie table-fitIhrem hinzutable

table.table-fit {
    width: auto !important;
    table-layout: auto !important;
}
table.table-fit thead th, table.table-fit tfoot th {
    width: auto !important;
}
table.table-fit tbody td, table.table-fit tfoot td {
    width: auto !important;
}

Hier ist die für den sassGebrauch.

@mixin width {
    width: auto !important;
}

table {
    &.table-fit {
        @include width;
        table-layout: auto !important;
        thead th, tfoot th  {
            @include width;
        }
        tbody td, tfoot td {
            @include width;
        }
    }
}
Dexter
quelle
Dies ist die einzige Lösung, die mit bs4 funktioniert. Danke vielmals!
TheWiz
10

Eine alte Frage, aber ich bin hier angekommen, um danach zu suchen. Ich wollte, dass der Tisch so klein wie möglich ist und zum Inhalt passt. Die Lösung bestand darin, die Tabellenbreite einfach auf eine beliebige kleine Zahl einzustellen (z. B. 1 Pixel). Ich habe sogar eine CSS-Klasse erstellt, um damit umzugehen:

.table-fit {
    width: 1px;
}

Und benutze es so:

<table class="table table-fit">

Beispiel: JSFiddle

Pedro Walter
quelle
2
Die Frage bezieht sich nur auf einige Spalten einer Tabelle, nicht auf alle Spalten der Tabelle
GabiM
2
Ja, aber als ich eine Lösung für mein Problem finden musste, kam ich hier an. Ich habe das in meiner Antwort erklärt.
Pedro Walter
2
Es ist immer noch eine unangemessene und falsche Antwort auf diese Frage.
Maritim
5

Fügen Sie dem Tabellenelement die Klasse w-auto native bootstrap 4 hinzu , und Ihre Tabelle passt zum Inhalt.

Geben Sie hier die Bildbeschreibung ein

MERT DOĞAN
quelle
1
Dieser hat in Firefox für mich funktioniert und ist eine echte Boostrap-Lösung.
Paperduck
3

Diese Lösung ist nicht jedes Mal gut. Aber ich habe nur zwei Spalten und ich möchte, dass die zweite Spalte den gesamten verbleibenden Platz einnimmt. Das hat bei mir funktioniert

 <tr>
    <td class="text-nowrap">A</td>
    <td class="w-100">B</td>
 </tr>
Sameera K.
quelle
1

Sie können Ihren Tisch so um das div-Tag wickeln, da es mir auch geholfen hat.

<div class="col-md-3">

<table>
</table>

</div>
Ahmad Habib
quelle
0

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />

<h5>Left</h5>
<table class="table table-responsive">
    <tbody>
        <tr>
            <th>Action</th>        
            <th>Name</th>
            <th>Payment Method</th>
        </tr>
        <tr>
            <td  style="width:1px; white-space:nowrap;">
                <a role="button" class="btn btn-default btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">View</a>
                <a role="button" class="btn btn-primary btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">Edit</a>
                <a role="button" class="btn btn-danger btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">Delete</a>                
            </td>        
            <td>Bart Foo</td>
            <td>Visa</td>
        </tr>
    </tbody>
</table>

<h5>Right</h5>

<table class="table table-responsive">
    <tbody>
        <tr>                    
            <th>Name</th>
            <th>Payment Method</th>
            <th>Action</th>            
        </tr>
        <tr>

            <td>Bart Foo</td>
            <td>Visa</td>
            <td  style="width:1px; white-space:nowrap;">
                <a role="button" class="btn btn-default btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">View</a>
                <a role="button" class="btn btn-primary btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">Edit</a>
                <a role="button" class="btn btn-danger btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">Delete</a>                
            </td>            
        </tr>
    </tbody>
</table>

Anteliebe
quelle