Wie richte ich eine feste Breite für <td> ein?

513

Einfaches Schema:

  <tr class="something">
    <td>A</td>
    <td>B</td>
    <td>C</td>
    <td>D</td>
  </tr>

Ich muss eine feste Breite für einrichten <td>. Ich habe es versucht:

tr.something {
  td {
    width: 90px;
  }
}

Ebenfalls

td.something {
  width: 90px;
}

zum

<td class="something">B</td>

Und selbst

<td style="width: 90px;">B</td>

Aber die Breite von <td>ist immer noch gleich.

user984621
quelle
1
Ich habe es gerade versucht und es funktioniert - vielleicht liegt das Problem irgendwo anders. Was sagt dir Firebug über das Element?
Rockbot
Auf dieser Seite erzählt der Mensch mit einem Video über dieses Thema. Es ist so klar.
Egemen
Verwenden Sie style="width: 1% !important;"diese Option, um die Breite so eng wie das längste Wort in der Spalte zu machen. Dies ist nützlich für die erste ID / # -Spalte. Getestet in Chrom (Desktop & Mobile), Oper (Desktop), IE (Desktop), Edge (Desktop), Firefox (Desktop)
Vinsa

Antworten:

1084

Für Bootstrap 4.0:

In Bootstrap 4.0.0 können Sie die col-*Klassen nicht zuverlässig verwenden (funktioniert in Firefox, aber nicht in Chrome). Sie müssen die Antwort von OhadR verwenden :

<tr>
  <th style="width: 16.66%">Col 1</th>
  <th style="width: 25%">Col 2</th>
  <th style="width: 50%">Col 4</th>
  <th style="width:  8.33%">Col 5</th>
</tr>

Für Bootstrap 3.0:

Verwenden Sie class="col-md-*"bei Twitter Bootstrap 3 Folgendes: wobei * eine Anzahl von Spalten mit einer Breite ist.

<tr class="something">
    <td class="col-md-2">A</td>
    <td class="col-md-3">B</td>
    <td class="col-md-6">C</td>
    <td class="col-md-1">D</td>
</tr>

Für Bootstrap 2.0:

Verwenden Sie class="span*"bei Twitter Bootstrap 2 Folgendes: wobei * eine Anzahl von Spalten mit einer Breite ist.

<tr class="something">
    <td class="span2">A</td>
    <td class="span3">B</td>
    <td class="span6">C</td>
    <td class="span1">D</td>
</tr>

** Wenn Sie <th>Elemente haben , stellen Sie die Breite dort und nicht auf den <td>Elementen ein.

Paulo
quelle
79
Was passiert, wenn Sie mehr als 12 Spalten haben?
ClearCloud8
33
Sie können dies nur im <head> in jedem <th> -Tag anwenden und alle Zeilen stimmen überein
Diego Fernando Murillo Valenci
7
Gibt es eine Dokumentation dazu auf der Bootstrap-Website?
Luis Perez
26
Dies funktioniert, befindet sich jedoch nicht auf der Bootstrap-Site, da diese col- * -Klassen nicht für diese Verwendung vorgesehen sind. Sie sollen in den reaktionsschnellen Bootstrap-Grids verwendet werden. Wenn Ihnen diese Funktionen gefallen, sollten Sie sich das CSS ansehen und es kopieren, um Ihr eigenes CSS zu erstellen.
DustinA
1
Anstatt die Klasse für die Erreichbarkeitszeile festzulegen, können wir sie auch einmal für den Header <th> festlegen, und der Rest wird automatisch erledigt!
Dopplesoldner
133

Ich hatte das gleiche Problem, habe die Tabelle repariert und dann meine td-Breite angegeben. Wenn Sie das haben, können Sie das auch tun.

table {
    table-layout: fixed;
    word-wrap: break-word;
}

Vorlage:

<td style="width:10%">content</td>

Bitte verwenden Sie CSS zum Strukturieren von Layouts.

DDDD
quelle
Dies ist großartig, aber als Ergänzung verwenden Sie ein classim tdTag, anstatt den Stil direkt anzuwenden
Ramses
1
Dies funktioniert dank besser gerade genug, um die Breite von thlike zu erhöhen : <th style="width: 25%;"></th>Dies wird die Breite anderer Spalten beeinflussen
Shaijut
Vielen Dank! Ich habe die col-md-x-Klasse für Bootstrap 3 festgelegt, aber es hat nicht funktioniert. Das Setzen des Tabellenlayouts auf "behoben" behebt mein Problem.
Maurisrx
Das funktioniert. Der Schlüssel ist der table-layout: fixed. Dies ist erforderlich, da viele mit BS4 erstellte Vorlagen Flex auf alles anwenden, einschließlich Tabellen.
Ivan
73

Anstatt die col-md-*Klassen auf jede tdin der Zeile colgroupanzuwenden, können Sie eine erstellen und die Klassen auf das colTag anwenden .

    <table class="table table-striped">
        <colgroup>
            <col class="col-md-4">
            <col class="col-md-7">
        </colgroup>
        <tbody>
        <tr>
            <td>Title</td>
            <td>Long Value</td>
        </tr>
        </tbody>
    </table>

Demo hier

Stormwild
quelle
1
Ich bevorzuge dies, aber es scheint keinen Einfluss auf meinen Fall zu haben, die Spaltenbreite wird nicht um col-md- * erweitert
Osify
Ich mag diese Lösung übrigens, warum man gezwungen ist, col-md- * Klassen zu verwenden und nicht col-lg- *, col-sm- * oder col-xs- *?
LucioB
1
@ LucioB Sie können verwenden, was Sie wollen und sogar mehrere von ihnen nach Spalten verwenden (Beispiel <col class="col-md-4 col-sm-6">hat eine Breite von 33% bei mittlerer Bildschirmgröße und 50% bei kleiner Bildschirmgröße)
VDarricau
1
Colgroup funktioniert nicht in Chrome. (Bootstrap v4.1). Verwenden Sie für die Einheitlichkeit aller Browser% width für <td> -Elemente.
AnkitK
57

Hoffentlich hilft dieser jemandem:

<table class="table">
  <thead>
    <tr>
      <th style="width: 30%">Col 1</th>
      <th style="width: 20%">Col 2</th>
      <th style="width: 10%">Col 3</th>
      <th style="width: 30%">Col 4</th>
      <th style="width: 10%">Col 5</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Val 1</td>
      <td>Val 2</td>
      <td>Val 3</td>
      <td>Val 4</td>
      <td>Val 5</td>
    </tr>
  </tbody>
</table>

https://github.com/twbs/bootstrap/issues/863

OhadR
quelle
1
Einfachste Antwort
GavinBelson
54

Wenn Sie <table class="table">für Ihre Tabelle verwenden, fügt die Tabellenklasse von Bootstrap der Tabelle eine Breite von 100% hinzu. Sie müssen die Breite auf Auto ändern.

Wenn die erste Zeile Ihrer Tabelle eine Kopfzeile ist, müssen Sie möglicherweise die Breite zu th anstatt zu td hinzufügen.

Meobyte
quelle
1
Als Ergänzung zu Bootstrap 3 müssen Sie auch die White-Space-Eigenschaft von thauf normal setzen, da es sich derzeit um Nowrap handelt, da solche Header nicht beschädigt werden.
Sammaye
41

In meinem Fall konnte ich dieses Problem beheben, indem ich min-width: 100pxanstelle width: 100pxfür die Zellen thoder verwendete td.

.table td, .table th {
    min-width: 100px;
}
ThiagoPXP
quelle
13
Dies könnte bewahrt haben, was von meiner geistigen Gesundheit übrig geblieben ist.
Joel
Ja! Dadurch wird die Mindestbreite für eine Spalte in einer reaktionsfähigen Tabelle festgelegt. Vielen Dank.
O. Jones
1
Das hat besser funktioniert als die beantwortete Frage, danke!
Israel
38

Für Bootstrap 4 können Sie einfach den Klassenhelfer verwenden:

<table class="table">
  <thead>
    <tr>
      <td class="w-25">Col 1</td>
      <td class="w-25">Col 2</td>
      <td class="w-25">Col 3</td>
      <td class="w-25">Col 4</td>
    </tr>
  </thead>
  <tbody>
    <tr>
      ...
CHAN
quelle
5
Das passt zu meinem Anwendungsfall. Vielen Dank!
Tonny
16
Es ist wichtig zu beachten, dass die einzigen w- * Optionen sind: .w-25, .w-50, .w-75, .w-100, .w-autoWenn Sie also etwas anderes möchten, müssen w-10Sie es .w-10 { width: 10% !important; }Ihrer lokalisierten CSS-Datei hinzufügen .
Abela
10

Versuche dies -

<style>
 table { table-layout: fixed; }
 table th, table td { overflow: hidden; }
</style>
Rohit Suthar
quelle
3
Dies ist die einzige, die aus allen anderen Antworten heraus funktioniert.
0bserver07
Ich habe auch hinzugefügt text-overflow: ellipsis, um sicherzustellen, dass der abgeschnittene Text sichtbar ist
Wochen
@ Observer07 In der Tat
TheRandomGuy
9

Bootstrap 4.0

In Bootstrap 4.0 müssen wir die Tabellenzeilen durch Hinzufügen der Klasse d-flex als Flexboxen deklarieren und außerdem die Suffixe xs, md und drop löschen, damit Bootstrap sie automatisch aus dem Ansichtsfenster ableiten kann.

So wird es aussehen:

<table class="table">
    <thead>
        <tr class="d-flex">
            <th class="col-2"> Student No. </th>
            <th class="col-7"> Description </th>
            <th class="col-3"> Amount </th>
        </tr>
    </thead>

    <tbody>
        <tr class="d-flex">
            <td class="col-2">test</td>
            <td class="col-7">Name here</td>
            <td class="col-3">Amount Here </td>
        </tr>
</table>

Hoffe, das wird jemand anderem da draußen helfen!

Prost!

Randika Vishman
quelle
7

Diese kombinierte Lösung hat bei mir funktioniert, ich wollte Spalten gleicher Breite

<style type="text/css">

    table {
        table-layout: fixed;
        word-wrap: break-word;
    }

        table th, table td {
            overflow: hidden;
        }

</style>

Ergebnis: -

Geben Sie hier die Bildbeschreibung ein

Hitesh Sahu
quelle
3

Ok, ich habe gerade herausgefunden, wo das Problem liegt - in Bootstrap wird als Standardwert widthfür das selectElement eingerichtet, daher lautet die Lösung:

tr. something {
  td {
    select {
      width: 90px;
    }
  }
}

Alles andere funktioniert mir nicht.

user984621
quelle
2

Ohne den Kontext der HTML-Seite oder den Rest Ihres CSS schwer zu beurteilen. Es kann unzählige Gründe geben, warum Ihre CSS-Regel das td-Element nicht beeinflusst.

Haben Sie spezifischere CSS-Selektoren wie z

tr.somethingontrlevel td.something {
  width: 90px;
}

Dies, um zu vermeiden, dass Ihr CSS durch eine spezifischere Regel aus dem Bootstrap-CSS überschrieben wird.

(Übrigens, in Ihrem Inline-CSS-Beispiel mit dem style-Attribut haben Sie die Breite falsch geschrieben - das könnte erklären, warum dieser Versuch fehlgeschlagen ist!)

David Heijl
quelle
2

Ich habe eine Weile mit dem Problem zu kämpfen, also nur für den Fall, dass jemand den gleichen dummen Fehler wie ich macht ... Im Inneren hatte <td>ich das Element mit white-space:preStil angewendet. Dadurch wurden alle meine table / tr / td-Tricks verworfen. Als ich diesen Stil entfernte, war plötzlich mein gesamter Text im Format schön formatiert td.

Überprüfen Sie also immer den Hauptcontainer (wie tableoder td), aber auch immer, ob Sie Ihren schönen Code nicht irgendwo tiefer stornieren :)

Mikk
quelle
1

Verwenden Sie in Bootstrap 4 d-flex anstelle von row für "tr"

Die Sache ist, dass die "Zeilen" -Klasse mehr Breite benötigt als der übergeordnete Container, was zu Problemen führt.

<table class="table">
  <tbody>
    <tr class="d-flex">
      <td class="col-sm-8">Hello</td>
      <td class="col-sm-4">World</td>
    </tr>
    <tr class="d-flex">
      <td class="col-sm-8">8 columns</td>
      <td class="col-sm-4">4 columns</td>
    </tr>
  </tbody>
</table>

Usman Anwar
quelle
Ich meinte "Zeile" anstelle von "tr". Da die Reihenklasse mit Dachrinnen an beiden Enden kommt. Oder wenn Sie die Klasse "row" nicht verwenden möchten, fügen Sie einfach die Klasse "no-gutters" hinzu.
Usman Anwar
1

In Bootstarp 4 können Sie verwenden rowund col-*in Tabelle verwende ich es wie folgt

<table class="table">
    <thead>
        <tr class="row">
            <th class="col-sm-3">3 row</th>
            <th class="col-sm-4">4 row</th>
            <th class="col-sm-5">5 row</th>
        </tr>
    </thead>
    <tbody>
        <tr class="row">
            <td class="col-sm-3">some text</td>
            <td class="col-sm-4">some text</td>
            <td class="col-sm-5">some text</td>
        </tr>
    </tbody>
</table>
Liam
quelle
1

So mache ich das oft, wenn ich mich nicht mit IE beschäftigen muss

    <tr>
      <th scope="col" style="width: calc(1 * 100% / 12)">#</th>
      <th scope="col" style="width: calc(4 * 100% / 12)">Website</th>
      <th scope="col" style="width: calc(3 * 100% / 12)">Username</th>
      <th scope="col" style="width: calc(3 * 100% / 12)">Password</th>
      <th scope="col" style="width: calc(1 * 100% / 12)">Action</th>
    </tr>

Auf diese Weise können Sie ein bekanntes 12-Spalten-Raster erstellen.

vothaison
quelle
0

Nichts davon funktioniert für mich und es gibt viele Spalten, die datierbar sind, damit die% - oder sm-Klasse dem 12-Elemente-Layout auf dem Bootstrap entspricht.

Ich habe mit den Datentabellen Angular 5 und Bootstrap 4 gearbeitet und habe viele Spalten in der Tabelle. Die Lösung für mich bestand THdarin, ein DIVElement mit einer bestimmten Breite hinzuzufügen . Zum Beispiel für die Spalten "Personenname" und "Ereignisdatum" benötige ich eine bestimmte Breite, divfüge dann ein in den Spaltenkopf ein, die gesamte Spaltenbreite ändert sich dann auf die Breite, die aus dem div auf dem angegeben wird TH:

<table datatable [dtOptions]="dtOptions" *ngIf="listData" class="table table-hover table-sm table-bordered text-center display" width="100%">
    <thead class="thead-dark">
        <tr>
            <th scope="col">ID </th>
            <th scope="col">Value</th>
            <th scope="col"><div style="width: 600px;">Person Name</div></th>
            <th scope="col"><div style="width: 800px;">Event date</div></th> ...
Axel Osorio
quelle
-1

benutze .something ohne td oder th

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title> 
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">  
  <style>
    .something {
      width: 90px;
      background: red;
    }
  </style>
</head>
<body>

<div class="container">
  <h2>Fixed width column</h2>            
  <table class="table table-bordered">
    <thead>
      <tr>
        <th class="something">Firstname</th>
        <th>Lastname</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>John</td>
        <td>Doe</td>
        <td>[email protected]</td>
      </tr>
      <tr>
        <td>Mary</td>
        <td>Moe</td>
        <td>[email protected]</td>
      </tr>
      <tr>
        <td>July</td>
        <td>Dooley</td>
        <td>[email protected]</td>
      </tr>
    </tbody>
  </table>
</div>

</body>
</html>

Gecko
quelle
-2

<div class="row" id="divcashgap" style="display:none">
                <div class="col-md-12">
                    <div class="table-responsive">
                        <table class="table table-default" id="gvcashgapp">
                            <thead>
                                <tr>
                                    <th class="1">BranchCode</th>
                                    <th class="2"><a>TC</a></th>
                                    <th class="3">VourNo</th>
                                    <th class="4"  style="min-width:120px;">VourDate</th>
                                    <th class="5" style="min-width:120px;">RCPT Date</th>
                                    <th class="6">RCPT No</th>
                                    <th class="7"><a>PIS No</a></th>
                                    <th class="8" style="min-width:160px;">RCPT Ammount</th>
                                    <th class="9">Agging</th>
                                    <th class="10" style="min-width:160px;">DesPosition Days</th>
                                    <th class="11" style="min-width:150px;">Bank Credit Date</th>
                                    <th class="12">Comments</th>
                                    <th class="13" style="min-width:150px;">BAC Comment</th>
                                    <th class="14">BAC Ramark</th>
                                    <th class="15" style="min-width:150px;">RAC Comment</th>
                                    <th class="16">RAC Ramark</th>
                                    <th class="17" style="min-width:120px;">Update Status</th>
                                </tr>
                            </thead>
                            <tbody id="tbdCashGapp"></tbody>
                        </table>
                    </div>
                </div>
            </div>

user10861319
quelle
Fügen Sie auch eine Erklärung hinzu.
Akash Dubey
Diese Antwort ist bestenfalls verwirrend. Klassen sind seltsame, nicht wesentliche IDs, keine Erklärung.
GotBatteries