Đặt độ rộng cột của bảng không đổi bất kể số lượng văn bản trong các ô của nó là bao nhiêu?


535

Trong bảng của tôi, tôi đặt chiều rộng của ô đầu tiên trong một cột là 100px.
Tuy nhiên, khi văn bản trong một ô trong cột này quá dài, chiều rộng của cột trở nên nhiều hơn 100px. Làm thế nào tôi có thể vô hiệu hóa bản mở rộng này?


5
stackoverflow.com/questions/1258416/word-wrap-in-a-html-table có thể giúp chỉ cho bạn đi đúng hướng
justinl

2
Trong trường hợp của tôi không xảy ra sự mở rộng, nhưng ngược lại: thu hẹp chiều rộng không mong muốn mặc dù khai báo chiều rộng rõ ràng của tôi. Nực cười!
Csaba Toth

Giải pháp đúng duy nhất cho vấn đề này là sử dụng colgroup có cols trong đó và đặt chiều rộng của cols.
MightyPork

table-layout:fixed;là giải pháp
emfi

Câu trả lời:


607

Tôi chơi với nó một chút vì tôi gặp khó khăn khi tìm ra nó.

Bạn cần đặt chiều rộng ô ( thhoặc tdđã hoạt động, tôi đặt cả hai) VÀ đặt table-layoutthànhfixed . Vì một số lý do, chiều rộng của ô dường như chỉ cố định nếu độ rộng của bảng cũng được đặt (tôi nghĩ đó là ngớ ngẩn nhưng whatev).

Ngoài ra, rất hữu ích khi đặt thuộc overflowtính hiddenđể ngăn bất kỳ văn bản bổ sung nào ra khỏi bảng.

Bạn cũng nên đảm bảo để lại tất cả các viền và kích thước cho CSS.

Ok đây là những gì tôi có:

table {
  border: 1px solid black;
  table-layout: fixed;
  width: 200px;
}

th,
td {
  border: 1px solid black;
  width: 100px;
  overflow: hidden;
}
<table>
  <tr>
    <th>header 1</th>
    <th>header 234567895678657</th>
  </tr>
  <tr>
    <td>data asdfasdfasdfasdfasdf</td>
    <td>data 2</td>
  </tr>
</table>

Đây là trong JSFiddle

Anh chàng này có một vấn đề tương tự: Chiều rộng ô bảng - sửa chiều rộng, gói / cắt các từ dài


77
Điều quan trọng cần lưu ý là: "Trình duyệt sau đó sẽ đặt độ rộng cột dựa trên chiều rộng của các ô ở hàng đầu tiên của bảng", từ stackoverflow.com/questions/570154/
Thẻ

12
Nó không hoạt động khi chiều rộng bảng không cố định. jsfiddle.net/lavinski/CGCFW/3 Bạn chỉ cần một hàng động để chiếm không gian còn lại.
Daniel Little

2
@DanielLittle thay thế, bạn có thể đặt chiều rộng của bảng thành 1px; với overflow: visiblecác bảng có kích thước động, miễn là kích thước của các ô được cố định và có thể nhìn thấy tràn, không có vấn đề gì nếu kích thước của bảng lớn hơn hoặc nhỏ hơn các ô thực tế.
Mahn

Bạn có thể làm gì nếu td của bạn có "width = 30%;"?
71GA

Vui lòng thêm phần tràn: hidden @ RokoC.Buljan
Alex Grande

178

Xem: http://www.html5-tutorials.org/tables/changing-column- thong/

Sau thẻ bảng, sử dụng phần tử col. bạn không cần một thẻ đóng.

Ví dụ: nếu bạn có ba cột:

<table>
  <colgroup>
    <col style="width:40%">
    <col style="width:30%">
    <col style="width:30%">
  </colgroup>  
  <tbody>
    ...
  </tbody>
</table>

26
Điều này! Đây là câu trả lời HTML5 và nó hoạt động kỳ quặc mà không cần tôi phải nhảy qua những cái vòng ngu ngốc. Ngoài ra, bạn có thể sử dụng <col class = "someClassName"> để giữ độ rộng của mình trong CSS và không làm ô nhiễm HTML của bạn với thông tin kiểu.
John Munsch

2
@Sam bạn có thể đã có một số vấn đề khác ghi đè lên vấn đề này, chẳng hạn như CSS, kiểu nội tuyến hoặc tài liệu không chính xác, v.v. Điều này chắc chắn hoạt động, đó là cách tiêu chuẩn để đặt kiểu cột.
Sameer Alibhai

Tôi không chắc đây có phải là 'cách HTML5' không. Dường như colgroup / col trong html5 chỉ thực sự được sử dụng để đánh dấu các nhịp. MDN không đề cập đến việc sử dụng thuộc tính style trên thẻ col (ngoài việc nó thừa hưởng nó từ thuộc tính toàn cầu) và chỉ nói về bgcolor: "... sử dụng thuộc tính CSS ... trên các phần tử <td> có liên quan." developer.mozilla.org/en-US/docs/Web/HTML/Euity/col .
Stephen Panzer

5
Làm việc cho tôi với phong cách bảng table-layout: fixed; width: 100%;. Cảm ơn!
nrodic

Nó không phải là kết thúc / dứt khoát, nhưng w3schools cũng không đề cập đến việc sử dụng colcho việc này. Nó gợi ý việc sử dụng css được áp dụng cho một <td>(hoặc a <th>) - w3schools.com/tags/att_td_ rắc.asp
Don Cheadle

128

Chỉ cần thêm <div>thẻ bên trong <td>hoặc <th>xác định chiều rộng bên trong<div> . Điều này sẽ giúp bạn. Không có gì khác làm việc.

ví dụ.

<td><div style="width: 50px" >...............</div></td>

2
Tôi đã kết hợp giải pháp này với việc chỉ định chiều rộng tối thiểu / chiều rộng tối đa cho cùng chiều rộng pixel chỉ để ở bên an toàn. Cuối cùng thì nó cũng hoạt động. Tôi không biết tại sao tôi phải chạy tất cả các vòng bổ sung này chỉ để nó thực sự cố định, thật lố bịch ...
Csaba Toth

1
Không chắc chắn làm thế nào điều này tốt hơn là cài đặt cùng một css style="width: 50px"trên<td>
Don Cheadle

2
@mmcrae Tốt hơn vì nó hoạt động, cài đặt độ rộng <td>không.
Madbreaks

66

Nếu bạn cần thêm một cột có chiều rộng cố định trong khi các cột khác sẽ thay đổi kích thước, hãy thử đặt cả hai min-widthmax-widthvề cùng một giá trị.


Điều này làm việc cho tôi khi thiết lập chiều rộng rõ ràng với table-layout: fixed;không.
Jordan Mack

Thánh thần ơi! Không có giải pháp nào khác hoạt động hoặc quá cồng kềnh! Điều này làm việc hoàn hảo! Không yêu cầu div quá!
NeilRoy

29

Bạn cần viết cái này bên trong CSS tương ứng

table-layout:fixed;

bảng sorround tốt hơn với các thẻ div sau đó bên trong div sử dụng tràn: auto
vinoth kumar

Làm việc cho tôi khi tôi kết hợp nó với các nhóm cột: <table style = "table-layout: fixed"> <colgroup> <col style = "width: 50%"> <col style = "width: 50%"> </ colgroup> <tbody> ... </ tbody> </ bảng>.
Russ BHRan

Bài viết này của Chris Coyer giải thích rất rõ: css-tricks.com/fixing-tables-long-strings
cssyphus

24

Những gì tôi làm là:

  1. Đặt chiều rộng td:

    <td width="200" height="50"><!--blaBlaBla Contents here--></td>
  2. Đặt chiều rộng td với CSS:

    <td style="width:200px; height:50px;">
  3. Đặt lại chiều rộng là tối đa và tối thiểu với CSS:

    <td style="max-width:200px; min-width:200px; max-height:50px; min-height:50px; width:200px; height:50px;">

Nghe có vẻ hơi lặp đi lặp lại nhưng nó mang lại cho tôi kết quả mong muốn. Để đạt được điều này một cách dễ dàng, bạn có thể cần đặt các giá trị CSS trong một lớp trong biểu định kiểu của mình:

.td_size {    
  width:200px; 
  height:50px;
  max-width:200px;
  min-width:200px; 
  max-height:50px; 
  min-height:50px;
  **overflow:hidden;** /*(Optional)This might be useful for some overflow contents*/   
}

sau đó:

<td class="td_size">

Đặt thuộc tính lớp cho bất kỳ <td>bạn muốn.


Đây là giải pháp duy nhất dường như hoạt động trong mọi trường hợp mà không áp đặt các hạn chế bổ sung, không mong muốn.
Sam

3

Tôi đã sử dụng cái này

.app_downloads_table tr td:first-child {
    width: 75%;
}

.app_downloads_table tr td:last-child {
    text-align: center;
}

Đừng quên ntch-child (2) (hoặc 3, 4, v.v.)

bảng td nth-child (n + 1) {...} sẽ bao gồm tất cả trừ cột đầu tiên
Ed Randall

2

Nếu bạn không muốn bố trí cố định, chỉ định một lớp cho cột có kích thước phù hợp.

CSS:

.special_column { width: 120px; }

HTML:

<td class="special_column">...</td>

2

Nó cũng giúp, để đặt vào "ô điền" cuối cùng, với width: auto . Điều này sẽ chiếm không gian còn lại và sẽ để lại tất cả các kích thước khác theo quy định.


2

Làm cho câu trả lời được chấp nhận trả lời cho màn hình nhỏ khi nhỏ hơn chiều rộng cố định.

HTML:

<table>
  <tr>
    <th>header 1</th>
    <th>header 234567895678657</th>
  </tr>
  <tr>
    <td>data asdfasdfasdfasdfasdf</td>
    <td>data 2</td>
  </tr>
</table>

CSS

table{
    border: 1px solid black;
    table-layout: fixed;
    max-width: 600px;
    width: 100%;
}

th, td {
    border: 1px solid black;
    overflow: hidden;
    max-width: 300px;
    width: 100%;
}

Fiddle

https://jsfiddle.net/w9s3ebzt/



1

KAsun có ý tưởng đúng. Đây là mã chính xác ...

<style type="text/css">
  th.first-col > div, 
  td.first-col > div {
    overflow:hidden;
    white-space:nowrap;
    width:100px
  }
</style>

<table>
  <thead><tr><th class="first-col"><div>really long header</div></th></tr></thead>
  <tbody><tr><td class="first-col"><div>really long text</div></td></tr></tbody>
</table>

1

Theo câu trả lời của tôi ở đây , cũng có thể sử dụng đầu bàn (có thể để trống) và áp dụng độ rộng tương đối cho mỗi ô của đầu bảng. Độ rộng của tất cả các ô trong thân bảng sẽ phù hợp với chiều rộng của đầu cột của chúng. Thí dụ:

HTML

<table>
  <thead>
    <tr>
      <th width="5%"></th>
      <th width="70%"></th>
      <th width="15%"></th>
      <th width="10%"></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Some text...</td>
      <td>May 2018</td>
      <td>Edit</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Another text...</td>
      <td>April 2018</td>
      <td>Edit</td>
    </tr>
  </tbody>
</table>

CSS

table {
  width: 600px;
  border-collapse: collapse;
}

td {
  border: 1px solid #999999;
}

Xem kết quả

Ngoài ra, sử dụng colgroupnhư được đề xuất trong câu trả lời của Hyathin.


0

Tôi sử dụng một phần tử :: sau trong ô nơi tôi muốn đặt chiều rộng tối thiểu bất kể văn bản có mặt như thế nào:

.cell::after {
    content: "";
    width: 20px;
    display: block;
}

Tôi không phải đặt chiều rộng trên bảng cha mẹ cũng như không sử dụng bố trí bảng.


-4

Tôi thấy câu trả lời của KAsun hoạt động tốt hơn bằng cách sử dụng vw thay vì px như vậy:

<td><div style="width: 10vw" >...............</div></td>

Đây là kiểu dáng duy nhất tôi cần để điều chỉnh độ rộng cột


-5

Bạn không cần đặt "fixed"- tất cả những gì bạn cần là đặt overflow:hiddenvì độ rộng cột được đặt.


3
Mà sẽ ẩn nội dung đằng sau biên giới di động, không phải là một ý tưởng tốt.
mystrdat
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.