Làm cách nào để thiết lập chiều rộng cố định cho <td>?


514

Sơ đồ đơn giản:

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

Tôi cần phải thiết lập một chiều rộng cố định cho <td>. Tôi đã thử:

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

Cũng thế

td.something {
  width: 90px;
}

cho

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

Và ngay cả

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

Nhưng chiều rộng <td>vẫn như cũ.


1
Tôi chỉ thử và nó hoạt động - có thể vấn đề là ở đâu đó khác. Firebird cho bạn biết gì về nguyên tố này?
Rockbot

Trong trang web này , người đàn ông đang nói về chủ đề này với video. Thật là rõ ràng.
ví dụ:

sử dụng style="width: 1% !important;"để làm cho chiều rộng chặt chẽ như từ dài nhất trong cột, nó hữu ích cho cột ID / # đầu tiên. Đã thử nghiệm trong chrome (máy tính để bàn & thiết bị di động), opera (máy tính để bàn), IE (máy tính để bàn), cạnh (máy tính để bàn), firefox (máy tính để bàn)
vinsa

Câu trả lời:


1084

Đối với Bootstrap 4.0:

Trong Bootstrap 4.0.0, bạn không thể sử dụng các col-*lớp một cách đáng tin cậy (hoạt động trong Firefox, nhưng không phải trong Chrome). Bạn cần sử dụng câu trả lời của OhadR :

<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>

Đối với Bootstrap 3.0:

Với twitter bootstrap 3, sử dụng: class="col-md-*"trong đó * là một số cột có chiều rộng.

<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>

Đối với Bootstrap 2.0:

Với twitter bootstrap 2, sử dụng: class="span*"trong đó * là một số cột có chiều rộng.

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

** Nếu bạn có <th>các phần tử đặt chiều rộng ở đó và không trên các <td>phần tử.


79
Điều gì xảy ra nếu bạn có nhiều hơn 12 cột?
ClearCloud8

33
bạn chỉ có thể áp dụng điều này trong thẻ <head> trong mỗi thẻ <th> và tất cả các hàng sẽ khớp
Diego Fernando Murillo Valenci

7
Có tài liệu về điều này trên trang web Bootstrap?
Luis Perez

26
Điều này hoạt động, nhưng nó không có trên trang web bootstrap vì các lớp col- * đó không có nghĩa là được sử dụng theo cách này. Chúng có nghĩa là được sử dụng trong các lưới bootstrap đáp ứng. Nếu bạn thích những gì chúng làm, hãy xem xét việc xem CSS cho chúng và sao chép nó để tạo CSS của riêng bạn.
DustinA

1
Ngoài ra, thay vì đặt lớp cho hàng tiếp cận, chúng ta chỉ cần đặt nó một lần cho tiêu đề <th> và phần còn lại được tự động xử lý!
dopplesoldner

133

Tôi đã có cùng một vấn đề, tôi đã sửa bảng và sau đó chỉ định chiều rộng td của tôi. Nếu bạn có th bạn có thể làm những điều đó là tốt.

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

Bản mẫu:

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

Vui lòng sử dụng CSS để cấu trúc bất kỳ bố cục.



Này là rất tốt, nhưng khi việc sử dụng Ngoài ra một classtrong các tdthẻ thay vì áp dụng phong cách trực tiếp
Ramses

1
Điều này hoạt động tốt hơn là vừa đủ để tăng chiều rộng của lượt ththích: <th style="width: 25%;"></th>điều này sẽ ảnh hưởng đến chiều rộng của các cột khác
shaijut

Cảm ơn bạn! Tôi đã đặt lớp col-md-x cho Bootstrap 3 nhưng nó không hoạt động. Đặt bố cục bảng thành "đã sửa" giải quyết vấn đề của tôi.
maurisrx

Những công việc này. Chìa khóa là table-layout: fixed. Điều đó là bắt buộc vì nhiều mẫu được xây dựng với BS4 áp dụng flex cho mọi thứ, bao gồm cả bảng.
Ivan

73

Thay vì áp dụng các col-md-*lớp cho từng tdhàng, bạn có thể tạo colgroupvà áp dụng các lớp cho colthẻ.

    <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 tại đây


1
Tôi thích điều này nhưng dường như không ảnh hưởng đến trường hợp của tôi, chiều rộng cột không được mở rộng bởi col-md- *
Osify

Nhân tiện, tôi thích giải pháp này, tại sao người ta buộc phải sử dụng các lớp col-md- * mà không phải col-lg- *, col-sm- * hay col-xs- *?
LucioB

1
@LucioB bạn có thể sử dụng bất cứ thứ gì bạn muốn và thậm chí sử dụng một vài trong số chúng theo cột (ví dụ <col class="col-md-4 col-sm-6">sẽ có chiều rộng 33% ở kích thước màn hình trung bình và 50% ở kích thước màn hình nhỏ)
VDarricau

1
Colgroup không hoạt động trong Chrome. (Bootstrap v4.1). Để thống nhất giữa các trình duyệt, hãy sử dụng% width cho các phần tử <td>.
AnkitK

57

Hy vọng điều này sẽ giúp được ai đó:

<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


1
Câu trả lời dễ nhất để sử dụng
GavinBelson

54

Nếu bạn đang sử dụng <table class="table">trên bàn của mình, lớp bảng của Bootstrap sẽ thêm chiều rộng 100% vào bảng. Bạn cần thay đổi chiều rộng thành tự động.

Ngoài ra, nếu hàng đầu tiên trong bảng của bạn là hàng tiêu đề, bạn có thể cần thêm chiều rộng cho th thay vì td.


1
Là một bổ sung trên Bootstrap 3, bạn cũng sẽ cần đặt thuộc tính khoảng trắng của thbình thường vì hiện tại nó đang bị hỏng vì các tiêu đề như vậy sẽ không bị phá vỡ.
Sammaye

41

Trong trường hợp của tôi, tôi đã có thể khắc phục vấn đề đó bằng cách sử dụng min-width: 100pxthay vì width: 100pxcho các ô thhoặc td.

.table td, .table th {
    min-width: 100px;
}

13
Điều này có thể đã bảo tồn những gì còn lại của sự tỉnh táo của tôi.
Joel

Đúng! tốt, bộ này, chiều rộng tối thiểu cho một cột trong bảng đáp ứng. Cảm ơn.
O. Jones

1
Điều này làm việc tốt hơn so với câu hỏi trả lời, cảm ơn!
israel

38

Đối với Bootstrap 4, bạn chỉ cần sử dụng trình trợ giúp lớp:

<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>
      ...

5
Điều này phù hợp với trường hợp sử dụng của tôi. Cảm ơn!
tonny

16
Điều quan trọng cần lưu ý rằng các tùy chọn w- * duy nhất là: .w-25, .w-50, .w-75, .w-100, .w-autovì vậy nếu bạn muốn một cái gì đó khác, giả sử, w-10bạn sẽ cần thêm .w-10 { width: 10% !important; }vào tệp css cục bộ của mình.
Abela

10

Thử cái này -

<style>
 table { table-layout: fixed; }
 table th, table td { overflow: hidden; }
</style>

3
Đây là người duy nhất làm việc trong tất cả các câu trả lời khác.
0bserver07

Tôi cũng đã thêm text-overflow: ellipsisđể đảm bảo văn bản giới hạn rõ ràng
tuần

@ Observer07 Thật vậy
TheRandomGuy

9

Bootstrap 4.0

Trên Bootstrap 4.0, chúng ta phải khai báo các hàng của bảng dưới dạng hộp flex bằng cách thêm lớp d-flex và cũng có thể thả xs, md, hậu tố để cho phép Bootstrap tự động lấy ra từ chế độ xem.

Vì vậy, nó sẽ trông như sau:

<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>

Hy vọng điều này sẽ hữu ích cho người khác ngoài kia!

Chúc mừng!


7

Giải pháp kết hợp này làm việc cho tôi, tôi muốn các cột có chiều rộng bằng nhau

<style type="text/css">

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

        table th, table td {
            overflow: hidden;
        }

</style>

Kết quả :-

nhập mô tả hình ảnh ở đây


3

Ok, tôi chỉ cần tìm ra vấn đề ở đâu - trong Bootstrap được thiết lập làm giá trị mặc định widthcho selectphần tử, do đó, giải pháp là:

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

Bất cứ điều gì khác không làm việc cho tôi.


2

Khó có thể đánh giá mà không có ngữ cảnh của trang html hoặc phần còn lại của CSS của bạn. Có thể có hàng trăm lý do tại sao quy tắc CSS của bạn không ảnh hưởng đến yếu tố td.

Bạn đã thử các công cụ chọn CSS cụ thể hơn như

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

Điều này để tránh CSS của bạn bị ghi đè bởi một quy tắc cụ thể hơn từ css bootstrap.

(nhân tiện, trong mẫu css nội tuyến của bạn với thuộc tính style, bạn đã viết sai chiều rộng - điều đó có thể giải thích tại sao lần thử đó thất bại!)


2

Tôi đã phải vật lộn với vấn đề này một thời gian, vì vậy chỉ trong trường hợp khi ai đó phạm phải sai lầm ngu ngốc tương tự như tôi ... Bên trong <td>tôi có yếu tố với white-space:prephong cách được áp dụng. Điều đó làm cho tất cả các thủ thuật bảng / tr / td của tôi bị loại bỏ. Khi tôi xóa kiểu đó, đột nhiên tất cả văn bản của tôi được định dạng độc đáo bên trong td.

Vì vậy, luôn luôn kiểm tra thùng chứa chính (như tablehoặc td) nhưng cũng vậy, luôn luôn kiểm tra xem bạn có hủy mã đẹp của mình ở đâu đó sâu hơn không :)


1

Sử dụng d-flex thay vì hàng cho "tr" trong Bootstrap 4

Vấn đề là lớp "hàng" chiếm nhiều chiều rộng hơn thùng chứa cha, trong đó đưa ra các vấn đề.

<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>


Tôi có nghĩa là "hàng" thay vì "tr". Khi lớp hàng đi kèm với máng xối ở cả hai đầu. Hoặc nếu bạn không sử dụng lớp "hàng", chỉ cần thêm lớp "không có máng xối".
Usman Anwar

1

Trong bootstarp 4 bạn có thể sử dụng rowcol-*trong bảng, tôi sử dụng nó như dưới đây

<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>

1

Đây là cách tôi thường làm khi không phải đối phó với IE

    <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>

Bằng cách đó bạn có thể có một lưới 12 col quen thuộc.


0

Không có cái nào trong số này hoạt động với tôi và có nhiều cols về khả năng truy cập để tạo lớp% hoặc sm bằng với bố cục 12 phần tử trên bootstrap.

Tôi đã làm việc với các bảng dữ liệu Angular 5 và Bootstrap 4, và có nhiều cols trong bảng. Giải pháp cho tôi là THthêm một DIVphần tử có chiều rộng cụ thể. Ví dụ: đối với cols "Tên người" và "Ngày sự kiện" Tôi cần một chiều rộng cụ thể, sau đó đặt divtiêu đề col, toàn bộ chiều rộng col sau đó thay đổi kích thước theo chiều rộng được chỉ định từ div trên 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> ...

-1

sử dụng .something mà không td hoặc 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>john@example.com</td>
      </tr>
      <tr>
        <td>Mary</td>
        <td>Moe</td>
        <td>mary@example.com</td>
      </tr>
      <tr>
        <td>July</td>
        <td>Dooley</td>
        <td>july@example.com</td>
      </tr>
    </tbody>
  </table>
</div>

</body>
</html>


-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>


Thêm một số lời giải thích quá.
Akash Dubey

Câu trả lời này là khó hiểu nhất. Các lớp học là những id kỳ lạ, không cần thiết, không có lời giải thích.
GotB Pin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.